Reporting Processor, Memory, and BIOS dmidecode Introspection Data

As of today, node introspection data provides information related to CPU, memory, and BIOS. However, a few more key data fields are important to help deployers select nodes matching specific criteria to facilitate smart scheduling. Currently, total and physical memory size are collected. However, more specific information about DIMMs would help deployers to schedule nodes for low latency workloads. Similarly, CPU data fields such as signature and socket designation would be useful for inventory management. This spec proposes a collector for the ironic-python-agent to obtain a few more key details of CPU, memory, and BIOS.

Problem description

Configuring nodes for better performance is a priority from the operator’s point of view. The operator can specify node capabilities in a nova flavor for a node to be selected for scheduling. Collecting key CPU, memory, and BIOS data fields will enable operator to create flavors based on discovered hardware features.

Here is a list of the key data fields that might be used for this purpose:

  • BIOS Version: To know which firmware version is running on the host, for maintenance reasons.

  • Socket Designation: To know which CPU is seated in which socket, useful for inventory management.

  • Signature: To know which CPU features are available.

  • Max Speed: To know single thread performance.

  • Core Count, Core Enabled, Thread Count: To know about hyperthreading, for smart scheduling.

  • Number Of Memory Devices: This is needed for low latency workloads, to ensure lowest possible latency environment for an application (for the nova scheduler to select a node matching specific criteria).

  • Memory Device Size: Same as above.

  • Memory Device Speed: Same as above.

Proposed change

The proposed change is to implement a collector for listing the details of the processor, memory, and BIOS in the ironic-python-agent’s inspector module using the dmidecode utility and then returning the collected data to the ironic-inspector. The processing done on this data in the ironic-python-agent is limited, to allow for a server side plugin to process as much or as little of the data as needed.


The dmidecode utility reports information about a system’s hardware as described in its system BIOS according to the SMBIOS/DMI standard (see a sample output). This information includes system manufacturer, model name, serial number, BIOS version and other details such as usage status of CPU sockets and memory module slots. The dmidecode output is vendor-dependent and the fields are optional. The deployer should be aware of this when using the data.

The format of the data collected by the new collector in ironic-python-agent looks like this:

"inventory": {
"dmi": {
  "bios": {
    "Vendor": <vendor name>,
    "Characteristics": "",
    "Runtime Size": "64 kB",
    "BIOS Revision": "0.0",
    "Firmware Revision": "0.0",
    "Version": "SE5C610.86B.01.01.0016.033120161139",
    "ROM Size": "16384 kB",
    "Address": "0xF0000",
    "Handle": "Handle 0x0000, DMI type 0, 24 bytes",
    "Release Date": "03/31/2016",
  "memory": {
    "Maximum Capacity": "192 GB",
    "Number Of Devices": "24",
    "Use": "System Memory",
    "Error Information Handle": "Not Provided",
    "Error Correction Type": "Single-bit ECC",
    "Location": "System Board Or Motherboard",
    "devices": [
       "Configured voltage": "Unknown",
       "Rank": "2",
       "Type": "<OUT OF SPEC>",
       "Array Handle": "0x0020",
       "Handle": "Handle 0x0022, DMI type 17, 40 bytes",
       "Serial Number": "EF3D2255",
       "Total Width": "72 bits",
       "Minimum voltage": "Unknown",
       "Form Factor": "DIMM",
       "Manufacturer": <manufacturer name>,
       "Data Width": "64 bits",
       "Configured Clock Speed": "1866 MHz",
       "Asset Tag": "",
       "Bank Locator": "NODE 1",
       "Part Number": "9965600-012.A01G",
       "Set": "None",
       "Maximum voltage": "Unknown",
       "Error Information Handle": "Not Provided",
       "Locator": "DIMM_A1",
       "Type Detail": "Synchronous",
       "Speed": "2133 MHz",
       "Size": "16384 MB"
  "cpu": {
    "devices": [
       "Upgrade": "<OUT OF SPEC>",
       "Socket Designation": "CPU1",
       "L2 Cache Handle": "0x0019",
       "Version": <cpu device version>,
       "Type": "Central Processor",
       "Core Count": "18",
       "Status": "Populated, Enabled",
       "Handle": "Handle 0x001B, DMI type 4, 48 bytes",
       "Core Enabled": "18",
       "External Clock": "100 MHz",
       "Serial Number": "",
       "Current Speed": "2300 MHz",
       "Manufacturer": <cpu device manufacturer name>,
       "L3 Cache Handle": "0x001A",
       "Asset Tag": "",
       "Flags": "",
       "Signature": "Type 0, Family 6, Model 63, Stepping 2",
       "L1 Cache Handle": "0x0018",
       "ID": "F2 06 03 00 FF FB EB BF",
       "Part Number": "",
       "Family": <cpu device family>,
       "Thread Count": "36",
       "Voltage": "1.6 V",
       "Max Speed": "4000 MHz",
       "Characteristics": ""



Data model impact


HTTP API impact


Client (CLI) impact


Ironic python agent impact

The change proposed above will be implemented in ironic-python-agent.

Performance and scalability impact


Security impact


Deployer impact

The deployer will be able to get more data about the CPUs, DIMMs, and BIOS. This information would be useful in configuring the system for better performance. The deployer will enable the optional collector dmi-decode via the ipa-inspection-collectors kernel argument.

Developer impact




Primary assignee:

Ramamani Yeleswarapu <Rama_Y>

Work Items

  • Implement the collection of processor, memory, and BIOS fields mentioned above using the dmidecode utility in a new collector in the ironic-python-agent.




Unit test cases will be added.