Merge "Collect Bios, Memory and Processor Info from Dmidecode"

This commit is contained in:
Jenkins 2017-05-12 11:43:38 +00:00 committed by Gerrit Code Review
commit f44e945ce6
1 changed files with 255 additions and 0 deletions

View File

@ -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 operators
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": <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": ""
},
...
]
}
},
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 <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**.
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