A very commonly sought after option for ESX and ESXi is the ability to pass through a locally attached USB device into a VM. While the release of ESX/ESXi 4.0 did provide the ability to add a USB controller to a VM, it is not possible to add a locally attached USB device to a VM. The typical solution is to use a USB over IP device to connect the USB device to a VM. With ESXi 4.0 it is also now possible to use VMDirectPath to pass through the USB controller (and thus any connected USB devices) into a VM.
Note: ESXi 4.1 now supports pass-through of USB devices.
VMDirectPath does have a number of requirements
– the host chipset must support the option. Intel chipsets that support Intel Directed I/O include Intel Xeon 5500 systems, Intel Xeon 5400 systems and motherboards that are vPro certified. On the AMD side, the server should support AMD I/O Virtualization Technology (AMD IOMMU).
– Intel Directed I/O or AMD IOMMU should be enabled in the BIOS of the host
– a PCI device can only be allocated to a single VM at a time. Thus you can’t share a USB controller with multiple VMs at the same time
– a VM can only have two PCI devices assigned to it
Once you have enabled Intel Directed I/O or AMD IOMMU in the BIOS of the host, you’ll want to start your ESXi host and connect to it with the vSphere client. Select the Hardware \ Advanced Settings screen on the Configuration tab. After a default install, no devices will be enabled for passthrough. Click on the “Configure Passthrough” link to add your USB controller to the list of enabled devices.
For this article, I was using an Asus P5E-VM DO motherboard and a ByteCC PCI-E USB controller (part # BT-PEU2410). The device was listed in the list of available devices and I enabled the 02:00.0 device. As shown in the below image, dependent devices were also checked for passthrough. After this step was taken, the host was rebooted. If VMDirectPath is working properly on the host, the devices should be shown in the Hardware \ Advanced Settings screen with a green circle as shown in the second image below.
Once the device is enabled for passthrough, you will want to add the USB controller to a VM. While the VM is powered down, right click on it in the vSphere client and select Edit Settings. Click on Add Hardware and then select PCI Device. On the next screen of the wizard you’ll be able to select the USB controller as shown in the 2nd image. Once you have completed the wizard, you’ll want to power on the VM.
If everything is working properly, once you have booted up your VM the USB controller and any attached USB devices should be accessible to the VM. Depending on the USB controller that you use, you may need to add drivers to enable the VM to use the controller. The ESXi host will not require any drivers for the USB controller as the VM will access the PCI device directly.