2014-01-22 41 views
0

我们正在开发用于以太网设备的USB驱动程序的WinCE 6Windows CE的USB栈的性能问题

我们发现性能问题,并能缩小他们USB协议栈,使用的代码分析。发送路径中95%的时间在IssueBulkTransfer中进行,这会导致驱动程序在内部排队数据包。 TX-COMPLETE例程调用与IssueBulkTransfer不同步。

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

由于上述发现瓶颈似乎在USB总线驱动程序和USB HCD驱动程序。

  1. WinCE 6 USB Stack有什么已知的性能限制吗?

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

+0

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

回答

0

您是否使用同步传输?如果您使用异步服务器,则可以为tx或rx排队多个数据包,并且主机驱动程序不必等到您的驱动程序收到补充通知才能发出新的tx或rx请求。这可能会让你使用更多的带宽。您也可以使用HalAllocateCommonBuffer或通过为缓冲区保留一些物理内存区域来分配缓冲区。这样,如果驱动程序可以使用DMA,则可以避免在驱动程序中进行复制。 您没有提供关于您的硬件架构的详细信息,因此很难估计您所期望的性能水平。

+0

让我简单介绍一下这个问题。 1)在初始化期间(假设有10个缓冲区),我们为每个PIPE分配了TX缓冲区。这些缓冲区仅通过TX完成例程释放,该例程再次调度驱动程序中排队的新数据包。在某个时间点,所有10个TX缓冲区在USB堆栈中被阻塞。对于每个TX完成例程调用,计划一个新的TX。有了这个,性能水平就会下降。我们试着增加缓冲区,但稍后会出现相同的状态。 要说清楚TX-COMPLETE例程调用与IssueBulkTransfer不同步。平台:CEPC x86 intel core 2 duo处理器。 USB2.0 – user3224937

+0

我们目前的吞吐量是7-9 mbps。预计它将在70-80磅左右。感谢您的回复。 – user3224937