测试 DMA 读取速度,排查 USB 链路
怎样给 DMA 卡的读取速率做基准测试,正常的结果大致是什么水平,以及最容易吃掉你大部分吞吐量的四个因素。
简短回答
在副机(第二台电脑)上运行你所用固件的读取速度工具,卡要接在数据口上,同一个 USB 控制器上不能有其他设备。正常结果在几十到一两百 MB/s 之间,具体取决于卡的类别和固件。如果远低于这个水平,几乎总是 USB 链路出了问题:只能充电的线、前置面板接口、集线器,或者链路只跑在 USB 2。
为什么改动任何东西之前,要先测读取速度?
几乎所有“我的透视卡顿”之类的反馈,原因都不外乎两种。要么读取速率远低于硬件的实际能力,要么缺少内存映射(MMAP),让读取端做了远超必要的工作量。这两种情况几分钟就能测出来,而靠猜的话,人们往往就把钱花在了错误的环节上。为了解决其中任何一个问题去买更大的卡,就是这种错误里代价最高的一种。
如何做一次干净的读取速度测试
测试环境必须干净,因为如果摄像头和移动硬盘跟卡共用同一个控制器,测出来的是摄像头的成绩,而不是卡的。
- 先启动游戏主机,等它进入桌面
- 确认线是从卡的数据口接到副机的后置 USB 3 口
- 拔掉副机上所有测试用不到的 USB 设备
- 在游戏主机上关闭游戏,以及所有采集或推流软件
- 在副机上运行随固件提供的读取速度工具
- 记下数值,然后冷启动游戏主机,再测一次,拿到第二个数据点
你的测试结果说明什么?
绝对数值因卡的类别、固件和工具而异,所以请把这些当作区间而不是目标值来看:关键在于你落在哪个区间。
| 区间 | 通常意味着 | 该怎么做 |
|---|---|---|
| 远低于预期,只有个位数 MB/s | 链路协商成了 USB 2,或者线只能充电 | 换线、换口,在设备管理器里确认链路显示为 USB 3 |
| 偏低但不离谱,多次测试之间不稳定 | 共用控制器争抢带宽,经过了集线器或扩展坞,或者线材勉强能用 | 直接接后置接口,把该控制器上的其他设备都撤掉 |
| 数值合理,但透视仍然卡顿 | 读取速率没问题;是读取端在低效地盲目探测内存 | 生成内存映射——这是典型的缺 MMAP 症状 |
| 在正常区间内且稳定 | USB 链路和卡本身都没有问题 | 别再折腾硬件了;剩下的问题都在固件或软件配置上 |
如果两次测试结果相差悬殊,这种不稳定本身就是一个结论,它指向的是线材或控制器,而不是卡。
什么最吃吞吐量?
以下按它们在我们工单中出现的顺序排列。
- 只能充电的线或过细的 USB-C 线,撑不住 USB 3 的数据速率
- 用了前置面板的 USB 接口,而不是主板后置接口
- 链路中任何位置接了集线器、扩展坞或延长线
- 其他吃带宽的设备和卡共用同一个 USB 控制器
提示
什么时候换更大的卡才真正有用?
换更大的卡很少有用,即便有用,也必须先确认 USB 链路干净、内存映射已经就位。如果在稳定的 USB 3 直连、好线和有效 MMAP 的条件下仍然不够用,那瓶颈就在 FPGA 余量上。到了这一步,换更高一档的卡,才能为你想要的功能带来实实在在的提升。在那之前,插着烂线的 100T,比插着好线的 35T 还要慢。
关于读取速度的常见问题
读取速度会影响被检测的风险吗?
不会直接影响,不过从原理上说,非常激进的读取模式本身就是一种行为特征。而在实际中,大家关心的那种关系——读得越快越安全——并不存在。读取速率影响的是你的叠加画面有多流畅。
要不要超频点什么?
不要,因为没有任何收益,而且勉强能用的 USB 链路本来就是最常见的故障。在这套配置里,稳定性永远比吞吐量重要。
为什么 Windows 更新之后读取速度下降了?
常见原因是副机上的 USB 控制器驱动被回滚了。在认定卡的性能衰退之前,先重新检查 FTDI 驱动,以及该接口实际协商到的速率。
该用什么工具做测试?
用随固件订单提供的读取速度工具,在副机上运行。不要拿你的结果去和别人用其他工具测出来的数值比较,因为不同工具测的东西不一样,绝对数值没有可比性。
读取速率低一些,有时也没关系吗?
是的。只跑雷达的配置对链路的要求远低于完整的透视叠加画面,所以一个会限制叠加画面的数值,拿来跑雷达可能依然够用。评判速率要看你实际使用的功能,而不是看你见过别人报出的最高数字。
资料来源
这些区间是我们自己测出来的,数据来自我们测试台上的卡和用户工单,而不是来自某份公开规格。
继续阅读
仍然没有解决?在 Discord 提交工单
全部指南