From 916a4857820f8b75f434669c46d95e5f57a8abb3 Mon Sep 17 00:00:00 2001 From: Ramamani Yeleswarapu Date: Sun, 4 Dec 2016 23:52:00 -0800 Subject: [PATCH] Collect Bios, Memory and Processor Info from Dmidecode Proposing a spec to add additional bios, memory, and cpu data fields to node properties from the dmidecode output collected by a new collector in Ironic Python Agent. Change-Id: I7be236e3dc96fea5ad310395c21332a33d7f4bb8 Partial-Bug: #1635057 --- specs/dmidecode-reporting.rst | 255 ++++++++++++++++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 specs/dmidecode-reporting.rst diff --git a/specs/dmidecode-reporting.rst b/specs/dmidecode-reporting.rst new file mode 100644 index 0000000..8db9cda --- /dev/null +++ b/specs/dmidecode-reporting.rst @@ -0,0 +1,255 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + + http://creativecommons.org/licenses/by/3.0/legalcode + +================================================================== +Reporting Processor, Memory, and BIOS dmidecode Introspection Data +================================================================== + +https://bugs.launchpad.net/ironic-python-agent/+bug/1635057 + +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-inspector** 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 will be of use 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 the server side plugin to +process as much or as little of the data as needed. + +.. note:: + + 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:: + + "dmi": { + "bios": { + "Vendor": , + "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": "", + "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": , + "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": "", + "Socket Designation": "CPU1", + "L2 Cache Handle": "0x0019", + "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": , + "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": , + "Thread Count": "36", + "Voltage": "1.6 V", + "Max Speed": "4000 MHz", + "Characteristics": "" + }, + ... + ] + } + }, + + +Alternatives +------------ + +None + +Data model impact +----------------- + +None + +HTTP API impact +--------------- + +None + +Client (CLI) impact +------------------- + +None + +Ironic python agent impact +-------------------------- + +The change proposed above will be implemented in **ironic-python-agent**. + +Performance and scalability impact +---------------------------------- + +None + +Security impact +--------------- + +None + +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 provide the optional collector via +the ``ipa-inspection-collectors`` kernel argument. + + +Developer impact +---------------- + +None + + +Implementation +============== + +Assignee(s) +----------- + +Primary assignee: + Ramamani Yeleswarapu + +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**. + + +Dependencies +============ + +None + + +Testing +======= + +Unit test cases will be added. + + +References +========== + +* `Dmidecode utility`_ + +* `SMBIOS/DMI standard`_ + +* `Scheduling`_ + +.. _scheduling: + http://docs.openstack.org/project-install-guide/baremetal/draft/configure-integration.html#configure-compute-flavors-for-use-with-the-bare-metal-service + +.. _dmidecode utility: + http://www.nongnu.org/dmidecode/ + +.. _SMBIOS/DMI standard: + http://www.dmtf.org/standards/smbios + +.. _sample output: + http://www.nongnu.org/dmidecode/sample/dmidecode.txt