Virtual Reality Passthrough VIVE & Oculus, 4 Gamers 1 CPU with NVIDA Cards (WIP)


Recommended Posts

Update: 2016/08/12 - I apologize for the delay on updates.  I had issues with my computer overheating. I've ordered my water cooling parts and will be resuming this in September when the parts come in.

 

System Specs

CPU: Intel Xeon E5-1650 V3 3.5GHz 6-Core Processor

Cooling: Cooler Master Hyper 212 EVO 82.9 CFM Sleeve Bearing CPU Cooler

Motherboard: ASRock X99WS-E EATX LGA2011-3 Motherboard

Memory: Kingston ValueRam 64GB (1 x 16GB) Registered DDR-2133 Memory

Unraid Cache SSDs: 2 x Samsung 850 EVO-Series 500GB 2.5" Solid State Drive

Unraid HDDs: 2 x Segate Barracuda 3TB 3.5" 7200RPM Internal Hard Drive

GPU: 4 x MSI GeForce GTX 980 TI 6GB Video Card

Case: Cooler Master Cosmos II (Black) ATX Full Tower Case

Power: EVGA SuperNOVA T2 1600W 80+ Titanium Certified Fully-Modular ATX Power Supply

 

Bios Configuration

Bios Version: 1.80 (I had issues with the 3.20 for newer CPU support and haven't gone back to retest)

Bios Settings

"Advanced" "CPU Configuration" "Intel Virtulization Technology": Enabled

"Advanced" "Chipset Configuration" "VT-d": Enabled

"Advanced" "Chipset Configuration" "Above 4G Decoding": Enabled  (Without this, I couldn't use one of my cards)

"Advanced" "Chipset Configuration" Bios Setting "Above 4G Decoding Patch": Enabled (This allows the card that I couldn't passthough to passthough)

"Boot": Change options so only Unraid 6 boots.

Optional Performance Tweaks

"Advanced" "Chipset Configuration" "SR-IOV Support": Enabled

"OC Tweaker" "Muli Core Enhancement": Enabled

IMPORTANT: Save your settings to a profile. After reboot, the only way I could get back to bios is if I clear CMOS. The "Above 4G Decoding" settings for me caused this.  I sometimes get keyboard/mouse not detected 5 beep warning from the montherboard. I can ignore this because they will be detected by the OS. After a clearning of the CMOS, I boot to bios, apply the saved settings and make any changes I have.

 

 

Unraid6  Configuration

"Settings" "VM Manager" "Libvirt Version": 1.2.18

"Settings" "VM Manager" "GEMU Version": 2.3.0

"Settings" "VM Manager" "Enable VMs": Yes

"Settings" "VM Manager" "ISO Library Share": /mnt/user/ISOs/ (Created in guide)

"Settings" "VM Manager" "VirtIO Windows Drivers ISO": /mnt/user/ISOs/virtio-win-0.1.117.iso (Created in guide)

"Settings" "VM Manager" "Enable VMs": Yes

"Settings" "VM Manager" "PCIe ACS Override": No (Default is 'No')

 

VM GPU Passthrough Configuration

"VMs" "Add VM"

Name: Win10_VR1

Template Settings: Advanced View (On gray bar on the right side)

Operating System: "Windows 8.1 / 2012"  (This only effects the Icon displayed)

CPU Mode: Host Passthrough

CPUs: 2-3 per VM (Your Choice)

Internal Memory: 13824 MB (Your Choice)

Machine: i440fx-2.3  (Q35-2.3 was recommended for GPU passthrough, butI couldn't get it to work)

BIOS: OVMF (Very Important)

Hyper-V: No

OS Install ISO: /mnt/user/ISOs/Windows10.iso  (Created in guide)

VirtIO Drivers ISO:  /mnt/user/ISOs/virtio-win-0.1.117.iso (Created in guide)

Primary vDisk Location: /mnt/user/vdisks/ (Created in guide)

Primary VDisk Size: 40G (Your choice)

Primary vDiskType: raw

(With 4 cards, NVIDIA Device will be listed multiple times.  You need to make sure the same one on the drop down is selected for both.)

-- My Motherboard Mapping to these drop downs --

PCIE7: 2nd NVIDIA Device on the list (Top card) (This requires a modification to the XML to work, see guide)

PCIE5: 1st NVIDIA Device on the list

PCIE3: 4th NVIDIA Device on the list

PCIE1: 3rd NVIDIA Device on the list

Graphics Card: NVIDIA Device

Sound Card: NVIDIA Device

Network Bridge: br0 (To allow computers on this network to connect to the VM directly)

USB Devices: A mouse and keyboard. Do not select anything releated to the VIVE. That needs to be assigned to the VM while it is running later.

 

---- Questions and Answers -----

Q: When I attempt to pass though my VIVE, it wont work.

A: If you use the web page for VM configuration, it won't allow you to pass though usb devices that don't have names. The VIVE has 2 of these no named usb devices.  It won't work because only half the components are passed. This guide will cover a work around to map the VIVE to a running VM. Alternatively you can buy a PCIe USB controller and pass that fully though to the VM.

 

Q: Can I pass though my VIVE to a running VM?

A: Yes, I will cover that process in this guide.

 

Q: Have you thought about passing through an entire pcie controller?

A: Yes, but I don't have open slots to add a new pcie usb 3 card, so I'm using the mother USB controllers instead. On my motherboard it isn't an option because of shared IOMMU groups.  I would rather have a solution that works without needing to give over the full controller so I can make use of all my USB slots and put each to the VMs I want.

 

Q: Why don't you have any open PCIe slots to install a USB controller card?

A: I'm using 4 air cooled GPus. They hang over all my free PCIe slots.

 

 

---- Future Sections -----

VIVE Unraid 6 Hot Swap Setup

This section documents how to make the VIVE semi hot swapable.

- Setup usb mapping script to map VIVE to any running VM from the running VM

-- Unraid Script

-- Determine VIVE USB IDs.

-- Windows script to connect to unraid via ssh and map VIVE to itself.

 

 

Windows 10 Steam VM (Headless) with sound for Steam Link play.

Oculus Rift Setup

 

----- WIP below ---

 

Topics in this post:

- Assigning USB Devices to a running VM

    - Vive Example

    - Oclus Example

- Single Card Passthough

- Setup and configuration guide for my 4 Gamers 1 CPU build.

 

 

This article is a work in progress. I own 4 MSI GTX 980 TIs, a Vive , and an Oculus. My goal is to run 2 VMs each with their own virtual reality head set so multiple players can be playing at once during the game nights I host. This is a 4 Gamers 1 CPU build running on Xeon.

 

I'm a Software Engineer and am writing bash scripts to simplify the Vive passthough process. I've been successful in having a close to hot plugable experience with the VIVE. I will be posting my scripts in the final article.

 

Vive Challenges:

- It isn't possible to do Vive passthough via the advanced menu of Unraid 6.1.9

- My Vive used the same vendor id and product id for two of its components.

- Some of the required USB names using 'lsusb' are blank. This prevents them from showing up in the Advanced view of VM Configuration.

- Unpluging and plugging back in the Vive changes the address bus and device mapping.

 

Hot plugable Vive Solution:

    I've written a bash script that finds the Vive components and dynamically assigns them to a running VM. This allows me to unplug the vive and plug it back in without having to restart and reconfigure my VM. I've been able to test this with one Vive head set.

 

Due to Vive using the same vendor id and product id, I had to specify the address bus and device number found from 'lsusb' each time i turn on my VM. This solution didn't work for me because the numbers kept changing and i needed to unplug and plug back in the vive when attempting to get it to be recognized.  I ended up not specifying any of the vive components on the XML config for the vm and instead wrote up a script that generated these xml configuration blocks and pass them though to the running vm using 'virsh attach-device $vmName $usbMappingXml' where vmName was the name of the vm and usbMappingXml is the usb mapping as shown below for one component.

    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x0bb4'/>
        <product id='0x2c87'/>
<address bus='2' device='7'/>
      </source>
    </hostdev>

 

 

USB Passthough of multiple devices sharing the same vendor id and product id with the Vive as an example. I would like to to have a Web GUI for this at some point.

 

#!/bin/bash

# This function maps usb devices to a running VM
# If the device is already mappend to a running vm, the assigment will have no effect.
# Created by [email protected]/forum
# Creation Date: 2016/06/01
# Version: 1.0
#1 - Temp folder to create the usb configuration xmls in. The folder will be removed if it already exists
#2 - Space delimindated list of USB Ids. It is using grep, so partial matches are allowed
#3 - VM name 
function mapusb {
tempFolder=$1
matchIDs=$2
vmName=$3

#Safty check because I'm going to to do a rm -r on the temp folder
if [ "$tempFolder" == "" ]
then
	echo error
	return
fi
if [ -d "$tempFolder" ]
then
	rm -r $tempFolder
fi

mkdir $tempFolder


#Find usb devices that match
for m in $(echo $matchIDs)
do
	IFS_bk=$IFS
	IFS=$'\n'
	#Grab Bus ID from 
	for v in $(lsusb | grep $m | gawk '{print $6" "$2" "$4}' | sed 's=:= =g' | sed 's= $==g')
	do
		tempFile=$(mktemp)
		newFile=$1/$(echo $tempFile | sed 's=.*tmp.==g')'.xml'
		mv $tempFile $newFile
		echo Creating file $newFile

		echo v=$v
		vender=$(echo $v | gawk '{print $1}')
		product=$(echo $v | gawk '{print $2}')
		id=$(echo $v | gawk '{print $3}' | sed -r 's=^0*==g')
		bus=$(echo $v | gawk '{print $4}' | sed -r 's=^0*==g')
		echo vender=$vender product=$product id-$id bus=$bus

		echo '<hostdev mode='\'subsystem\'' type='\'usb\'' managed='\'yes\''>' >> $newFile
		echo '  <source>' >> $newFile
		echo '      <vendor id='\'0x$vender\''/>' >> $newFile
		echo '      <product id='\'0x$product\''/>' >> $newFile
		echo '      <address bus='\'$id\'' device='\'$bus\''/>' >> $newFile
		echo '  </source>' >> $newFile
		echo '</hostdev>' >> $newFile
	done
	IFS=$IFS_bk
done

for f in $(ls $1 -l | gawk '{print $9}')
do
	xml=$PWD/$1/$f
	#echo $PWD/viveTempFolder/$f
	virsh attach-device $vmName $xml
done
}

mapusb viveTempFolder '0bb4 0d8c 0424 28de' '1 GPU Middle WIN 10'

 

 

----- If you would like to help -----

 

  • I've really dived into the concept of dynamic reconfiguration of usb mapped devices with running VMs.  If anyone has plugin coding experience and would like to design a front end for configuring what devices should go to what VM, I'll write up the back end scripts that will dynamically assign and unassign the usb devices from running VMs.
  • I need some additional 'lsusb' lists of IDs for vive components and Oculus components to verify that the usb IDs are consistent. If they are different, I will have to design my script around them being different for everyone.
  • General feedback if you like the concept or not. Knowing other users are interested is a good motivator.

 

----- Old Updates -----

Update: 2016/06/14 - I've put the write up on hold due to computer lockups when playing Star Citizen for under 5min. I'm troubleshooting with my windows install to eliminate unraid as being the issue.

Update: 2016/06/11 - Everything works. I'm working on the guide now

Update: 2016/06/05 - Added USB mapping details

Link to comment

Migrating replies from my topic in wrong location.

 

  • General feedback if you like the concept or not. Knowing other users are interested is a good motivator.

This sounds like exactly what is needed to help polish the USB handling of unraid's KVM management. So as not to duplicate work, I strongly suggest that you email limetech at their support address and point them to this post. I suspect they would be very supportive and possibly offer some suggestions so you don't reinvent the wheel if they already have some of this worked out for an upcoming release.

 

  • General feedback if you like the concept or not. Knowing other users are interested is a good motivator.

This sounds like exactly what is needed to help polish the USB handling of unraid's KVM management. So as not to duplicate work, I strongly suggest that you email limetech at their support address and point them to this post. I suspect they would be very supportive and possibly offer some suggestions so you don't reinvent the wheel if they already have some of this worked out for an upcoming release.

 

Have you thought about passing through an entire pcie controller?

 

Not sure how many pcie slots you have available but I'm passing through an entire usb3 pcie card to a Windows vm. No need to worry about device ids and such and everything is plug and play within the vm

 

With 4 GPUS, i didn't have any room to add in an additional usb 3 pcie card.  For that reason, i ended up having to manage all my USB devices under my existing motherboard usb 2 and usb 3 controllers. The script to migrate usb devices to a running VM simplified the work enough that I didn't bother me to much. On the positive side, this topic will help users with all their pcie slots full.

Link to comment
  • 2 weeks later...

I'm curious if passing through an entire usb controller would have solved your issues  with usb passthrough and the vive? Either passing through a controller on the motherboard, or a $20-$30 pcie usb hub that can be passed straight through to the vm. Then you get the benefit of hotplug working.

Link to comment

I'm loving your concept! Passing thru a PCI-USB card to each of the 2 VMs might be the adequate solution. I suspect that you'll need PCI risers given your MoBo layout and how the GPUs are blocking the PCI slots (and most likely a chassis modification).

 

Some questions out of pure curiosity: how is your core assignment for 4 VMs with 6 cores? 1 core each, leaving 2 free? Does 1 single core suffice your gaming needs when all the VMs are in use?

Link to comment

We've purchased an HTC Vive here at Lime Technology and have been testing with it extensively.  So far, it's working fantastic!  USB controller pass through is going to be a requirement most likely (still no success with simple assignment), but when you do that, it works very very well!

Link to comment

We've purchased an HTC Vive here at Lime Technology and have been testing with it extensively.  So far, it's working fantastic!  USB controller pass through is going to be a requirement most likely (still no success with simple assignment), but when you do that, it works very very well!

Did you read this?

Hot plugable Vive Solution:

    I've written a bash script that finds the Vive components and dynamically assigns them to a running VM. This allows me to unplug the vive and plug it back in without having to restart and reconfigure my VM. I've been able to test this with one Vive head set.

Link to comment

We've purchased an HTC Vive here at Lime Technology and have been testing with it extensively.  So far, it's working fantastic!  USB controller pass through is going to be a requirement most likely (still no success with simple assignment), but when you do that, it works very very well!

 

It is possible to run the vive though the VM without a dedicated usb controller. I'm running 4 GPUs without water block modifications. All 7 of my PCIe slots are used / covered. Unless I use a riser PCIe adapter, i won't be able to install a PCIe USB card.

 

With that said, PCIe usb card passthough would defiantly work for the VIVE, but I wouldn't call it a requirement. I prefer being able to hot swap the VIVE between the running VMs.  I will be doing a better write up on this for the guide.  I made the script generic and posted it to show the concept of I'm doing.

Link to comment

I'm loving your concept! Passing thru a PCI-USB card to each of the 2 VMs might be the adequate solution. I suspect that you'll need PCI risers given your MoBo layout and how the GPUs are blocking the PCI slots (and most likely a chassis modification).

 

Some questions out of pure curiosity: how is your core assignment for 4 VMs with 6 cores? 1 core each, leaving 2 free? Does 1 single core suffice your gaming needs when all the VMs are in use?

PCI-USB

I agree it is possible, but I have several reason why I don't want to do that, including how it would look.

 

how is your core assignment for 4 VMs with 6 cores?

6 cores is 12 Virtual cores to assign due to hyper threading. I'm giving each VM 2-3 virtual cores.

Unless the games are designed for multi threading, 2 cores are usually enough for games.

 

I won't be doing multi tasking on the VMs. Each VM will be running only its game. I don't even have Virus scanners on them. (I redo the image every 30 days to keep them clean and I don't browse the internet).

 

Does 1 single core suffice your gaming needs when all the VMs are in use?

Each VM will have at least 2 virtual cores out of my 12 virtual cores.

Link to comment

We've purchased an HTC Vive here at Lime Technology and have been testing with it extensively.  So far, it's working fantastic!  USB controller pass through is going to be a requirement most likely (still no success with simple assignment), but when you do that, it works very very well!

 

It is possible to run the vive though the VM without a dedicated usb controller. I'm running 4 GPUs without water block modifications. All 7 of my PCIe slots are used / covered. Unless I use a riser PCIe adapter, i won't be able to install a PCIe USB card.

 

With that said, PCIe usb card passthough would defiantly work for the VIVE, but I wouldn't call it a requirement. I prefer being able to hot swap the VIVE between the running VMs.  I will be doing a better write up on this for the guide.  I made the script generic and posted it to show the concept of I'm doing.

 

Interesting!!  Looking forward to the guide!

Link to comment
  • 4 weeks later...

Hi dude...do unraid see your manufacturer name on the graphic cards? Mine are g1 gigabyte 980ti and the unraid see them like this :

 

"01:00.0 VGA compatible controller: NVIDIA Corporation Device 17c8 (rev a1)

01:00.1 Audio device: NVIDIA Corporation Device 0fb0 (rev a1)

02:00.0 VGA compatible controller: NVIDIA Corporation Device 17c8 (rev a1)

02:00.1 Audio device: NVIDIA Corporation Device 0fb0 (rev a1)"

 

And i have a problem like the vm who is using the 1st slot graphic card have like 1 fps in game. But this is only somethimes...i really don't know where is the issue.

Link to comment
  • 4 weeks later...

Hi dude...do unraid see your manufacturer name on the graphic cards? Mine are g1 gigabyte 980ti and the unraid see them like this :

 

"01:00.0 VGA compatible controller: NVIDIA Corporation Device 17c8 (rev a1)

01:00.1 Audio device: NVIDIA Corporation Device 0fb0 (rev a1)

02:00.0 VGA compatible controller: NVIDIA Corporation Device 17c8 (rev a1)

02:00.1 Audio device: NVIDIA Corporation Device 0fb0 (rev a1)"

 

And i have a problem like the vm who is using the 1st slot graphic card have like 1 fps in game. But this is only somethimes...i really don't know where is the issue.

 

First slot pass though sometimes requires telling the video card to load a specified rom that you copied from the card before using a different slot. The video passthough is very touchy. I'm not an expert on the subject as this is my first go.

 

Unraid reports my cards as follows and I have to pass both for the vm to see it.

09:00.0 VGA compatible controller: NVIDIA Corporation Device 17c8 (rev a1)

09:00.1 Audio device: NVIDIA Corporation Device 0fb0 (rev a1)

 

_____

For anyone watching this thread. I had overheating issues and am switching to water cooling. The parts come in September, so I'll resume the build then.

Link to comment

I'm loving your concept! Passing thru a PCI-USB card to each of the 2 VMs might be the adequate solution. I suspect that you'll need PCI risers given your MoBo layout and how the GPUs are blocking the PCI slots (and most likely a chassis modification).

 

Some questions out of pure curiosity: how is your core assignment for 4 VMs with 6 cores? 1 core each, leaving 2 free? Does 1 single core suffice your gaming needs when all the VMs are in use?

PCI-USB

I agree it is possible, but I have several reason why I don't want to do that, including how it would look.

 

how is your core assignment for 4 VMs with 6 cores?

6 cores is 12 Virtual cores to assign due to hyper threading. I'm giving each VM 2-3 virtual cores.

Unless the games are designed for multi threading, 2 cores are usually enough for games.

 

I won't be doing multi tasking on the VMs. Each VM will be running only its game. I don't even have Virus scanners on them. (I redo the image every 30 days to keep them clean and I don't browse the internet).

 

Does 1 single core suffice your gaming needs when all the VMs are in use?

Each VM will have at least 2 virtual cores out of my 12 virtual cores.

 

Um you may have 12 virtual cores but they are still only 6 cores with 2 hyperthreads. I cant see that 1 real core per vm would be enough to run properly.

Using 3 virtual cores or 1 core and 1 hyperthread will just split a core between a vm and cause bad latency problems. Is there any reason you need to run 4 gaming vms at once?

Link to comment
  • 3 months later...

Are you still working on this? I cannot get my Vive to work for the life of me. Continuously dropping the connection to the Base Stations and the controllers not connecting.

 

Try a different USB port for the link box, maybe a usb 2.0 port. Also, I wasn't able to get it working without passing a usb controller to my VM.

Link to comment

Are you still working on this? I cannot get my Vive to work for the life of me. Continuously dropping the connection to the Base Stations and the controllers not connecting.

 

Try a different USB port dor the link box, maybe a 2.0. Also, I wasn't able to get it working without passing a usb controller to my VM.

 

I stubbed a PCIE 3.1 USB Controller and was able to get it to see the Windows 10VM to see all of the USB devices for the Vive. Only problem was that the base stations and remotes continuously disconnected.

 

Weirdest thing is that when I first tried Q35-2.3 it worked for a few minutes. I think once certain drivers got installed it went bonkers. I have deleted every single USB driver not in use (and the renasas controller) that would pop up. Every USB hub, device, all separate to try and isolate the issue. Switched to USB 2.0 and 3.0 in the dropdown as well.

 

 

I am now trying to put in the individual

<address bus='3' device='12'/>

to the duplicated devices that are being passed via USB 2.0 on the motherboard.

Link to comment

Here are my settings.

syslinux.cfg

default /syslinux/menu.c32
menu title Lime Technology, Inc.
prompt 0
timeout 50
label unRAID OS GUI Mode
  menu default
  kernel /bzimage
  append pci-stub.ids=1106:3483,8086:8d26,8086:8d2d,1b21:1242 initrd=/bzroot,/bzroot-gui
label unRAID OS
  kernel /bzimage
  append initrd=/bzroot
label unRAID OS GUI Mode (Safe)
  kernel /bzimage
  append initrd=/bzroot,/bzroot-gui
label unRAID OS Safe Mode (no plugins, no GUI)
  kernel /bzimage
  append initrd=/bzroot unraidsafemode
label Memtest86+
  kernel /memtest

 

Windows 10 VM XML

<domain type='kvm'>
  <name>Steam-WIN10</name>
  <uuid>26875e39-d4c5-4cde-61dd-89f9975c2b47</uuid>
  <description>Steam In-Home Streaming</description>
  <metadata>
    <vmtemplate xmlns="unraid" name="Windows 10" icon="steamos.png" os="windows10"/>
  </metadata>
  <memory unit='KiB'>16777216</memory>
  <currentMemory unit='KiB'>16777216</currentMemory>
  <memoryBacking>
    <nosharepages/>
  </memoryBacking>
  <vcpu placement='static'>8</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='6'/>
    <vcpupin vcpu='1' cpuset='7'/>
    <vcpupin vcpu='2' cpuset='8'/>
    <vcpupin vcpu='3' cpuset='9'/>
    <vcpupin vcpu='4' cpuset='16'/>
    <vcpupin vcpu='5' cpuset='17'/>
    <vcpupin vcpu='6' cpuset='18'/>
    <vcpupin vcpu='7' cpuset='19'/>
  </cputune>
  <os>
    <type arch='x86_64' machine='pc-q35-2.4'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/etc/libvirt/qemu/nvram/26875e39-d4c5-4cde-61dd-89f9975c2b47_VARS-pure-efi.fd</nvram>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough'>
    <topology sockets='1' cores='4' threads='2'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/local/sbin/qemu</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='writeback'/>
      <source file='/mnt/disks/Samsung_SSD_950_PRO_512GB_S2GMNX0H804473L/vdisk1.img'/>
      <target dev='hdc' bus='virtio'/>
      <boot order='1'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/isos/Win10_1607_English_x64.iso'/>
      <target dev='hda' bus='sata'/>
      <readonly/>
      <boot order='2'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/isos/virtio-win-0.1.117-1.iso'/>
      <target dev='hdb' bus='sata'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='usb' index='0' model='nec-xhci'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
      <model name='i82801b11-bridge'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
    </controller>
    <controller type='pci' index='2' model='pci-bridge'>
      <model name='pci-bridge'/>
      <target chassisNr='2'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:0b:b6:02'/>
      <source bridge='virbr0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x05' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x00' slot='0x1a' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x06' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x00' slot='0x1d' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x07' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x08' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x08' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x09' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x0424'/>
        <product id='0x274d'/>
      </source>
      <address type='usb' bus='0' port='2'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x0bb4'/>
        <product id='0x0306'/>
      </source>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x0bb4'/>
        <product id='0x2c87'/>
        <address bus='1' device='8'/>
      </source>
      <address type='usb' bus='0' port='4'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x0bb4'/>
        <product id='0x2c87'/>
        <address bus='1' device='10'/>
      </source>
      <address type='usb' bus='0' port='1.1'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x0d8c'/>
        <product id='0x0012'/>
      </source>
      <address type='usb' bus='0' port='1.2'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x28de'/>
        <product id='0x2000'/>
      </source>
      <address type='usb' bus='0' port='1.3'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x28de'/>
        <product id='0x2101'/>
        <address bus='1' device='11'/>
      </source>
      <address type='usb' bus='0' port='1.4'/>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x28de'/>
        <product id='0x2101'/>
        <address bus='1' device='12'/>
      </source>
      <address type='usb' bus='0' port='1.5'/>
    </hostdev>
    <hub type='usb'>
      <address type='usb' bus='0' port='1'/>
    </hub>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x0a' function='0x0'/>
    </memballoon>
  </devices>
</domain>

 

Link to comment

PCI Devices and IOMMU Groups

IOMMU group 0
ff:0b.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring [8086:2f81] (rev 02)
ff:0b.1 Performance counters [1101]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring [8086:2f36] (rev 02)
ff:0b.2 Performance counters [1101]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring [8086:2f37] (rev 02)
IOMMU group 1
ff:0c.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers [8086:2fe0] (rev 02)
ff:0c.1 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers [8086:2fe1] (rev 02)
ff:0c.2 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers [8086:2fe2] (rev 02)
ff:0c.3 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers [8086:2fe3] (rev 02)
ff:0c.4 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers [8086:2fe4] (rev 02)
ff:0c.5 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers [8086:2fe5] (rev 02)
ff:0c.6 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers [8086:2fe6] (rev 02)
ff:0c.7 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers [8086:2fe7] (rev 02)
IOMMU group 2
ff:0d.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers [8086:2fe8] (rev 02)
ff:0d.1 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers [8086:2fe9] (rev 02)
IOMMU group 3
ff:0f.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent [8086:2ff8] (rev 02)
ff:0f.1 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent [8086:2ff9] (rev 02)
ff:0f.2 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent [8086:2ffa] (rev 02)
ff:0f.3 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent [8086:2ffb] (rev 02)
ff:0f.4 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers [8086:2ffc] (rev 02)
ff:0f.5 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers [8086:2ffd] (rev 02)
ff:0f.6 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers [8086:2ffe] (rev 02)
IOMMU group 4
ff:10.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCIe Ring Interface [8086:2f1d] (rev 02)
ff:10.1 Performance counters [1101]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCIe Ring Interface [8086:2f34] (rev 02)
ff:10.5 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers [8086:2f1e] (rev 02)
ff:10.6 Performance counters [1101]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers [8086:2f7d] (rev 02)
ff:10.7 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers [8086:2f1f] (rev 02)
IOMMU group 5
ff:12.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 0 [8086:2fa0] (rev 02)
ff:12.1 Performance counters [1101]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 0 [8086:2f30] (rev 02)
ff:12.4 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 1 [8086:2f60] (rev 02)
ff:12.5 Performance counters [1101]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 1 [8086:2f38] (rev 02)
IOMMU group 6
ff:13.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers [8086... (rev 02)
ff:13.1 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers [8086... (rev 02)
ff:13.2 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder [8086:2faa] (rev 02)
ff:13.3 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder [8086:2fab] (rev 02)
ff:13.6 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Channel 0/1 Broadcast [8086:2fae] (rev 02)
ff:13.7 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Global Broadcast [8086:2faf] (rev 02)
IOMMU group 7
ff:14.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 Thermal Control [8086:2fb0] (rev 02)
ff:14.1 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 Thermal Control [8086:2fb1] (rev 02)
ff:14.2 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 ERROR Registers [8086:2fb2] (rev 02)
ff:14.3 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 ERROR Registers [8086:2fb3] (rev 02)
ff:14.4 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1 [8086:2fbc] (rev 02)
ff:14.5 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1 [8086:2fbd] (rev 02)
ff:14.6 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1 [8086:2fbe] (rev 02)
ff:14.7 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1 [8086:2fbf] (rev 02)
IOMMU group 8
ff:16.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers [8086... (rev 02)
ff:16.1 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers [8086... (rev 02)
ff:16.2 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder [8086:2f6a] (rev 02)
ff:16.3 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder [8086:2f6b] (rev 02)
ff:16.6 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Channel 2/3 Broadcast [8086:2f6e] (rev 02)
ff:16.7 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Global Broadcast [8086:2f6f] (rev 02)
IOMMU group 9
ff:17.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 Thermal Control [8086:2fd0] (rev 02)
ff:17.1 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 Thermal Control [8086:2fd1] (rev 02)
ff:17.2 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 ERROR Registers [8086:2fd2] (rev 02)
ff:17.3 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 ERROR Registers [8086:2fd3] (rev 02)
ff:17.4 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3 [8086:2fb8] (rev 02)
ff:17.5 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3 [8086:2fb9] (rev 02)
ff:17.6 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3 [8086:2fba] (rev 02)
ff:17.7 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3 [8086:2fbb] (rev 02)
IOMMU group 10
ff:1e.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit [8086:2f98] (rev 02)
ff:1e.1 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit [8086:2f99] (rev 02)
ff:1e.2 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit [8086:2f9a] (rev 02)
ff:1e.3 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit [8086:2fc0] (rev 02)
ff:1e.4 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit [8086:2f9c] (rev 02)
IOMMU group 11
ff:1f.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 VCU [8086:2f88] (rev 02)
ff:1f.2 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 VCU [8086:2f8a] (rev 02)
IOMMU group 12
00:00.0 Host bridge [0600]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DMI2 [8086:2f00] (rev 02)
IOMMU group 13
00:01.0 PCI bridge [0604]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 1 [8086:2f02] (rev 02)
IOMMU group 14
00:01.1 PCI bridge [0604]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 1 [8086:2f03] (rev 02)
IOMMU group 15
00:02.0 PCI bridge [0604]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 2 [8086:2f04] (rev 02)
IOMMU group 16
00:03.0 PCI bridge [0604]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3 [8086:2f08] (rev 02)
IOMMU group 17
00:03.2 PCI bridge [0604]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3 [8086:2f0a] (rev 02)
IOMMU group 18
00:05.0 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Address Map, VTd_Misc, System Management [8086:2f28] (rev 02)
00:05.1 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Hot Plug [8086:2f29] (rev 02)
00:05.2 System peripheral [0880]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 RAS, Control Status and Global Errors [8086:2f2a] (rev 02)
00:05.4 PIC [0800]: Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 I/O APIC [8086:2f2c] (rev 02)
IOMMU group 19
00:11.0 Unassigned class [ff00]: Intel Corporation C610/X99 series chipset SPSR [8086:8d7c] (rev 05)
00:11.4 SATA controller [0106]: Intel Corporation C610/X99 series chipset sSATA Controller [AHCI mode] [8086:8d62] (rev 05)
IOMMU group 20
00:14.0 USB controller [0c03]: Intel Corporation C610/X99 series chipset USB xHCI Host Controller [8086:8d31] (rev 05)
IOMMU group 21
00:16.0 Communication controller [0780]: Intel Corporation C610/X99 series chipset MEI Controller #1 [8086:8d3a] (rev 05)
IOMMU group 22
00:19.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection (2) I218-LM [8086:15a0] (rev 05)
IOMMU group 23
00:1a.0 USB controller [0c03]: Intel Corporation C610/X99 series chipset USB Enhanced Host Controller #2 [8086:8d2d] (rev 05)
IOMMU group 24
00:1b.0 Audio device [0403]: Intel Corporation C610/X99 series chipset HD Audio Controller [8086:8d20] (rev 05)
IOMMU group 25
00:1c.0 PCI bridge [0604]: Intel Corporation C610/X99 series chipset PCI Express Root Port #1 [8086:8d10] (rev d5)
IOMMU group 26
00:1c.3 PCI bridge [0604]: Intel Corporation C610/X99 series chipset PCI Express Root Port #4 [8086:8d16] (rev d5)
IOMMU group 27
00:1c.4 PCI bridge [0604]: Intel Corporation C610/X99 series chipset PCI Express Root Port #5 [8086:8d18] (rev d5)
IOMMU group 28
00:1c.7 PCI bridge [0604]: Intel Corporation C610/X99 series chipset PCI Express Root Port #8 [8086:8d1e] (rev d5)
IOMMU group 29
00:1d.0 USB controller [0c03]: Intel Corporation C610/X99 series chipset USB Enhanced Host Controller #1 [8086:8d26] (rev 05)
IOMMU group 30
00:1f.0 ISA bridge [0601]: Intel Corporation C610/X99 series chipset LPC Controller [8086:8d47] (rev 05)
00:1f.2 SATA controller [0106]: Intel Corporation C610/X99 series chipset 6-Port SATA Controller [AHCI mode] [8086:8d02] (rev 05)
00:1f.3 SMBus [0c05]: Intel Corporation C610/X99 series chipset SMBus Controller [8086:8d22] (rev 05)
IOMMU group 31
03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104 [GeForce GTX 1080] [10de:1b80] (rev a1)
03:00.1 Audio device [0403]: NVIDIA Corporation GP104 High Definition Audio Controller [10de:10f0] (rev a1)
IOMMU group 32
04:00.0 SATA controller [0106]: Marvell Technology Group Ltd. 88SE9230 PCIe SATA 6Gb/s Controller [1b4b:9230] (rev 11)
IOMMU group 33
05:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] [10de:1c82] (rev a1)
05:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:0fb9] (rev a1)
IOMMU group 34
06:00.0 Non-Volatile memory controller [0108]: Samsung Electronics Co Ltd NVMe SSD Controller [144d:a802] (rev 01)
IOMMU group 35
07:00.0 USB controller [0c03]: VIA Technologies, Inc. VL805 USB 3.0 Host Controller [1106:3483] (rev 01)
IOMMU group 36
08:00.0 USB controller [0c03]: ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller [1b21:1242]
IOMMU group 37
09:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)

 

USB Devices

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0bb4:2744 HTC (High Tech Computer Corp.) 
Bus 001 Device 003: ID 174c:2074 ASMedia Technology Inc. ASM1074 High-Speed hub
Bus 001 Device 004: ID 0bb4:2134 HTC (High Tech Computer Corp.) 
Bus 001 Device 005: ID 0bb4:0306 HTC (High Tech Computer Corp.) 
Bus 001 Device 006: ID 28de:2000  
Bus 001 Device 007: ID 0424:274d Standard Microsystems Corp. 
Bus 001 Device 008: ID 0bb4:2c87 HTC (High Tech Computer Corp.) 
Bus 001 Device 009: ID 0d8c:0012 C-Media Electronics, Inc. 
Bus 001 Device 010: ID 0bb4:2c87 HTC (High Tech Computer Corp.) 
Bus 001 Device 011: ID 28de:2101  
Bus 001 Device 012: ID 28de:2101  
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 002: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) Flash Drive
Bus 002 Device 003: ID 0781:5590 SanDisk Corp. 
Bus 002 Device 004: ID 174c:3074 ASMedia Technology Inc. ASM1074 SuperSpeed hub

Link to comment

Are you still working on this? I cannot get my Vive to work for the life of me. Continuously dropping the connection to the Base Stations and the controllers not connecting.

 

After the vive 'disconnects' it readdresses it self as a USB device. so it isn't virtually plugged in anymore.

 

(Catching up on the thread, back from vacation)

Link to comment

When I started this guide, the script worked and I had success. The vive was very touchy. As soon as I started to do anything like update firmware or troubleshooting steps, everything went wrong. The Vive software tells the devices to disconnect or reboot because they physically become disconnected from the computer for a moment. When they come back, they are assigned new USB IDs and are not automatically connected back to that VM. I would have to run the script again to reattach the devices at that time.

 

The short of that experiences is: Do not update firmware while doing USB passthough. The trouble shooting steps will cause more headaches too.

 

The officalle best way to do things is to pass the USB controller itself. The new Unraid updates keep your USB Controller passthough settings after you set them within your XML and no longer clear them when you view /edit vm from the GUI.

 

 

If you can, even if it is temporary, set up your vive / room with USB Controller passthough. Then if you must, switching back to the script approach will be more stable because the vive is already configured on the VM. (Somewhat speculation based on what I can remember)

 

I bought a new ASUS board and that solved all my GPU problems and it had a USB 3.1 controller that I was then able to use for the VIVE. Based on that, I haven't needed to shift back to using USB swapping to running VMS.

 

There is a new plugin "in progress" out there on the "Community Applications" plugin called "Libvirt Hotplug USB". I don't know if that project will be able to handle the Vive when it is done.

___

Speculation: I wonder if Vive passthough would be any better with direct connection to the box instead of using the repeater. One would loose the Bluetooth features of the vive, but that is how the portal VR laptop backpacks are configured. Note: They replace the Vive HDMI because that is special that will only work if connected to repeater box.

 

 

Link to comment

 

USB Devices

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0bb4:2744 HTC (High Tech Computer Corp.) 
Bus 001 Device 003: ID 174c:2074 ASMedia Technology Inc. ASM1074 High-Speed hub
Bus 001 Device 004: ID 0bb4:2134 HTC (High Tech Computer Corp.) 
Bus 001 Device 005: ID 0bb4:0306 HTC (High Tech Computer Corp.) 
Bus 001 Device 006: ID 28de:2000  
Bus 001 Device 007: ID 0424:274d Standard Microsystems Corp. 
Bus 001 Device 008: ID 0bb4:2c87 HTC (High Tech Computer Corp.) 
Bus 001 Device 009: ID 0d8c:0012 C-Media Electronics, Inc. 
Bus 001 Device 010: ID 0bb4:2c87 HTC (High Tech Computer Corp.) 
Bus 001 Device 011: ID 28de:2101  
Bus 001 Device 012: ID 28de:2101  
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 002: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) Flash Drive
Bus 002 Device 003: ID 0781:5590 SanDisk Corp. 
Bus 002 Device 004: ID 174c:3074 ASMedia Technology Inc. ASM1074 SuperSpeed hub

 

My command: mapusb viveTempFolder '0bb4 0d8c 0424 28de' '1 GPU Middle WIN 10'

Based on your post. These are the Vive devices:

[b]Devices that normal passing the USB works fine because the ids are different.[/b]
Bus 001 Device 002: ID 0bb4:2744 HTC (High Tech Computer Corp.)   #Identified by row containing: 0bb4
Bus 001 Device 004: ID 0bb4:2134 HTC (High Tech Computer Corp.)   #Identified by row containing: 0bb4
Bus 001 Device 005: ID 0bb4:0306 HTC (High Tech Computer Corp.)   #Identified by row containing: 0bb4
Bus 001 Device 007: ID 0424:274d Standard Microsystems Corp.        #Identified by row containing: 0424 
Bus 001 Device 009: ID 0d8c:0012 C-Media Electronics, Inc.                #Identified by row containing: 0d8c 

[b]This is the first source of frustration with passing vive to VM. They reused the same USB component here twice[/b]
Bus 001 Device 008: ID 0bb4:2c87 HTC (High Tech Computer Corp.)   #Identified by row containing: 0bb4
Bus 001 Device 010: ID 0bb4:2c87 HTC (High Tech Computer Corp.)   #Identified by row containing: 0bb4
Issue here is same IDs and no name so it doesn't show up on GUIs
Bus 001 Device 011: ID 28de:2101                                                  #Identified by row containing: 28de
Bus 001 Device 012: ID 28de:2101                                                  #Identified by row containing: 28de

No name so it doesn't show up on GUI.
Bus 001 Device 006: ID 28de:2000                                                  #Identified by row containing: 28de

 

If your using my script. the command would be

#I had the script as a function for testing, so I use source to make that function available. The viveTempFolder can be left like that. it will create a folder with that name to store xml configs for debugging reasons. The only thing i changed from my use of this is the VM name at the end. When the function is ran, it will attach all USB devices containing lines with one of '0bb4 0d8c 0424 28de' to your vm 'Steam-WIN10'. USB devices already attached will report errors that we ignore and the ones that aren't attached are attached. If you start running out of USB addresses, then reboot.

source mapusb.sh
mapusb viveTempFolder '0bb4 0d8c 0424 28de' 'Steam-WIN10'

 

 

 

 

 

 

 

Link to comment

Hi I am thinking of getting a vive or occulus.

 

So with a USB controller passed through does  vive work fine in the VM?

I don't have any other gaming machine other than my VM ,so I would like to be sure I can use it with a VM okay.

Also, what do you think of occulus vs vive? Sorry don't know a lot about VR.

 

The best way to run the vive on a VM is by passing the USB controller. Some controllers still have issues. Even without running on a VM, there can be issues. I pass a USB 3.1 controller on my new ASUS x99 board and run my vive off that. I started this post when I didn't have such options with my older x99 ASRock board.

 

If you pass a USB 2/3 controller though and you still have issues, then consider buying one of the PCIe USB 3.1 cards and passing that though.

https://www.reddit.com/r/Vive/comments/4l0c68/psa_getting_a_pcie_usb_3_card_solved_all_my_vive/

 

To be honest with you. It took me 5 months just to get my setup working due to the motherboard dropping a GPU and crashing my machine at random intervals, that once I had it working, i set up the Vive and haven't touched the occulus yet. It is still in its plastic wrapping. I've been waiting for the touch sensors on the occulus.

 

The vive was just on sale, during Black Friday.  If you do get the vive, don't get two if you will be using them in the same room because the lighthouses will interfere with each other.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.