Windows Server 2012 R2 VM Network Adapter

When creating a Windows Server 2012 virtual machine the network adapter type defaults to E1000. I have seen reports of this dropping network connections and packet loss on Windows Server 2012.

There is a newer emulated network interface available for Windows Server 2012, the E1000e. However, there is a VMware KB article detailing possible data corruption when using the E1000e network adapter type with Windows Server 2012, see http://kb.vmware.com/kb/2058692.

For best performances I would recommend using the latest VMware paravirtualised VMXNET3 network adapter type. If you are streaming the OS using something like SCCM instead of a VMwaere Template then you may have an issue using VMXNET3 as there is no driver available for it in PXE.  If this is the case then you may be able to edit the PXE boot image to include the VMXNET3 driver or you could have a VM with two network interfaces, an E1000 or E1000e used to PXE boot and then a VMXNET3 for when the OS and VMware Tools are installed, at this point the E1000(e) can be removed from the virtual machine.

This is a good article on the differences between emulated network adapters (E1000, E1000e) and VMware paravirtualised network adapters (VMXNET, VMXNET2 E and VMXNET3). http://rickardnobel.se/vmxnet3-vs-e1000e-and-e1000-part-1/

This articles show the throughput benefits of using VMXNET3 on Windows Server 2008 R2 and Windows Server 2012 R2. http://rickardnobel.se/vmxnet3-vs-e1000e-and-e1000-part-2/

I often see environments using a mixture of E1000 and Flexible with a few VMXNET3. Flexible was an option on a Windows Server 2003 virtual machine that worked as a vLance adapter (emulated 10 Mbps network interface) but if VMware Tools was installed it switched to the first generation VMware paravirtualised VMXNET network interface.  To get a list of network adapter types used in your environment use PowerCLI, connect to your vCenter

Connect-VIServer <vCenter-Server-Name>

e.g.

Connect-VIServer vcenter01

and then get all VMs and select the VM name and the network adapter type with the command

Get-VM | Select Name, {$_.NetworkAdapter.Type}

You can capture all of this information to a csv file by piping the output to Export-CSV like this

Get-VM | Select Name, {$_.NetworkAdapter.Type} | Export-CSV <filename>

e.g.

Get-VM | Select Name, {$_.NetworkAdapter.Type} | Export-CSV network-types.csv

This VMware Performance Study compares E1000 to VMXNET2 (Enhanced VMXNET) but it is old and based on ESX 3.5. http://www.vmware.com/files/pdf/perf_comparison_virtual_network_devices_wp.pdf

This VMware Performance Study compares VMXNET2 to VMXNET3, again it is fairly old now and based on vSphere 4. It does show how VMXNET3 has less CPU overhead than VMXNET2 in most cases. Generally VMXNET (any generation) has less CPU overhead than E1000e as it is designed for a virtual environment, this lower CPU overhead allows the driver to perform better and frees up CPU cycles for other workloads. https://www.vmware.com/pdf/vsp_4_vmxnet3_perf.pdf

This entry was posted in Configuration, VMware, vSphere, Windows 2012. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *