动机
信号速率为480 MBit / s时,USB 2.0设备应能够以高达60 MB / s的速度传输数据。但是,今天的设备在阅读[ Wiki:USB ]时似乎被限制为30-42 MB / s 。那是30%的开销。
十多年来,USB 2.0已经成为外部设备的事实上的标准。早期以来,USB接口最重要的应用之一就是便携式存储。不幸的是,USB 2.0迅速成为了这些带宽要求较高的应用程序的速度限制瓶颈,例如,当今的HDD能够以90 MB / s的顺序读取速度。考虑到长期的市场占有率以及对更高带宽的持续需求,我们应该期望USB 2.0 eco系统经过多年的优化,其读取性能已接近理论极限。
在我们的案例中,理论上的最大带宽是多少?每个协议包括USB都有开销,根据官方USB 2.0标准,它为53.248 MB / s [ 2,表5-10]。从理论上讲,这意味着今天的USB 2.0设备可以快25%。
分析
为了深入探究此问题的根源,以下分析将演示在从存储设备读取顺序数据时总线上正在发生的情况。该协议是逐层分解的,我们特别对以下问题感兴趣:为什么53.248 MB / s是批量上游设备的最大理论数量。最后,我们将讨论分析的局限性,这可能会给我们带来一些额外开销的提示。
笔记
在整个问题中,仅使用十进制前缀。
USB 2.0主机能够处理多个设备(通过集线器),每个设备可以处理多个端点。端点可以在不同的传输模式下运行。我们将分析限制在直接连接到主机并且能够在高速模式下通过上游批量端点连续发送完整数据包的单个设备上。
构图
USB高速通信以固定帧结构同步。每个帧长125 us,并以帧起始数据包(SOF)开始,并受帧结束序列(EOF)限制。每个数据包均以SYNC开头,并以和数据包结尾(EOF)结尾。为了清楚起见,这些序列已添加到图中。EOP的大小是可变的,并且取决于分组数据,对于SOF,它始终为5个字节。
在新标签页中打开图片可查看大图。
交易次数
USB是主驱动协议,每个事务都由主机启动。SOF和EOF之间的时隙可用于USB事务。但是,SOF和EOF的时间安排非常严格,并且主机仅启动可以在空闲时隙内完全完成的事务。
我们感兴趣的事务是成功的批量IN事务。事务从令牌包IN开始,然后主机等待数据包DATA0 / DATA1,并通过握手包ACK确认传输。所有这些数据包的EOP都是1到8位,具体取决于数据包数据,在此我们假定了最坏的情况。
在这三个数据包之间,我们必须考虑等待时间。它们位于主机的IN数据包的最后一位与设备的DATA0数据包的首位之间,以及DATA0数据包的最后一位与ACK数据包的第一位之间。我们不必考虑任何进一步的延迟,因为主机可以在发送ACK之后立即开始发送下一个IN。电缆传输时间定义为最大18 ns。
批量传输每个IN事务最多可以发送512字节。主机将尝试在帧定界符之间发出尽可能多的事务。尽管批量传输的优先级较低,但是当没有其他事务挂起时,它可以占用插槽中的所有可用时间。
为了确保适当的时钟恢复,标准定义了一种方法调用位填充。当数据包需要非常长的相同输出序列时,会添加一个附加的侧面。这样可以确保在最多6位之后出现侧面。在最坏的情况下,这将使总数据包大小增加7/6。EOP不受位填充的影响。
在新标签页中打开图片可查看大图。
带宽计算
批量IN事务的开销为24字节,有效载荷为512字节。总共有536个字节。之间的时隙为7487字节宽。无需填充位,就可以容纳13.968个数据包。每秒8000个微帧,我们可以13 * 512 * 8000 B / s = 53.248 MB / s读取数据
对于完全随机的数据,我们期望在6个连续位的2 ** 6 = 64个序列之一中需要位填充。这增加了(63 * 6 + 7)/(64 * 6)。将所有受位填充的字节乘以该数字得出的总事务长度为(19 + 512)*(63 * 6 + 7)/(64 * 6)+ 5 = 537.38字节。每个微帧产生13.932数据包。
这些计算还缺少另一个特殊情况。该标准定义了最大设备响应时间为192位时间[ 2,第7.1.19.2章]。在确定最后一个包装是否仍然适合框架时,必须考虑到这一点,以防设备需要完整的响应时间。我们可以通过使用7439字节的窗口来解决这个问题。虽然结果带宽是相同的。
还剩什么
错误检测和恢复尚未涵盖。错误可能足够频繁,或者错误恢复很耗时,从而影响平均性能。
我们假设数据包和事务处理后,主机和设备会立即做出反应。我个人认为在任一端的数据包或事务结束时都不需要进行大的处理任务,因此,我无法想到主机或设备不能通过充分优化的硬件实现立即做出响应的任何原因。特别是在正常操作中,大多数记账和错误检测工作都可以在交易期间完成,并且下一个数据包和交易可以排队。
没有考虑其他端点的传输或其他通信。也许用于存储设备的标准协议需要一些连续的边信道通信,这会浪费宝贵的时隙时间。
设备驱动程序或文件系统层的存储设备可能会有额外的协议开销。(数据包有效载荷==存储数据?)
题
为什么今天的实现无法以53 MB / s的速度进行流传输?
当今实施的瓶颈在哪里?
以及可能的跟进:为什么没有人试图消除这种瓶颈?
参考文献
[1] 官方USB 2.0规范
[2] 规格的快速pdf镜像