![是否可以通过编程查询当前 USB 控制器带宽使用情况?](https://linux22.com/image/1382473/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E7%BC%96%E7%A8%8B%E6%9F%A5%E8%AF%A2%E5%BD%93%E5%89%8D%20USB%20%E6%8E%A7%E5%88%B6%E5%99%A8%E5%B8%A6%E5%AE%BD%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%EF%BC%9F.png)
我用的是三个罗技 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
将为您提供读取相同文件的速度。