如何诊断嵌入式Linux USB 传输速度慢?

如何诊断嵌入式Linux USB 传输速度慢?

我有一个带有 Cyclone V SE 的板,其中包含 ARM CortexTM-A9 MPCore(单核)。在这块板上我运行使用 Buildroot 构建的 linux 4.1.15。测试 USB 时发现,批量 OUT 传输的运行速度约为 20MB/s,而批量输入传输的运行速度约为 10MB/s。对于此测量,我在设备上使用了 g_zero,并在主机上使用了一个简单的基于 libusb 的程序。

第二次测量是在设备端使用 g_mass_storage 并在主机端使用 dd 完成的。结果相同。

最后一次测试是使用 ConfigFS、FunctionFS 和我的用户空间应用程序(从 RAM 读取数据或向 RAM 写入数据)的组合完成的。输入速度为 10MB/s,但输出速度高达 40MB/s。我预计速度大致相同(至少在使用 RAM 时)。

我检查了协议中的大量内容USB简而言之并且没有看到任何明显的原因说明为什么 IN 应该比 OUT 慢得多。

现在我知道有太多的事情可能导致这种情况,并且我不期望得到“缓慢是由......引起的”答案。但是我应该在哪里挖掘以及应该使用什么工具来追踪它?

答案1

我相信速度较慢是您所使用的设备固有的。

假设您使用 USB 加密狗(我将使用 =D),由于任何闪存设备的特定需求(据我所知, USB 适配器很简单闪存其顶部有一个“翻译硬件”,使其看起来像一个简单的块设备)。该设备需要擦除整个内存块才能写入哪怕一个位,因此速度很慢。另外,在 USB 闪存设备的具体情况下,似乎速度差异很大

现在,回答您的问题:首先,我会检查我正在使用的设备的预期写入速度。其次,我会查看处理器的用户指南和内核选项,检查是否有任何可用于 USB 通信的 DMA 选项。

相关内容