在Win10中监控USB使用的带宽

在Win10中监控USB使用的带宽

这里有很多关于监控 USB 带宽的帖子,但是都没有帮助我,所以我在这里发布了我的问题(设备管理器没有显示 USB 带宽...):

我有一台装有 Win10 的联想笔记本,我在其上使用外置 USB3 摄像头。只要插入笔记本的电源线,一切都会顺利运行,但是当拔下电源线时,USB 开始大量丢失数据包和帧。在 Windows 电源管理设置中启用最大性能会有所帮助。但是,在摆弄电源设置时,我意识到不是 USB 设置(如挂起模式等)导致错误,而是无线适配器的设置。如果我对无线适配器应用任何省电模式,我的 USB 就会丢失数据包。关闭 WLAN 也是如此,然后 USB 会立即丢失数据包。很奇怪,不是吗?

我的猜测是,USB 控制器和 wifi 共享相同的资源、数据总线等,因此关闭 wifi 会以某种方式限制 USB 控制器带宽。因此,我喜欢监控当前的 USB 带宽。但我该怎么做?有没有 powershell 命令?或者,似乎可以使用 WinAPI 获取 USB 带宽,但因此您必须深入研究将 Microsoft 函数实现到您的 C++ 源代码中...

欢迎任何帮助!

答案1

在收到很多对我的问题的好评后,我能够更深入地研究这个问题,结论如下:首先,我下载了 HWiNFO 并监控了处理器的空闲状态。HWiNFO 提供了一个记录性能的选项,我在捕获 USB 摄像头数据的软件运行时记录了几分钟。

  1. 前 3 分钟:插入电源线,wifi 处于活动状态且不处于省电模式 -> 无错误(无丢失的 USB 数据包)
  2. 接下来的 3 分钟:电源线已拔下,wifi 处于活动状态但正在省电(这是使用电池供电时 Windows 平衡模式下的默认设置)-> 错误
  3. 接下来的 3 分钟:关闭电源线,开启 wifi,并在电源选项中将性能设置为最大 -> 无错误
  4. 关闭 wifi(在任务栏中)-> 错误

处理器和封装对应的空闲状态显示如下:

使用自己的软件的空闲状态

上面解释的 4 个周期可以清楚地看到,尤其是在顶部子图(包空闲模式)中。显然这是正确的,错误(丢失的 USB 数据包)的频率与处理器处于空闲状态的时间有关:空闲状态的时间百分比越大,USB 丢失的数据包越多(反之亦然,C0 中的时间越长,错误越少)。

我认为,当无线适配器关闭或省电时,连接的相机会丢失 USB 数据,这只是因为当您关闭 wifi 或尝试省电时,处理器会更频繁地休眠。但是,如果有经验丰富的用户可以确认这一点,那会很有帮助吗?

但是,这确实解释了我的问题但并没有解决,所以我继续:

我有一个供应商软件(基本上是相机附带的软件),它不会丢失任何 USB 数据,无论插入或拔出电源线或省电模式如何。这与我用 C++ 编写的软件(存在上述问题)形成了鲜明对比。

我使用供应商软件重复了上述测试。结果未在此处显示,但使用供应商软件时,软件包永远不会空闲,因此不会丢失任何 USB 数据。下图很有趣,我在供应商软件中多次停止并重新启动 USB 摄像头,同时使用 HWiNFO 记录空闲状态: 使用供应商软件停止和启动 USB 摄像头时的空闲状态

很明显,在供应商软件中启动 USB 摄像头时,没有任何软件包处于空闲状态。停止后,空闲状态会再次开始。

结论:我最初的谜团已经解开(空闲状态是导致 USB 数据包丢失的原因),但问题仍然存在。但是,必须能够以编程方式防止处理器(或数据包)进入空闲状态,这意味着我需要一些我的 C++ 程序可以执行的命令,也许还需要一个编译器指令来告诉处理器“不要进入空闲状态”。一定存在类似的东西,因为供应商软件似乎就是这样做的。所以我现在不会结束这个问题,但需要寻求进一步的专家帮助。

相关内容