2010/10/21 Daniel Veillard <veillard(a)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