Know Your Surroundings: SMBIOS
Posted on August 22, 2009
Some time ago I discussed The Joy of IPMI. IPMI is a handy want of interacting with the Baseboard Management Controller (BMC) on enterprise class systems to retrieve information such as sensor data, event log, and even Serial over LAN (SoL, poor mans console). IPMI can also help you identify components in the system but isn’t the best means of doing so. This is where SMBIOS comes in and can complete the picture.
System Management BIOS (SMBIOS) is a DMTF specification that can give you extended information about a system. Here’s how its put by the DTMF:
The information is intended to allow generic instrumentation to deliver this information to management applications that use DMI, CIM or direct access, eliminating the need for error prone operations like probing system hardware for presence detection.
Put another way, it’s an easy way to get the lay of the land.
Using SMBIOS on Solaris is easy, using the cleverly named smbios command. If you simply run the command with no args you’ll get a flood of information which makes no sense at first glance. Here is an example:
$ smbios ID SIZE TYPE 0 68 SMB_TYPE_BIOS (BIOS information) Vendor: American Megatrends Inc. Version String: 0ABJX039 Release Date: 04/11/2007 Address Segment: 0xf000 ROM Size: 1048576 bytes Image Size: 65536 bytes Characteristics: 0x17c0bda90 SMB_BIOSFL_ISA (ISA is supported) SMB_BIOSFL_PCI (PCI is supported) SMB_BIOSFL_PLUGNPLAY (Plug and Play is supported) SMB_BIOSFL_FLASH (BIOS is Flash Upgradeable) SMB_BIOSFL_SHADOW (BIOS shadowing is allowed) SMB_BIOSFL_ESCD (ESCD support is available) SMB_BIOSFL_CDBOOT (Boot from CD is supported) SMB_BIOSFL_SELBOOT (Selectable Boot supported) SMB_BIOSFL_ROMSOCK (BIOS ROM is socketed) SMB_BIOSFL_EDD (EDD Spec is supported) SMB_BIOSFL_I5_PRINT (int 0x5 print screen svcs) SMB_BIOSFL_I9_KBD (int 0x9 8042 keyboard svcs) SMB_BIOSFL_I14_SER (int 0x14 serial svcs) SMB_BIOSFL_I17_PRINTER (int 0x17 printer svcs) ...
If you just dump the whole output to a file and start grepping around you’ll find interesting information within…
$ smbios | grep DIMM Location Tag: DIMM0 Form Factor: 9 (DIMM) Device Locator: DIMM0 Location Tag: DIMM1 ... $ smbios | grep Sun Manufacturer: Sun Microsystems Product: Sun Fire X4100 M2 Manufacturer: Sun Microsystems Product: Sun Fire X4100 M2 Manufacturer: Sun Microsystems ...
So you can see that there is interesting data in there… but how do we get it in some more palatable form?
The DMTF standard breaks down the data available from SMBIOS into “types”. If you download the System Management BIOS Reference Specification you can get all sort of details on data available based on type. Each type is assigned an integer. Some are required and some are optional. Here are the required types:
- BIOS Information (Type 0)
- System Information (Type 1)
- System Enclosure (Type 3)
- Processor Information (Type 4)
- Cache Information (Type 7)
- System Slots (Type 9)
- Physical Memory Array (Type 16)
- Memory Device (Type 17)
- Memory Array Mapped Address (Type 19)
- Memory Device Mapped Address (Type 20)
- System Boot Information (Type 32)
The smbios command accepts the type number as an argument, so we can thus hone down the output to what we really want, for instance to get just the “System Information” we nab type 1:
$ smbios -t 1 ID SIZE TYPE 1 173 SMB_TYPE_SYSTEM (system information) Manufacturer: Sun Microsystems Product: Sun Fire X4100 M2 Version: To Be Filled By O.E.M. Serial Number: XXXXXXXXXXXX UUID: 00000000-0000-0000-0000-00144fXXXXXXXX Wake-Up Event: 0x6 (power switch) SKU Number: To Be Filled By O.E.M. Family: To Be Filled By O.E.M.
Let me note that the information above is correct, and the X’ed out Serial Number is in fact the correct one that Sun Support would want. In the case of Dell PowerEdge servers that I’ve tested the “Serial Number” was the Dell Service Tag. This alone is handy dandy, but lets try the System Slots, Type 9. This time I’ll run the command on my home white-box workstation:
$ smbios -t 9 ID SIZE TYPE 32 17 SMB_TYPE_SLOT (upgradeable system slot) Location Tag: J6B2 Reference Designator: J6B2 Slot ID: 0x0 Type: 0xa5 (PCI Express) Width: 0xd (16x or x16) Usage: 0x4 (in use) Length: 0x4 (long length) Slot Characteristics 1: 0xc SMB_SLCH1_33V (provides 3.3V) SMB_SLCH1_SHARED (opening shared with other slot) Slot Characteristics 2: 0x1 SMB_SLCH2_PME (slot supports PME# signal) ID SIZE TYPE 33 17 SMB_TYPE_SLOT (upgradeable system slot) Location Tag: J6B1 Reference Designator: J6B1 Slot ID: 0x1 Type: 0xa5 (PCI Express) Width: 0x8 (1x or x1) Usage: 0x3 (available) Length: 0x3 (short length) Slot Characteristics 1: 0xc SMB_SLCH1_33V (provides 3.3V) SMB_SLCH1_SHARED (opening shared with other slot) Slot Characteristics 2: 0x1 SMB_SLCH2_PME (slot supports PME# signal) ...
Direct your eyes to “Usage”, you can see the fist 16x PCI Express slot is “in use” (my NVidia Graphics Card), the second PCI Express 1x is “available”.
If you haven’t figured it out already, the prtdiag command gets its data largely from SMBIOS:
$ prtdiag System Configuration: Sun Microsystems Sun Fire X4100 M2 BIOS Configuration: American Megatrends Inc. XXXXXXXXX 04/11/2007 BMC Configuration: IPMI 1.5 (KCS: Keyboard Controller Style) ==== Processor Sockets ==================================== Version Location Tag -------------------------------- -------------------------- Dual-Core AMD Opteron(tm) Processor 2216 CPU 1 ....
SMBIOS, when use in conjunction with IPMI and Solaris KStats, can provide a lot of very fine grained data about your systems that can really make your monitoring applications shine. Play around and have fun.