是否可以通过编程查询当前 USB 控制器带宽使用情况?

是否可以通过编程查询当前 USB 控制器带宽使用情况?

我用的是三个罗技 C920网络摄像头mjpg-streamer。设置工作得非常好,但我刚刚意识到它无法扩展。当我将帧速率从我通常喜欢的 5 FPS 提高到 10 FPS 或更高时,我开始遇到带宽问题(这应该或多或少相当于添加另一个网络摄像头)。基本上,我没有意识到 480Mbit/s 的理论限制是每个 USB 2.0 控制器;我以为是每个端口。这让我认为将 USB 2.0 的理论速度宣传为 480Mbit/s 是一种误导,但考虑到我还没有阅读 USB 规格,我会接受这个事实,即这纯粹是我的一个天真的假设。

我知道我设置这个的板子,英特尔 DN2800MT,只有一个 USB 2.0 控制器:

gw1 ~ # lsusb -t | grep ehci
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/8p, 480M

但我也知道我的 Logitech C920 网络摄像头支持硬件加速 h264 解码:

gw1 ~ # v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
Index       : 0
Type        : Video Capture
Pixel Format: 'YUYV'
Name        : YUV 4:2:2 (YUYV)

Index       : 1
Type        : Video Capture
Pixel Format: 'H264' (compressed)
Name        : H.264

Index       : 2
Type        : Video Capture
Pixel Format: 'MJPG' (compressed)
Name        : MJPEG

因此,我应该能够通过将网络摄像头切换到 h264 模式来创建一个解决方法,因为我相信这会使用更少的带宽(然后当然使用不同的程序来获取图像,但把它留给我以后再做。)

考虑到所有这些,是否有任何方法可以找出 USB 控制器的总可用带宽目前被消耗了多少?这只会帮助我根据我对此设置的经验给出一些数字。我的直觉是可能,但这并不那么容易。如果有人能对此有所启发,我很想知道。

答案1

如果您没有,可以下载一个工具“pv”。

$ cat /dev/zero | pv > /media/your_usb/tmpfile

将为您提供通过 USB 控制器写入文件“tmpfile”的速度。

$ cat /media/your_usb/tmpfile | pv > /dev/null

将为您提供读取相同文件的速度。

相关内容