There is a lot of confusion about which NICs can be chosen for virtual machines (VMs) in VMware. I would like to give an overview for ESX 3.5.0 (with Update 4 & build-207095, but I suppose this also counts for other builds, especially for those in the “Update 4 range”).
When you create a VM you get the question which OS you will install. The choice you make heere has an influence on which kind of (virtual) devices can be used for the VM. The following list illustrates which NICs can be chosen and used, based on which Windows version you have selected.
* Windows 2000: Flexible
* Windows Server 2003 x86: Flexible – Enhanced vmxnet
* Windows Server 2003 x64: E1000 – Enhanced vmxnet
* Windows XP x86: Flexible – Enhanced vmxnet
* Windows XP x64: E1000 – Enhanced vmxnet
* Windows Vista: E1000
* Windows Server 2008 (including R2): E1000 – Enhanced vmxnet
* Windows 7: E1000
I think it’s quite clear that Enhanced vmxnet and especially E1000 are the most modern values to choose from. You do need a modern OS or a modern bit size architecture (x64) to be able to though.
Note i’m still talking about the ESX version specified in the beginning of this article. An even more modern NIC type, but only available from ESX 4 for VMs starting from Windows XP, is “VMXNET 3”.
These NIC names don’t always refer to actual NICs; sometimes they are just a name of a family of NICs. Here is a short description:
* E1000: this is actually the “Intel 82545EM Gigabit Ethernet NIC” NIC. This NIC can also appear under the alternative name “Intel PRO/1000 MT Network Connection”.
* Enhanced vmxnet: this is actually the “VMXNET 2” NIC, also known as “VMware PCI Ethernet Adapter”.
* Flexible: this is a collection of the NICs “Vlance” and “VMXNET”
* Vlance: this is the “AMD 79C970 PCnet32 LANCE NIC”. A Flexible NIC without VMware Tools installed is a Vlance NIC. Vlance is an older 10 Mbps NIC from AMD.
* VMXNET: a Flexible NIC with VMware Tools installed is a VMXNET NIC. It’s also known as “VMware Accelerated AMD PCNet Adapter” (if created under ESX 3) or “VMware PCI Ethernet Adapter” (but different from VMXNET 2) (if created before ESX 3).
* VMXNET 3: only available from ESX 4
The big question is where to get the drivers for those NICs. Well, let’s have a look:
* Vlance: this one is available in older Windows versions (before Windows Vista). It’s the kind of NIC you just need to start with, when VMware Tools hasn’t been installed yet, or when you want a very “driver-clean” VM (for example, for creating images which should run on different kinds of hardware and you want those images to be as driver-clean as possible).
* E1000: this one is also available in Windows. If you really want, you can also download it from Intel’s web site. For x64 you need the file PROWinx64.exe (not PROWin64.exe). You can extract this file by using the /e (extract, but don’t install) and /f (mention the target location) switches. For example: “PROWinx64.exe /e /f C:\Temp\Test_folder”.
* VMXNET: you need to install VMware Tools for this driver. Or you need to get it out of VMware Tools and use only this driver seperately.
* VMXNET 2: you need to install VMware Tools for this driver. Or you need to get it out of VMware Tools and use only this driver seperately.
* VMXNET 3: I have no experience with this NIC/driver, so I keep my mouth shut about this one 🙂
Note that VMXNET and VMXNET 2 (VMXNET 3 too?) are contained in the same driver package. So if you have the necessary files for one of them, you automatically have them for the other one. The driver file itself (vmxnet.sys) is really common. For both NICs a different INF file (.inf) and catalog file (.cat) exist in the package:
* VMXNET: “vmware-nic.inf” and “vmware-nic.cat”
* VMXNET 2: “vmxnet.inf” and “vmxnet.cat”
From the first list in this article you can see VMXNET only exists in x86 form and VMXNET 2 in x86 as well as x64 form. The driver package exists in 2 forms too: one for x86 machines and one for x64 machines. The first one contains the 5 files just mentioned, but the second one logically doesn’t contain vmware-nic.inf or vmware-nic.cat.
AFAIK the last versions for all of these drivers are (I’m speaking 31st of March 2010):
* Vlance: 18.104.22.168 (x86) – in Windows (pre-Vista)
* VMXNET: 22.214.171.124 (x86)
* VMXNET 2: 126.96.36.199 (x86 & x64)
* E1000: 188.8.131.52 (x86 & x64) – in Windows and as a download
I don’t have that much to say right now about storage controllers and drivers, except for the following. VMs can be provided with 2 SCSI controllers:
* LSI Logic
LSI Logic is actually the “LSI Logic PCI-X Ultra320 SCSI Host Adapter” or “LSI20320-R”. A driver for this controller is available in Windows, but it’s an old one… A much newer version can be downloaded (latest version is 1.28.03), through a package containing the actual drivers for x86, x64 and IA-64. When I use it though I get a Blue Screen of Death (BSOD), which is very bad… VMware KB 1006224 (http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1006224) handles this issue and it seems this phenomenon occurs starting from driver version 1.26.05. You need at least ESX 3.5.0 Update 3, but hey, this is the case for me! Oh, you also need to set a certain option in the VM’s configuration file (.vmx file):
lsilogic.iobar256 = “TRUE”
Version 1.28.03 (and perhaps every version experiencing this issue?) will not be chosen or installed automatically, because it’s not digitally signed. The only way to install it is by manually forcing it (for example, in Windows’s Device Manager you could update the driver by explicitly loading it and not letting Windows search for one). Every kind of OS deployment based on automatic driver installation will not install this driver version, except when you add it manually afterwards or explicitly script this action.
Interesting to know is that older versions of LSI Logic are based on SCSIport, while newer versions are based on the more modern Storport. If you want to know more about storage driver models, please head to the Windows Driver Kit (WDK), which contains very useful information about this topic.
One small note when you edit a vmx file:
* backup the vmx file first
* remove the VM from the inventory (only this, not a total remove!)
* edit the vmx file and save it
* register the VM again (vmware-cmd -s register /vmfs/volumes///.vmx
* if everything’s fine, you could archive or remove the backup (depending on your procedures)