Because the subject is still actual, I created an updated version of this post from 2015.
A modern server is besides our favorite ESXi hypervisor loaded with all kinds of additional software, like the BIOS, firmware and drivers for items like; Baseboard management , Remote support interfaces, Storage controllers, NICs, Power Supplies, to name a few.
Some vendors provide ISO images or repositories containing the actual updates, you may run the update process and voila, ready and done.
If you want to stay in control and want some more insight in this subject, please read on.
It comes down to these four questions:
- What hardware is in the server?
- How to determine the current firmware and or driver?
- Which driver and or firmware do I need?
- How do I upgrade drivers and firmware?
What hardware is in the server?
Physical Storage Controller.
The command to list all available storage controllers is: esxcfg-scsidevs -a
/tmp # esxcfg-scsidevs -a vmhba38 iscsi_vmk online iscsi.vmhba38 iSCSI Software Adapter vmhba0 ahci link-n/a sata.vmhba0 (0:0:31.2) Intel Corporation Ibex Peak 6 port SATA AHCI Controller vmhba32 usb-storage link-n/a usb.vmhba32 () USB /tmp #
We focus on vmhba0, it’s an onboard SATA AHCI controller. The second column provides information which driver this SATA controller uses, in this example an ‘ahci’ type driver.
As many IO devices like storage controllers and NICs are PCI devices, each PCI device can be identified by an unique code consisting of four 16-bit ID’s; the Device ID (DID), the Vendor ID (VID), the Subsystem ID (SSID) and the Subsystem Vendor ID (SVID). To determine these ID’s use the following command: vmkchdev –l or vmkchdev –l | grep vmhba0 to search for a specific device
~ # vmkchdev -l | grep vmhba0 0000:00:1f.2 8086:3b22 103c:3118 vmkernel vmhba0 ~ #
In this example vmhba0 can be identified as:
VID : 8086
DID : 3b22
SVID : 103c
SSID : 3118
The command to list all available NICs is: esxcli network nic list
~ # esxcli network nic list Name PCI Device Driver Link Speed Duplex MAC Address MTU Description ------ ------------- ------ ---- ----- ------ ----------------- ---- ------------------------------------------------------- vmnic0 0000:010:00.0 e1000e Up 1000 Full 00:1b:21:82:9f:d4 1500 Intel Corporation 82574L Gigabit Network Connection vmnic1 0000:01e:00.0 tg3 Up 1000 Full 1c:c1:de:0f:9a:eb 1500 Broadcom Corporation NetXtreme BCM5723 Gigabit Ethernet vmnic2 0000:020:00.0 e1000e Up 1000 Full 68:05:ca:19:a0:d5 1500 Intel Corporation 82574L Gigabit Network Connection ~ #
To determine driver and firmware of a particular NIC, e.g. vmnic0:
~ # esxcli network nic get -n vmnic0 Advertised Auto Negotiation: true Advertised Link Modes: 10baseT/Half, 10baseT/Full, 100baseT/Half, 100baseT/Full, 1000baseT/Full Auto Negotiation: true Cable Type: Twisted Pair Current Message Level: 1 Driver Info: Bus Info: 0000:10:00.0 Driver: e1000e Firmware Version: 1.8-0 Version: 1.1.2-NAPI Link Detected: true Link Status: Up Name: vmnic0 PHYAddress: 1 Pause Autonegotiate: true Pause RX: false Pause TX: false Supported Ports: TP Supports Auto Negotiation: true Supports Pause: true Supports Wakeon: true Transceiver: internal Wakeon: MagicPacket(tm) ~ #
Now we can see, the driver is an “e1000e”, version 1.1.2 and the firmware is a version 1.8-0.
Using the command vmkchdev, we can determine the unique PCI device ID’s.
~ # vmkchdev -l | grep vmnic0 0000:10:00.0 8086:10d3 8086:a01f vmkernel vmnic0
For this NIC vmnic0:
VID : 8086
DID : 10d3
SVID : 8086
SSID : a01f
How to determine the current firmware and or driver
In the previous section, we already found some information regarding the SATA controller and the driver (ahci).
To find the actual driver, use the command: esxcli software vib list | grep ahci
~ # esxcli software vib list | grep ahci sata-ahci 3.0-18vmw.5220.127.116.113387 VMware VMwareCertified 2014-04-29 ~ #
To find the actual driver for vmnic0, (driver ‘e1000e’) use the following:
~ # esxcli software vib list | grep e1000e net-e1000e 1.1.2-4vmw.518.104.22.1683387 VMware VMwareCertified 2014-04-29 ~ #
We can see the driver is indeed a version 1.1.2.
Which driver and/or firmware do I need?
To find out about supported drivers, switch to the VMware Compatibility Guide and select IO Devices: http://www.vmware.com/resources/compatibility/search.php?deviceCategory=io
Figure 1 – Compatibility Guide
In right hand side, enter the VID, DID, SVID and SSID values, for instance for vmnic0. After providing the information, switch to the lower side of the screen to watch the results. In this case:
While hovering the mouse cursor over the Model, the PCI device ID’s show up. This device is supported in many releases. Select the link to get detailed information.
Now you need to verify your current release, while on the CLI, use the command: vmware –v
~ # vmware -v VMware ESXi 6.5.0 build-8294253 ~
And use KB “Build numbers and versions of VMware ESXi/ESX (2143832)” to determine the correct release. Build 8294253 matches ESXi 6.5 U2 GA.
As you can see in Figure 3, two drivers are suitable, but wait there is a difference under the “Type” section; one shows “VMware inbox, native”, the other one “VMware Inbox, vmklinux”.
More about Drivers
Drivers can be classified by Vendor and build type. Vendor classification, two options:
Partner Async drivers, these are third party vendor drivers build and supported by the respective vendors.
VMware Inbox drivers, these are drivers coded and supported by VMware.
On a ESXi host, run the command:
# esxcli software vib list
The Vendor section provides the information.
But that is not all, both Partner Async and VMware Inbox drivers can be built as “vmklinux” or “native” drivers. Vmklinux drivers are legacy. In the early days, VMware decided to use Linux derived drivers to provide the widest variety of support for storage, network and other hardware devices for ESX. Since ESX and specifically the VMkernel is NOT Linux, to accomplish this VMware built a translation layer module called vmklinux which sits in between the VMkernel and drivers. This vmklinux module is what enables ESX to function with the linux derived drivers and provides an API which can speak directly to the VMkernel.
Fig. 4 – Vmklinux Driver (Image provided by VMware)
Later, VMware developed a new Native Device Driver model interface that allows a driver to speak directly to the VMkernel and removing the need for the “legacy” vmklinux interface. The latest version of ESXi contains many new native drivers that replace the earlier vmklinux drivers. Most of the new native drivers are enabled by default after installation or upgrade.
Fig. 5 – Native Driver (Image provided by VMware)
Native drivers have advantages over the vmklinux drivers, like:
- More efficient and flexible device driver model compared to vmklinux
- Standardized information for debugging/troubleshooting
- Improved performance as we no longer have a translation layer
- Support for new capabilities such as PCIe hot-plug
- Native drivers are part of the requirements for running ESXi 6.7 Quick Boot. See this KB for more information.
Both type of drivers can live together, figure 6 shows how this works.
Fig. 6 – Driver Model (Image provided by VMware)
As we have seen, native and vmklinux drivers for the same device can be installed on the same host. To determine which driver is actually loaded and in use, see VMware KB “Determining which storage or network driver is actively being used on ESXi host (1034674)”.
As native drivers do have many advantages, at this time, some native drivers do not support all functions corresponding vmklinux drivers do. To enable or disable native drivers, see VMware KB “Enabling and Disabling Native Drivers in ESXi 6.5 (2147565)”.
Also have a closer look at VMware KB 20130818 “Supported drivers’ firmware versions for I/O devices”. This KB provides information about support for IO devices related to drivers and corresponding firmware. In general VMware recommends using the latest firmware listed in the Compatibility guide with the accompanying (native) driver.
You will also need to check information provided by the respective vendors. The KB provides link to the vendor documentation.
E.g. In KB 2030818, open the link to HPE, you will be directed to HPE’s Software recipes for VMware. A VMware Software Recipe provides detailed information
To start with, open the latest bulletin HPE-Vmware-Recipe.pdf. The documentation is mainly based on HPE ServicePacks for Proliant.
How do I upgrade drivers and firmware
The method of upgrading drivers and firmware depends on the Vendor and your support contract. For instance with HPE, if the hardware is eligible for support, you can download the latest HPE Service Pack for ProLiant, this is an easy way to update firmware and drivers to the latest recommended versions. If you do not have support, you can search and download drivers and perform a manual installation.
Also VMware KB Installing async drivers on VMware ESXi 5.x and ESXi 6.0.x (2005205) provides a lot of useful information regarding the installation of async drivers in various scenario’s.
Fling ESXi Compatibility Checker
The “What hardware do we have?”question is also important when you consider to upgrade your estate. The ESXi Compatibility Checker might be useful.
As always, I thank you for reading.