Ubuntu Server Certified Hardware Coverage Guide¶
Welcome!¶
The Ubuntu Certification team is continuously revisiting the scope of the tests comprising the Ubuntu Certified programme and it is reviewed every six months, following the same cadence as the Ubuntu OS. This revision of new tests is performed during Ubuntu’s development cycle and it never applies to already-released versions of Ubuntu.
This document was previously tied to specific Ubuntu Server LTS releases. Going forward, however, it will apply to all Ubuntu LTS releases. Release specific versions of this guide will no longer be produced.
For each test job, one of the following certification statuses is specified:
- Blocking
Features that are required for certification. If any of the blocking tests fails, the certification will fail.
- Non-blocking
Features that are tested but not mandatory for certification. Failure in non-blocking tests will not prevent certification. However, a note will be added to the certificate to inform potential customers or users.
Note
Only categories of hardware are tested and not specific types of hardware. For example, tests are run to verify USB controllers work, but the type of peripheral(s) used during those tests are not specified.
Coverage is flexible based on customer requirements (for example, if a device’s use cases don’t require LEDs, then LEDs can be non-blocking)
Full test descriptions can be found in Canonical certification site for partners:
Ubuntu Server LTS Coverage¶
As introduced in the 18.04 LTS cycle, Ubuntu LTS certification requires the testing of Vendor Approved Options in order to meet the requirements of the Ubuntu Server Certification programme. This means that all Vendor Approved Options for sale with a given model Server must be covered by testing at some point.
Once a Vendor Approved Option has been tested in one Server Model, it does not need to be retested for another Server Model. This increases the scope of testing but minimizes the amount of extra test work necessary. Thus, if Model A and Model B both feature Networkcard 1, Networkcard 1 is only required to be tested once in either Model A or Model B, and will be considered tested for both.
server-full¶
Note
The certification tests presented in this document are validated by Checkbox version 4.2.0.dev76.
Blocking¶
These items must be tested and must pass testing to be considered Certified.
Installation Methods
Metal as a Service is a required part of server certification testing. If a system cannot be automatically enlisted, commissioned, and deployed using MAAS without user interaction other than manually powering the system on the first time the system cannot pass Ubuntu Server Certification. An exception is made here for systems that use management engines like Intel AMT that provide no means of in-band configuration and thus require manual configuration in MAAS to work.
Intel Optane DCPMM devices
Configuration
Intel DCPMMs are tested in both Memory and AppDirect (Storage) modes. Specifically, only the fsdax, raw, and sector modes are covered, devdax mode is not currently tested.
Internal storage (RAID and Non-RAID). Only hardware RAID solutions are tested.
Storage devices (HDDs, SSDs, Hybrid, NVMe, RAID LUNs) are I/O load tested using open source tools
Basic RAID levels (0,1 or 5)
OCP, Mezzanine, or Daughter Cards
Any OCP, mezzanine or daughter card that enables ports on the motherboard must pass. (e.g. a mezz card that enables 10Gb on onboard SFP+ ports)
System management. Tests are applicable to systems that ship with a BMC or similar management device. Limited to Power Management and User/Password management for MAAS control and probing for info from the BMC.
In-Band Management (IPMI)
Out-of-Band Management (IPMI, AMT, etc)
Chassis Management (Blade / Cartridge type systems)
Virtual Machine Management (for LPAR or VM systems like Power or z13)
MAAS Compatibility
Containers
LXC must function
System Identification
Ensure that the Make/Model being returned to the operating system and via OOB Management is the same as what is being submitted for certification. Firmware must accurately reflect the Make/Model being certified.
Boot/Reboot
PXE Booting from a MAAS server
Rebooting to finalize deployment
GPGPU Devices (NVIDIA)
Systems that are AI/ML focused, such as those that ship with multiple GPGPUs and marketed for AI/ML workloads, must pass the GPGPU tests in addition to the standard test plan for certification.
Any GPGPU that is listed as a Vendor Approved Option for a server model must be tested regardless of whether that system is AI/ML focused (e.g. a small server that includes a T4 GPU option)
Benchmarks tests¶
The following test units are covered in this category:
Unit type: | template |
Category ID: | benchmarks |
Status: | Blocking |
After-suspend: | True |
From template: | benchmarks/disk/hdparm-cache-read_name |
Template resource: | device |
Template filter: | device.category == ‘DISK’ |
CPU tests¶
A general stress test is performed to verify that the system can handle a sustained high load for a period of time.
Currently, the following architectures can be tested:
Both Intel and AMD CPU platforms (64-bit only)
IBM and OpenPOWER Power 8 and Power 9 (ppc64el)
ARM64 (ARM64 based Server Models must use a SoC that has been SoC Certified.)
IBM s390x
RISC-V (when applicable)
The following test units are covered in this category:
Category ID: | cpu |
Status: | Blocking |
Purpose: | Runs a test for clock jitter on SMP machines. |
After-suspend: | True |
Plugin: | shell |
Category ID: | cpu |
Status: | Blocking |
Purpose: | <missing purpose> |
Description: | Use the Firmware Test Suite (fwts cpufreq) to ensure that the CPU can run at its maximum frequency. |
Environment variable: | LD_LIBRARY_PATH, SNAP |
User: | root |
Plugin: | shell |
Disk tests¶
The following test units are covered in this category:
Category ID: | disk |
Status: | Blocking |
Purpose: | Uses lsblk to gather information about each disk detected on the system under test. |
After-suspend: | True |
Plugin: | shell |
Unit type: | template |
Category ID: | disk |
Status: | Blocking |
From template: | disk/disk_cpu_load_name |
Template resource: | device |
Template filter: | device.category == ‘DISK’ |
Unit type: | template |
Category ID: | disk |
Status: | Blocking |
From template: | disk/disk_stress_ng_name |
Template resource: | device |
Template filter: | device.category == ‘DISK’ |
Unit type: | template |
Category ID: | disk |
Status: | Blocking |
After-suspend: | True |
Environment variable: | DISK_MDADM_READ_PERF, DISK_NVME_READ_PERF, DISK_READ_PERF |
From template: | disk/read_performance_name |
Template resource: | device |
Template filter: | device.category == ‘DISK’ |
Ethernet Device tests¶
The following test units are covered in this category:
ethernet/multi_iperf3_nic_device__index___interface
Multi-NIC Iperf3 stress testing for NIC {interface}
Unit type: | template |
Category ID: | ethernet |
Status: | Blocking |
Environment variable: | TEST_TARGET_IPERF |
From template: | ethernet/multi_iperf3_nic_device__index___interface |
Template resource: | device |
Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
Memory tests¶
Proper detection
General usage
A general stress test is performed to verify that the system can handle a sustained high load for a period of time.
The following test units are covered in this category:
Miscellaneous tests¶
The following test units are covered in this category:
Category ID: | miscellanea |
Status: | Blocking |
Purpose: | Test to verify that the system uses production, rather than pre-release, versions of the kernel and the OS. |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Blocking |
Purpose: | Sanity check of CPU information; fails if CPU is an engineering sample |
User: | root |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Blocking |
Purpose: | Sanity check of DMI system identification data (for servers) |
User: | root |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Blocking |
Purpose: | Test to verify that the system booted in EFI mode with Secure Boot active. |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Blocking |
Purpose: | <missing purpose> |
Description: | If the system was installed via MAAS from a cert server, the MAAS version used should be contained in /etc/installed-by-maas |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Blocking |
Purpose: | This will run some basic commands in-band against a BMC, verifying that IPMI works. Use of MAAS to deploy the system implicitly tests out-of-band BMC control. |
User: | root |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Blocking |
Purpose: | Test to verify that the kernel is not tainted by out-of-tree drivers, live patches, proprietary modules, etc. |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Blocking |
Purpose: | Run Firmware Test Suite (fwts) klog tests. |
Environment variable: | PLAINBOX_SESSION_SHARE |
User: | root |
Plugin: | shell |
miscellanea/maas_user_check
Verify BMC user called ‘maas’ was successfully created with administrative privileges
Category ID: | miscellanea |
Status: | Blocking |
Purpose: | This will verify that the maas user was successfully created with admin privileges |
User: | root |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Blocking |
Purpose: | <missing purpose> |
Description: | Run Firmware Test Suite (fwts) olog tests (ppc64el only). |
Environment variable: | PLAINBOX_SESSION_SHARE |
User: | root |
Plugin: | shell |
Non-device specific networking tests¶
Ethernet devices are tested at their full speed and must show a minimum of 80% of advertised maximum speed.
High Speed network devices (40 Gb/s and faster must also meet this requirement, however additional configuration and testing steps may be required)
CNAs and Infiniband devices must at least pass in network mode.
The following test units are covered in this category:
NVDIMM device tests¶
The following test units are covered in this category:
Category ID: | nvdimm |
Status: | Blocking |
Purpose: | This test will do a quick health check of installed NVDIMM devices. |
User: | root |
Plugin: | shell |
Power Management tests¶
The following test units are covered in this category:
USB tests¶
Externally accessible physical USB ports are tested to ensure operability.
USB 2.0/3.x
The following test units are covered in this category:
Category ID: | usb |
Status: | Blocking |
Purpose: | <missing purpose> |
Description: | Tests USB 2.0 or 1.1 ports on a system by doing write/read/compare tests on randomly created data. It requires that a USB stick is plugged into an available USB port before running the certification suite. |
After-suspend: | True |
User: | root |
Plugin: | shell |
Category ID: | usb |
Status: | Blocking |
Purpose: | Tests USB 3.0 ports on a system by doing write/read/compare tests on randomly created data. It requires that a USB stick is plugged into an available USB port before running the certification suite. Additionally, it will only work with USB sticks and ports rated for USB 3.0 speeds or faster. |
After-suspend: | True |
User: | root |
Plugin: | shell |
Virtualization tests¶
(Only applies to Ubuntu on Bare Metal and limited LPAR scenarios.)
Virtualization extensions
Running an Ubuntu image on KVM
The following test units are covered in this category:
Category ID: | virtualization |
Status: | Blocking |
Purpose: | Verifies that an LXD container can be created and launched |
Environment variable: | LXD_ROOTFS, LXD_TEMPLATE |
Plugin: | shell |
Non-blocking¶
These items will not block certification if they fail. Any failures should be referred to the Certification Team so that we can investigate and file bugs where appropriate.
Installation Methods
ISO Installation
Storage
Advanced RAID levels (10, 15, 50, etc)
VROC
External Storage
iSCSI
FC, FCoE
Storage Management Tools
Storage management tools packaged and documented for Ubuntu
Storage management tools should be fully functional on Ubuntu (executable from within Ubuntu)
Networking
SmartNICs
Infiniband
System Management
Redfish
Redfish should be tested where supported, failures should be referred to the Certification Team, but IPMI can be used if Redfish fails.
Firmware Updates
Firmware update tools packaged for Ubuntu
Firmware updates possible from within the Ubuntu OS
TPM 2.0 Devices
Input devices
External keyboard (basic functionality)
CPU tests¶
The following test units are covered in this category:
Unit type: | template |
Category ID: | cpu |
Status: | Non-blocking |
Description: | Validate that the Floating Point Unit is running on {platform} device. |
From template: | cpu/arm64_vfp_support_platform |
Template resource: | cpuinfo |
Template filter: | cpuinfo.platform == ‘aarch64’ |
cpu/armhf_vfp_support_platform
Validate that the Vector Floating Point Unit is running on {platform} device
Unit type: | template |
Category ID: | cpu |
Status: | Non-blocking |
Description: | Validate that the Vector Floating Point Unit is running on {platform} device. |
From template: | cpu/armhf_vfp_support_platform |
Template resource: | cpuinfo |
Template filter: | cpuinfo.platform == ‘armv7l’ |
Category ID: | cpu |
Status: | Non-blocking |
Purpose: | Comprehensive testing of CPU scaling capabilities and directives via cpufreq. |
User: | root |
Plugin: | shell |
Category ID: | cpu |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | Uses the Firmware Test Suite (fwts) to test the power saving states of the CPU. |
Environment variable: | LD_LIBRARY_PATH, PLAINBOX_SESSION_SHARE, SNAP |
User: | root |
Plugin: | shell |
Category ID: | cpu |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | Attaches the FWTS desktop diagnosis results log to the submission. |
Plugin: | attachment |
Disk tests¶
The following test units are covered in this category:
Unit type: | template |
Category ID: | disk |
Status: | Non-blocking |
From template: | disk/fstrim_name |
Template resource: | device |
Template filter: | device.category == ‘DISK’ |
Ethernet Device tests¶
The following test units are covered in this category:
Unit type: | template |
Category ID: | ethernet |
Status: | Non-blocking |
From template: | ethernet/ethertool_check_device__index___interface |
Template resource: | device |
Template filter: | device.category == ‘NETWORK’ and device.interface != ‘UNKNOWN’ |
Firmware tests¶
The following test units are covered in this category:
Informational tests¶
The following test units are covered in this category:
Category ID: | info |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | Attaches the config file for debugging config issues |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches a report of CPU information |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | Attaches json dumps of installed dkms package information. |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches a copy of /var/log/dmesg or the current dmesg buffer to the test results |
User: | root |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches info on DMI |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | Attaches dmidecode output |
User: | root |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches the firmware version |
User: | root |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | Attaches the buildstamp identifier for the OS |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches information about disk partitions |
User: | root |
Plugin: | attachment |
Unit type: | template |
Category ID: | info |
Status: | Non-blocking |
Description: | <missing description> |
From template: | info/hdparm_name.txt |
Template resource: | device |
Template filter: | device.category == ‘DISK’ |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches the debug log from the virtualization/kvm_check_vm test to the results submission. |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | <missing description> |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Output whether secure boot is enabled or disabled |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches the installer debug log if it exists. |
User: | root |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches the kernel command line used to boot |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches disk block devices mount points |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches lshw output |
User: | root |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches a list of the currently running kernel modules. |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches very verbose lspci output. |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches very verbose lspci output (with central database Query). |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches the system topology as presented by the lstopo command |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches the system topology as presented by the lstopo command |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches a list of detected USB devices. |
After-suspend: | True |
User: | root |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches info on system memory as seen in /proc/meminfo. |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | Attaches modinfo information for all currently loaded modules |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | Attaches the contents of the various modprobe conf files. |
User: | root |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | Attaches the contents of the /etc/modules file. |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | Attaches the contents of various sysctl config files. |
User: | root |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | Attaches a report of sysfs attributes. |
Plugin: | attachment |
Category ID: | info |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | Attaches a summary of devices found via udev |
Plugin: | attachment |
Miscellaneous tests¶
The following test units are covered in this category:
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | Test that the /var/crash directory doesn’t contain anything. Lists the files contained within if it does, or echoes the status of the directory (doesn’t exist/is empty). |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | This will gather some information about the BMC itself for diagnostic purposes. This will not work on non-IPMI systems like AMT and blade/sled type systems. |
User: | root |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | Attempts to identify the CPU family of an x86/amd64 processor |
User: | root |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | Verify installed Debian package files against MD5 checksum lists from /var/lib/dpkg/info/*.md5sums. |
User: | root |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | Test to verify that the system booted from the network. Works only on EFI-based systems. |
User: | root |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | Retrieve the computer’s make and model for easier access than digging through the dmidecode output. |
User: | root |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | Attaches the FWTS klog results log to the submission |
Plugin: | attachment |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | Attaches the FWTS olog results log to the submission |
Plugin: | attachment |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | Attaches the FWTS oops results log to the submission |
Plugin: | attachment |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | Test that the system supports rebooting into the firmware setup utility. |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | Test to verify that the system booted in Secure Boot active. |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | Generates a baseline sosreport of logs and system data |
User: | root |
Plugin: | shell |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | <missing description> |
User: | root |
Plugin: | attachment |
Category ID: | miscellanea |
Status: | Non-blocking |
Purpose: | <missing purpose> |
Description: | A meta-job that verifies the data necessary for a complete result submission are present. Failure indicates that the results are incomplete and may be rejected. |
Plugin: | shell |
Non-device specific networking tests¶
The following test units are covered in this category:
USB tests¶
The following test units are covered in this category:
Q & A¶
- What do you mean by MAAS Compatibility?
In order to be listed as certified, a system is required to have been deployed using Ubuntu’s Metal as a Service (MAAS) tool. This is determined by using MAAS to enlist, commission, and deploy the OS and certification tools onto the target systems to be tested. Additionally, there should be as little human intervention as necessary to perform this task, such as the user manually needing to power the machine on during the initial enlistment phase.
- Does changing the speed of processors require a new certificate?
No. Only changing the CPU family would require retesting and issuing a new certificate.
- What about non-x86 processors?
Any architecture supported by Ubuntu may be certified. At this time, this includes x86_64, ARM, ARM64, Power 8, Power 9, s390x, and RISC-V.
Complete Test Plan¶
The Hardware Certification Testing Coverage aims to test as thorough as possible and ensure that systems and their components are compatible and function well with Ubuntu and Ubuntu Tools; however, it is not possible for this scope of testing to catch issues that are unique to a system or platform or may appear during the hardware development lifecycle. For example, tools to manage firmware, storage configurations, etc., and their usage vary by vendor and platform, but end users expect this functionality. This testing is not done by the Ubuntu Server testing tools and and should be tested by the Partner on a regular basis.
Because of this, please work with your Partner Engineer to outline and document those tests that are not covered by the standard tooling. Partners are strongly encouraged to integrate the Ubuntu test tools and Ubuntu OS into their own processes for OS and Hardware Validation. Your Partner Engineer will gladly help assist you in any way to make this possible.