USB capability

Hi, I want to test the USB bandwidth of Jetson nano, by connecting 4 USB cameras (1080p, 30fps).
After I connect 2 USB cameras to Jetson nano successfully, the system returns error message if I wanted to connect the 3rd USB camera.

Before testing, below commands had been executed.
echo ‘-1’ > /sys/module/usbcore/parameters/autosuspend
echo ‘1024’ > /sys/module/usbcore/parameters/usbfs_memory_mb

=====Error messages are as below:=====
Setting pipeline to PAUSED …
Pipeline is live and does not need PREROLL …
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0/GstXvImageSink:xvimagesink0: sync = true
Setting pipeline to PLAYING …
New clock: GstSystemClock
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0.GstPad:src: caps = image/jpeg, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)2:4:7:1, interlace-mode=(string)progressive
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = image/jpeg, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)2:4:7:1, interlace-mode=(string)progressive
/GstPipeline:pipeline0/GstJpegParse:jpegparse0.GstPad:sink: caps = image/jpeg, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)2:4:7:1, interlace-mode=(string)progressive
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = image/jpeg, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)2:4:7:1, interlace-mode=(string)progressive
0:00:00.132012611 WARN v4l2bufferpool gstv4l2bufferpool.c:790:gst_v4l2_buffer_pool_start:v4l2src0:pool:srcUncertain or not enough buffers, enabling copy threshold
0:00:00.143389900 ERROR v4l2bufferpool gstv4l2bufferpool.c:677:gst_v4l2_buffer_pool_streamon:v4l2src0:pool:src error with STREAMON 28 (No space left on device)
0:00:00.143461881 ERROR bufferpool gstbufferpool.c:564:gst_buffer_pool_set_active:v4l2src0:pool:src start failed
0:00:00.143758660 WARN v4l2src gstv4l2src.c:658:gst_v4l2src_decide_allocation: error: Failed to allocate required memory.
0:00:00.143790328 WARN v4l2src gstv4l2src.c:658:gst_v4l2src_decide_allocation: error: Buffer pool activation failed
0:00:00.143906685 WARN basesrc gstbasesrc.c:3275:gst_base_src_prepare_allocation: Subclass failed to decide allocation
0:00:00.143960280 WARN basesrc gstbasesrc.c:3055:gst_base_src_loop: error: Internal data stream error.
0:00:00.143987000 WARN basesrc gstbasesrc.c:3055:gst_base_src_loop: error: streaming stopped, reason not-negotiated (-4)
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed to allocate required memory.
Additional debug info:
gstv4l2src.c(658): gst_v4l2src_decide_allocation (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Buffer pool activation failed
Execution ended after 0:00:00.050336685
Setting pipeline to PAUSED …
Setting pipeline to READY …
Setting pipeline to NULL …
Freeing pipeline …

====== dmesg =====
[ 6514.741111] usb 1-3.4.1: Not enough bandwidth for new device state.
[ 6514.747495] usb 1-3.4.1: Not enough bandwidth for altsetting 7

====== measured by usbtop =====
Bus ID 0 (All USB buses) To device From device
Device ID 1 : 0.00 KiB/s 0.00 KiB/s
Device ID 3 : 0.00 KiB/s 0.00 KiB/s
Device ID 4 : 0.00 KiB/s 0.00 KiB/s
Device ID 7 : 0.00 KiB/s 0.00 KiB/s
Device ID 8 : 0.00 KiB/s 0.00 KiB/s
Device ID 12 : 141.68 KiB/s 15258.91 KiB/s
Device ID 14 : 141.74 KiB/s 15259.84 KiB/s
Device ID 15 : 0.00 KiB/s 0.00 KiB/s
Bus ID 1 (USB bus number 1) To device From device
Device ID 1 : 0.00 KiB/s 0.00 KiB/s
Device ID 3 : 0.00 KiB/s 0.00 KiB/s
Device ID 4 : 0.00 KiB/s 0.00 KiB/s
Device ID 7 : 0.00 KiB/s 0.00 KiB/s
Device ID 8 : 0.00 KiB/s 0.00 KiB/s
Device ID 12 : 141.68 KiB/s 15259.03 KiB/s
Device ID 14 : 141.74 KiB/s 15259.96 KiB/s
Device ID 15 : 0.00 KiB/s 0.00 KiB/s
Bus ID 2 (USB bus number 2) To device From device
Device ID 1 : 0.00 KiB/s 0.00 KiB/s

Does the error message imply that “15259.03 KiB/s + 15259.96 KiB/s” had exceeded the restriction of Jetson nano’s USB bandwidth or capability?

Hi,
Yes, it is possible to hit performance bottleneck with 2+ USB cameras running in 1080p30. Please check hardware design of Nano:
https://developer.nvidia.com/embedded/dlc/jetson-nano-product-design-guide
https://developer.nvidia.com/embedded/dlc/Jetson-Nano-Carrier-Board-Reference-Design-Files
It is one pair of USB2/USB3 pins with a 4-port USB hub, so it is one USB3 bandwidth in total.