【问题标题】:WIndows CE USB stack performance issueWINDOWS CE USB 堆栈性能问题
【发布时间】:2014-01-22 19:19:48
【问题描述】:

我们正在为 WinCE 6 开发以太网设备的 USB 驱动程序。

我们正在发现性能问题,并可以使用代码分析将其缩小到 USB 堆栈。 Tx 路径中 95% 的时间是在 IssueBulkTransfer 中占用的,这会导致驱动程序在内部对数据包进行排队。 TX-COMPLETE 例程调用与 IssueBulkTransfer 不同步。

我们使用 USB 分析仪检查了 USB 带宽使用情况,发现它占总带宽的 20-30%。所以硬件足够快,可以通过接口传输数据。

根据上述发现,瓶颈似乎在 USB 总线驱动程序和 USB HCD 驱动程序中。

  1. WinCE 6 USB 堆栈是否存在已知的性能限制?

  2. 使用 WinCE 6.0 USB 堆栈的高速设备 (USB 2.0) 可以获得的最大速度是多少?

【问题讨论】:

  • 最大速度取决于实际硬件。

标签: usb windows-ce


【解决方案1】:

您是否使用同步传输?如果您使用异步的,您可能能够为 tx 或 rx 排队多个数据包,并且主机驱动程序不必等到您的驱动程序收到完成通知来发出新的 tx 或 rx 请求。这可能允许您使用更多带宽。您还可以使用 HalAllocateCommonBuffer 或通过为缓冲区保留一些物理内存范围来分配缓冲区。这样,如果驱动程序可以使用 DMA,您可以避免在驱动程序中复制。 您没有提供有关您的硬件架构的详细信息,很难估计您可能期望的性能水平。

【讨论】:

  • 让我简要介绍一下这个问题。 1)我们在初始化期间为每个 PIPE 分配了 TX 缓冲区(假设有 10 个缓冲区)。这些缓冲区仅由 TX 完成例程释放,该例程再次调度在驱动程序中排队的新数据包。在某个时间点,所有 10 个 TX 缓冲区都在 USB 堆栈中被阻止。并且对于每个 TX 完成例程调用,都会安排一个新的 TX。这样一来,性能水平就会下降。我们尝试增加缓冲区,但稍后会达到相同的状态。说清楚TX-COMPLETE例程调用与IssueBulkTransfer不同步。平台:CEPC x86 intel core 2 duo 处理器。 USB2.0
  • 我们当前的吞吐量是 7-9 mbps。预计它会在 70-80 mpbs 左右。感谢您的回复。
猜你喜欢
  • 2011-07-03
  • 2018-05-11
  • 2012-09-24
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
相关资源
最近更新 更多