Jetson nano USB3 bandwidth problem


We are using 2 high speed cameras which indivudally need 2000Mbps for streaming. When we stream both the framerate drops and we are only getting 1100Mbps individually, So 2,2Gbps total. However the jetson nano should be able to achive 5Gbps, so we dont understand why this is limiting the bandwidth. How could we check what the bottleneck is?


I can’t answer, but there are some things to talk about to get you closer to an answer.

First, the 5 Gb/s is only a raw rate. There is overhead and encoding as well. In part there is a dependency on the transfer mode. Isochronous will be a hard reserved real-time whereby bandwidth is reserved for the devices. Bulk or interrupt mode might be more efficient or worse depending on the case. To start with, you will want to look at the output of “lsusb -t -v”, and post that. Then, understand that the query can be limited to a single device via the ID; if that ID happens to be 0955:7020 (the “lsusb -t -v” will give both a tree view and a name to each item to find the ID with, but the 0955:7020 is just an example), then you could get a fully verbose listing for the one ID:
sudo lsusb -d 0955:7020 -vvv
(you can append " 2>&1 | tee log.txt" to create a log file of the output named log.txt)

The above would tell you what mode the device is in, and with tree view, what might be competing on a given root HUB.

You also need to know that the Jetson has many power modes available to use less than full power. To get the full bandwidth you have to be in the max performance mode. Usually you would do this before your testing:

sudo nvpmodel -m 0
sudo jetson_clocks

Also realize that the USB root HUB is generally tied to the first CPU core (CPU0). Software interrupts (IRQs) can go to any core, but hardware IRQs need actual wiring. I believe the Nano is only capable of using the first CPU core for USB handling (if data transfers over that, and then generates a software IRQ for further processing, then you have the best case whereby minimal time is spent on the CPU0 core). There are a very large number of hardware processes using hardware IRQs (versus software IRQs), and they compete for CPU0. So any time spent on any hardware IRQ bound to CPU0 might compete for the camera. To some extent there might be ways of offloading higher load software processes to another core, but that is hit an miss. Incidentally, take a look at “cat /proc/interrupts”, and examine the much larger activity (hardware, not software) on CPU0; much of this is out of necessity.

We got the Jetson Nano into perforamance mode but the bandwidth stays the same. Is there another Jetson that you would reccomend for that task? We feel that it is simply the maximum the jetson nano can actually transfer,

The small form factor Nano is very old tech, it is just a DIMM format for a TX1. Anything Xavier or Orin would be far faster, but I don’t know if it would solve this specific issue. If you want to keep that format, and if you want something capable of running the newest software, then you’d want the Orin Nano (looks like the old Nano, but it is far more powerful…the two models are not even in the same neighborhood for speed and capabilities).

Newer Jetsons also tend to put many of the hardware interrupts on CPU0, but that CPU on newer releases is quite fast in comparison.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.