首先,我找到了一个相似的问题,但并不能真正解决我的问题。我试图发现我正在使用的设备的 USB 总线是否是我的程序的瓶颈。
如何监控 USB 总线(类似于 gnome-system-monitor 的工作原理)以显示总线利用率?基本上我想确定总线何时“最大化”。我想我正在寻找的是 usbmon 的一些接口,因为它看起来可以满足我的需要。
这是在测试 USRP 和 GNU Radio 时产生的。我遇到一种情况,USB 总线似乎是一个限制因素,所以我问了一个更普遍的问题,即 USB 性能监控。
答案1
使用优盘,它很好地概述了哪些设备正在使用多少带宽:
Bus ID 1 (USB bus number 1) To device From device
Device ID 1 : 0.00 kb/s 0.00 kb/s
Device ID 2 : 0.00 kb/s 0.00 kb/s
Bus ID 2 (USB bus number 2) To device From device
Device ID 1 : 0.00 kb/s 0.00 kb/s
Device ID 4 : 141.73 kb/s 13777.68 kb/s
Device ID 5 : 9.98 kb/s 11.24 kb/s
Device ID 6 : 0.00 kb/s 0.00 kb/s
Device ID 7 : 0.00 kb/s 0.00 kb/s
Device ID 8 : 141.71 kb/s 15257.26 kb/s
答案2
1.USB接口:
作为塞巴斯指出,优盘似乎提供了一定程度的最低限度的有用信息(尽管它可能会更好),所以我推荐它。
安装方法如下(usbtop
从源代码构建):
- 克隆 git 存储库:
git clone https://github.com/aguinet/usbtop.git
- 导航到刚刚创建的目录
git clone
:cd usbtop
- 安装依赖项:
sudo apt update sudo apt install \ libboost-dev \ libpcap-dev \ libboost-thread-dev \ libboost-system-dev \ cmake \ build-essential
- 创建本地构建目录并进入其中:
mkdir _build && cd _build
- 运行 cmake 准备从源代码构建 usbtop:
cmake -DCMAKE_BUILD_TYPE=Release ..
- 从源代码构建 usbtop:
make
- 安装usbtop:
sudo make install
- 加载 usbmon 内核模块以打开对 USB 总线的访问(我认为这就是它的作用,但我知道这是必需的):
sudo modprobe usbmon
- 运行 usbtop (如果这不起作用,请改用
sudo usbtop
):usbtop
如果我错过了什么,请在评论中告诉我。
安装参考:
- https://github.com/aguinet/usbtop/blob/master/INSTALL
- https://github.com/aguinet/usbtop/issues/3#issuecomment-274325720
2.更新:您也可以使用iostat
:
sudo apt install sysstat
以 1 秒的间隔运行:
iostat -d 1
或以 0.1 秒间隔:
watch -n 0.1 iostat
示例输出iostat -d 1
:
参考:
https://askubuntu.com/questions/3561/how-do-i-monitor-disk-activity-on-a-specific-drive
补充阅读:
https://www.znetlive.com/blog/monitor-disk-io-windows-linux/
有关的:
答案3
自从usbmon提供传输的每个数据包的长度,我会通过编写一个快速程序来解析文件0u
(其中包含所有 USB 设备的数据)来解决这个问题。它会挑选出 USB 总线和设备编号,然后保留数据包的运行总数每个设备的两个方向的长度字段。
然后,这将为您提供每个设备在每个方向上传输的数据量。如果您每秒打印一次,您就会很好地了解每个设备的吞吐量。请注意,它不包括任何 USB 开销,但如果您将这些数字与能够使可用带宽饱和的设备进行比较,您就会知道是否已接近限制。
答案4
使用htop
,我按F2
,Setup
选择列,添加IO_READ_RATE
,IO_WRITE_RATE
或IO_RATE
,我能够看到进程从磁盘读取或写入的速度。