[SOLVED] Limit for USB devices

krikey

Renowned Member
Aug 15, 2018
142
30
68
UK
I've recently installed Windows 10 as a VM and enabled GPU passthru along with some USB devices such as mouse & keyboard.

1. Is there a way to dedicate a specific USB port on my mobo to the VM? For example if I have a USB hub plugged into the mobo which has 7 ports, or do I need to allocate each device specifically?

2. Is there a limit to how many USB devices I can allocate to a VM? It seems that after adding 5 USB devices, the option to add more in the GUI is now greyed out.
 
1. Unfortunately, yes, you need to add all ports that you want to access from the VM separately. For example, my 4-port hub on bus 1 port 3 requires:
usb0: host=1-3.1,usb3=1 usb1: host=1-3.2,usb3=1 usb2: host=1-3.3,usb3=1 usb3: host=1-3.4,usb3=1
2. Yes, the limit is 5 in the GUI. People on this forum have had success with up to 9 in the configuration file, but it might requires some manual code changes and/or the GUI might remove those sometimes.

PS: If anyone knows how to make QEMU USB-passthrough capable of passing USB-hubs (so they only take one of the five slots), please let me know!
 
Thats useful as I'm going to set up a second WIndows 10 VM with a second dedicated GPU and another identical USB hub. This will allow me to adjust the .conf file accordingly to add all the available ports.

Looking at the list of USB devices I think I can identify the ones associated with the hub as they all seem to be on the 1-3 port, however some of them have a fourth number, for example 1-3.1.1 & 1-3.1.2

Whats odd is that the device attached to 1-3.1.1 is plugged into a USB port on the mobo but 1-3.1.2 is plugged into a port on the USB hub so I'm not sure that I can simply allocate 1-3.1 through 1-3.7 to the VM.
 
They don't need to be allocated in sequence or share the same hub. Easiest way to find out which port is which, is plugging the same easily recognizable device into a port you want to pass amd select that port in the GUI. Then just repeat for each port you want for each VM.
 
Im being a plonker and you mentioning using an easily identifiable device helped. I mistakenly mixed up a TONOR USB mic for another equally obscure brand that was indeed plugged into the mobo. Mystery solved...

The ports assigned to the USB hub are not completely sequential (some using the fourth digit as mentioned above) but hopefully they are persisitent across reboots.
 
So I assumed that simply adding the following the the .conf file would work:

usb0: host=1-9.1,usb3=1
usb1: host=1-9.2,usb3=1
usb2: host=1-3.1.1,usb3=1
usb3: host=1-3.1.2,usb3=1
usb4: host=1-3.1.3,usb3=1
usb5: host=1-3.1.4,usb3=1
usb6: host=1-3.2,usb3=1
usb7: host=1-3.3,usb3=1
usb8: host=1-3.4,usb3=1
usb9: host=1-4,usb3=1

It seems that qemu doesn't recognise the USB numbers beyond usb4, so I'm assuming something else has to be adjusted?
 
It seems that qemu doesn't recognise the USB numbers beyond usb4, so I'm assuming something else has to be adjusted?
That's what I meant with "it might requires some manual code changes". You need to change the Perl-code in one of the Proxmox files. I am unable to find the specific post on this forum that describes how to do it, sorry.
 
  • Like
Reactions: krikey
If you are still wondering about the 3 and 4 digits: it is because a 7-hub is just two 4-hubs, with one internally plugged into the other. As you can see by the numbers 1-3.1 is connected to another hub (with four devices: 1-3.1.1 to .4), while the other three (1-3.2 to .4) are devices.
 
  • Like
Reactions: krikey
4-port hub chips appear to be a standard as you can easily find 4-port, 7-port, 10-port and 13-port hubs but not many sizes in between. Although some have less ports but include a card-reader (which is also USB internally) or such like. I guess it makes sense to mass produces a single type cheaply and have different combinations for various devices. It does cause 4 of your 7 ports to share bandwidth (when all devices are used at the same time) and have slightly higher latency than the other 3 ports. At least now you know which ports those are!
More on-topic: please note that this kind of USB passthrough has more overhead and possible more latency than doing PCI(e) passthrough with a whole USB controller. Of course PCI passthrough does not always work for every USB controller or does not survive a VM restart. Since you talked about audio devices, you might want to verify that it is not a problem for your particular set-up. Adding usb=3 appears to help even when the actual ports and/or devices are USB 1.1 or 2.0.
 
  • Like
Reactions: krikey
Is the increase in latency a side effect of the way that QEMU handles the USB ports or would this have happened anyway with the same hub plugged into a Windows 10 host?

I'm assuming that there's always going to be shared bandwidth and likely latency when using a USB hub anyway, no matter how its used but I wonder how much is introduced when using USB through QEMU in this way.

I guess I can test this by working/gaming on the Windows guest and then the Windows Host and see if I can identify any significant latency.
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!