[讨论]QNX下USB的传输上限

首先是理论值,USB2.0 High Speed 最快的传输方式— bulk mode 下的速度为53.248Mbyte/s (512byte/transaction * 8uframe/ms * 13transaction/uframe * 1000ms/s)。

测试环境:
1.主机 QNX6.4
驱动 自制(基于QNX提供的usbd系列函数)
外部设备 EZ-USB(USB2.0 High Speed controller FX2LP with CPU 8051)
2.主机 Windows XP SP3
驱动 USB controller厂家—Cypress提供
外部设备 同上

测试:
QNX下的测试结果为 4Mbyte/s 左右。
当然,也可能是哪里有错误。。。 :frowning:
同样的设备(设备中的软件部分也相同),在windows下的传输速度可以达到 26Mbyte/s 左右。
因此判断主机为瓶颈。但是到底是系统的问题,还是驱动的问题还不确定。

于是接着测试,windows下传输时,2个数据包之间的间隔是 18us 左右,接近设备的限制(设备准备数据还是要花时间的。。。)
在QNX下传输时,2个数据包之间的间隔是 125us 左右,通过在驱动中加入打印语句,得知其中的大部分时间消耗在函数 pthread_sleepon_wait( urb ) 和 call back 函数 bulk_cbf( ) 之间。也就是说,QNX下 call back 函数的执行似乎很迟钝的样子。。。

由上述测试,得出QNX下USB传输慢的结果。
如有错误,望指明,谢谢。

其实我最想知道的是,有什么办法改良。。。

之前还有那么多人问关于USB的问题,大家都不在乎传输速度么?。。。

继续测试。

环境:
USB device: PQI 4GB USB memory
PC: 865G/ICH4, Celeron 1.6GHz, 1GB memory
OS: Windows XP SP3 / QNX 6.3.0 / QNX 6.3.2 / QNX 6.4.1
测试方法:
10个100M大小的文件复制,计算平均时间
结果:

  1. Windows XP SP3
    5.0s 20.0MB/s

  2. QNX 6.3.0
    78.0s 1.3MB/s

  3. QNX 6.3.2
    15.9s 6.3MB/s

  4. QNX 6.4.1
    6.5s 15.4MB/s

也就是说,测试环境下,QNX最新的版本传输速度也才是Windows的77%…

最新结果。。。

硬件如上。
QNX版本: 6.4.0
传输模式: Bulk
平均最大速度: 14MByte/s

不知道跟文件系统的缓存有多大关系。你试试把文件cp到 /dev/shmem,看有什么不同。

数据是被直接写到内存中。

就是使用自制的USB驱动从外部设备得到数据,存到驱动的缓存中,然后再通过资源管理器转存到调用驱动的进程的缓存中。

也Show一下我测的数据:

环境:
Ethernet device: Intel 82573E
PC: Pentium 3.0GHz, 3GB memory
OS: Windows XP SP3 / QNX 6.4.0
测试方法:
1000000个1.5K大小的包转发,计算吞吐量
结果:

  1. Windows XP SP3
    100 MBPS

  2. QNX 6.4.0
    780 MBPS

和自制驱动的效率关系很大!!

感谢回复,问题是自制的驱动似乎遇到了瓶颈,找不到更快的途径了。。。

之前发了好多帖子,这个问题就是:使用资源管理器后,把驱动的缓存理的数据复制到用户程序的缓存时,消耗大量时间的resmgr_msgwrite( )。