Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WIndows CE USB堆栈性能问题_Usb_Windows Ce - Fatal编程技术网

WIndows CE USB堆栈性能问题

WIndows CE USB堆栈性能问题,usb,windows-ce,Usb,Windows Ce,我们正在为WinCE 6的以太网设备开发USB驱动程序 我们正在发现性能问题,并可以使用代码分析将其缩小到USB堆栈。Tx路径中95%的时间用于IssueBulkTransfer,这会导致驱动程序在内部对数据包排队。TX-COMPLETE例行调用与IssueBulkTransfer不同步 我们使用USB analyzer检查USB带宽使用情况,发现它占总带宽的20-30%。因此,硬件的速度足以通过接口传输数据 根据以上发现,USB总线驱动程序和USB HCD驱动程序中似乎存在瓶颈 WinCE 6

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

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

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

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

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

  • 使用WinCE 6.0 USB堆栈的高速设备(USB 2.0)的最大速度是多少


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

    最大速度取决于实际硬件。让我简要介绍一下这个问题。1) 我们在初始化期间为每个管道分配了TX缓冲区(假设有10个缓冲区)。这些缓冲区仅通过TX完成例程释放,该例程将再次调度在驱动程序中排队的新数据包。在某个时间点,所有10个TX缓冲区都会在USB堆栈中被阻塞。对于每个发送完成的例行呼叫,计划一个新的发送。这样,性能水平下降了。我们尝试增加缓冲区,但后来又恢复到相同的状态。明确地说,TX-COMPLETE例行调用与IssueBulkTransfer不同步。平台:CEPC x86 intel core 2 duo处理器。USB2.0我们当前的吞吐量为7-9 mbps。预计将在70-80 mpbs左右。谢谢你的回复。