
2010/10/21 Daniel Veillard <veillard@redhat.com>:
The SMBIOS data are a standardized set of data structures available in the BIOS area of PCs. Those blocks of data describe things like BIOS version informations, machine vendor, model and identifiers, as well as various parts of the machine capability. On a linux machine running dmidecode allows to dump those informations.
Spec available at the DMTF: http://dmtf.org/standards/smbios
From a virtualization POV, it's mostly the first block describing the BIOS named "type 0" and the second block describing the machine named "type 1" which are of interest. Those data are usually accessed either from the OS or from management application, and being able to override the default setings may be needed for such management.
The suggested XML description follows the logical structure of the data, one top smbios description, with one or more blocks, each containing the entries, the example below gives an idea:
<smbios> <table type="0"> <entry name="Vendor">QEmu/KVM</entry> <entry name="Version">0.13</entry> </table> <table type="1"> <entry name="Manufacturer">Fedora</entry> <entry name="Product">Virt-Manager</entry> <entry name="Version">0.8.2-3.fc14</entry> <entry name="UUID">c7a5fdbdedaf9455926ad65c16db1809</entry> </table> </smbios>
The patch serie includes: - the change to the doamin schemas - the code to parse this in config structure - the QEmu driver part - a test example
Currently missing is the conf code to save the data back, and documentation for the domain extension. I think it's possible set some of those settings in Xen too, but I don't know if I will take the time of a driver for it. For ESX it seems there is an option to inherit some of the SMBIOS data from the host on the guest but I'm not sure some of the fields can be manipulated directly. I don't know what VirtualBox can set there either,
Daniel
Okay, I looked at what can be done for ESX. Looking at the SMBIOS data from _inside_ a ESX guest using dmidecode I can get this <smbios> <table type="0"> <entry name="Vendor">Phoenix Technologies LTD</entry> <entry name="Version">6.00</entry> </table> <table type="1"> <entry name="Manufacturer">VMware Inc.</entry> <entry name="Product">VMware Virtual Platform</entry> <entry name="Version">None</entry> <entry name="Serial">VMware-[domain/uuid]</entry> <entry name="UUID">[domain/uuid]</entry> </table> </smbios> The UUID and Serial are basically the UUID of the guest. Putting smbios.reflecthost = "true" (defaults to false) in the VMX file results in <smbios> <table type="0"> <entry name="Vendor">Phoenix Technologies LTD</entry> <entry name="Version">6.00</entry> </table> <table type="1"> <entry name="Manufacturer">LENOVO</entry> <entry name="Product">7673J3G</entry> <entry name="Version">None</entry> <entry name="Serial">VMware-[domain/uuid]</entry> <entry name="UUID">[domain/uuid]</entry> </table> </smbios> So Manufacturer and Product from the type 1 table are now inherited from the SMBIOS of the physical host. But this is all from inside the guest. From _outside_ the guest over the vSphere API I can only access "LENOVO" and "7673J3G", the data of the physical host. To make it even worse, it seems that none of this can be edited in any way (apart from the Serial/UUID because this is the domain UUID). Therefore, I think there is no possible useful implementation for this in the ESX driver, besides outputting static unchangeable data. Matthias