So I’m planning to achieve 10G networking in my AMD based laptop without Thunderbolt by using two 5G USB 3.0 adapters. However in order to do this properly I need to make sure they won’t share 5G usb 3.0 bandwidth. One simple way to do that is to connect those devices to two separate usb controllers - but that would require me to always connect at least two cables when docking laptop to docking station.
I started looking at my usb tree and noticed that there’s one 10G hub in docking station that seems to have one USB 3.0 hub and one 10G usb-c port. After connecting one USB 3.0 storage device and one USB 3.0 network card to that usb-c 10G port I ended up with topology like this:
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 10000M
|__ Port 1: Dev 33, If 0, Class=Hub, Driver=hub/4p, 10000M
|__ Port 2: Dev 45, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M
|__ Port 3: Dev 37, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 2: Dev 38, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 3: Dev 39, If 0, Class=Mass Storage, Driver=uas, 5000M
does it mean that those two ports (one with network card and one with mass storage) don’t share 5G bandwidth and they’re able to both operate at full 5000M speed, while being connected to laptop using single usb-c 10G connection?
I don’t think so. You’ll still have some overhead that won’t let you operate at full bandwidth. This is all theoretical. The network adapter speed will also translate into something else than the full USB Bus speed.
Realistically, to get the max performance, you would have to update the docking station chipset firmware from time to time. But there has been only one company in my experience that gives you that kind of support → https://plugable.com/
I mean yeah I know this dongle realistically pulls 360 MB/s, even according to marketing materials so it’s around 3 gbps but I meant 2x 5gbps usb so like… 6gbps ethernet. Basically more than single such dongle I also know bond-rr doesn’t exactly scale linearly due to packets reordering but given all of that I just want more than those 3gbps of single dongle and requirement for that is not capping those two dongles at combined speed of single dongle 5gbps
A hub is just that. If you are using the two ports on the same hub/bus, then they are sharing bandwidth. You would need to locate two ports on mutually exclusive hubs/buses in order to achieve your goal. Also, try to avoid hubs/buses that go through the PCH/DMI
Look at the topology diagram.
Yes, the two ports are sharing bandwidth, but it’s on a hub that has a 10G “uplink”.
It seems to me that the hub should have 10G bandwidth available, and two 5G devices should not be bandwidth limited.
The question is, does a USB hub work like a network switch, or like a network hub?
And I think it should work like a network switch: The medium is not shared, the hub actually forwards USB packets intelligently only to the proper endpoint. That should mean you should get the full bandwidth, but I have nothing to base that on.
(The alternative would be that USB packets are “broadcast” to all ports in the chain, and another device would have to wait for bandwidth(time slots) to become available, but I don’t think that’s how USB works)
I don’t have anything else to base this on though, would be interesting find some authoritative documentation regarding this.
Look at the chain. It goes Controller (B04:P1:D1) → Hub (P1:D33:IF0) The hub is inheriting the speed of the controller. That Hub is then split into two ports.
If you are plugging into P2:D45:IF0 and P3:D37:IF0, then you “may” get the full 10Gbps between the ports.
If you are plugging into P2:D38:IF0 and P2:D39:IF0, then no, they are electrically limited to 5GBPS and the parent port’s total electrical bandwidth is 5Gbps.
Remember that USB is a polling protocol and not an interrupt protocol. There is no broadcast per se.
Wow support for those dongles is really bad. I’m getting kernel panic every time connection gets a bit loose and usb tries to renegotiate speed down to 2.0