Hardware, firmware and drivers

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?

Two examples
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

Physical NICs

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.550.1.15.1623387   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.550.1.15.1623387  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:


Figure 2

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.


Figure 3

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. 4Vmklinux 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


Fig. 7

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.

More information

Determining Network/Storage firmware and driver version in ESXi/ESX 4.x, ESXi 5.x, and ESXi 6.x (102D7206)

Identifying correct driver for ESXi/ESX host PCI devices (HBA) using VMware Hardware Compatibility Guide (HCL) (1031534)

Supported drivers’ firmware versions for I/O devices (2030818)

As always, I thank you for reading.

One Response to Hardware, firmware and drivers

  1. […] This post has been updated, new version is here […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: