USB 集线器会影响性能吗?

USB 集线器会影响性能吗?

我有两台设备,希望实现最大吞吐量和最大延迟(MIDI例如鼓和 MIDI 键盘。

通过集线器将两者连接到同一个 USB 端口是否会有效地将最大数据传输速率限制为各自的 1/2?

我认为是的,但我不知道 USB 集线器是否具有可用的握手和优先级协议(例如,让具有较长数据缓冲区的设备首先进行通信)。

答案1

是的。通过 USB 集线器连接的所有设备共享该集线器可用的带宽。但并非每个设备都共享 50%。每个 USB 2.0 集线器有 480 Mbit/s 的带宽可供使用在电脑前。我的意思是什么?嗯,你的电脑内置了 USB 集线器。是的,不是每个端口都是一个独立的实体。在大多数情况下,当你看到两个 USB 端口一个叠在另一个上面时,它们在内部都位于一个集线器上。

这也适用于笔记本电脑上并排的两个端口。因此,不要以为只需将两个集线器插入并排的 USB 端口,就可以拥有大量 USB 端口来插入高数据传输速率设备。

您真正需要做的是查看要连接的设备的预期数据传输速率。我预计 MIDI 鼓的传输速率会较低,而键盘的传输速率会较低或中等。这可以与 USB 声卡之类的东西进行比较……您不会希望它与其他任何东西共享集线器。

使用有源集线器时,每个设备都会获得所需的电源,而使用无源集线器时,所有设备共享主机 USB 端口可以输出的任何电源。因此,这也是需要考虑的。

你很可能已经知道了,但对于延迟问题,韋錫驱动程序可以解决大多数(如果不是全部)潜在问题。只是这么说。

答案2

实际上,我很惊讶第一个答案被接受并被点赞,而没有任何事实来支持该说法,因为它很可能是错误的。MIDI 鼓和 MIDI 键盘几乎肯定都是低速设备,因此它们最多会消耗高速集线器不到 1% 的带宽(2*1 Mbit/s / 480 Mbit/s * 100% = 0.4%)。

事实上,集线器的存在将带来延迟,其数量级为几十微秒对于低速集线器或数百纳秒对于高速集线器。在后一种情况下,一旦添加 MIDI 软件引入的延迟,此延迟就会消失。

此外,USB 协议支持传输优先级(见中断传输),这将允许 MIDI 设备与同一总线上的硬盘或扫描仪共存,而不会对其传输速度或延迟产生太大影响。但是,我不会发表任何声明,因为我对 MIDI 设备并不特别熟悉。

答案3

简短的回答是你真的想要一个 Multi-TT 集线器用于此应用程序,其中 2 个或更多 USB 设备可能为 12 Mbit/秒。在 Amazon、Newegg 或其他网站上搜索“Multi-TT”以查找这些集线器。

不幸的是,这个重要的技术细节很少被提及。大多数集线器使用更便宜的单 TT 设计。优质的多 TT 集线器很少宣传具有此功能,甚至包装上都没有标注。遗憾的是,大多数人可能从未听说过 TT,这可能就是为什么营销人员不愿意告诉你他们的集线器使用哪种设计的原因。

您可以使用 Windows 设备管理器检查您的集线器是否具有此功能。在“高级”选项卡中查找“集线器具有多个 TT”字样。

设备管理器屏幕截图

在 Linux 上,可以使用“lsusb -v | grep TT”检查集线器类型。除了 Apple 在其 Xcode 开发工具中发布的“USB Prober”实用程序外,我不知道在 Macintosh 上进行检查的任何简单方法。

TT 代表事务转换器。其细节非常复杂,完整记录在 USB 规范的第 11 章中,可从 www.usb.org 免费下载。但简而言之,TT 可将 PC 的 480 MBit/sec 速度转换为较慢的 12 或 1.5 MBit/sec 速度。

通常,当您演奏这些乐器时,它们的控制器会生成 MIDI 消息并将其打包到内存缓冲区中,等待您的 PC 请求数据。当您的 PC 直接连接时,它会向您的乐器发送一条称为 IN 令牌的消息。您的乐器可以通过两种方式响应 IN 令牌,要么是数据包,要么是 NAK 令牌(表示没有数据)。您的 PC 会非常迅速地发送这些 IN 令牌,因此结果是您的音乐事件几乎可以立即作为 MIDI 消息传递。

但是,当您的 12 MBit/sec MIDI 设备通过 USB 2.0 HUB 连接时,会发生非常不同的通信,所有通信速度均为 480 MBit/sec。您的 PC 实际上与集线器中的事务转换器进行通信。它发送 2 条消息。首先,SSPLIT(启动拆分事务)消息被发送到 TT。 如果 TT 不忙,它会发送一个确认。然后 TT 以较慢的 12 MBit/秒的速度将 IN 令牌传输到您的 MIDI 键盘。同时,您的 PC 能够以 480 Mbit/秒的速度与其他设备通信。您的 MIDI 键盘无法判断 IN 令牌是直接来自您的 PC 还是来自集线器的 TT。它所做的与连接到您的 PC 时完全相同。集线器内的 TT 接收 NAK 或 DATA 响应。在此过程中,您的 PC 开始向集线器的 TT 发送 CSPLIT(完全拆分事务)消息。如果 TT 仍忙于以 12 Mbit/秒的速度进行通信,则 TT 使用特殊的 NYET 令牌进行回复,否则使用来自您的键盘的 NAK 或 DATA。

如果您同时连接了 MIDI 键盘和 MIDI 鼓,如果您的 PC 希望发送 SSPLIT 消息以要求 TT 与鼓通信,但 TT 正忙于与键盘通信,会发生什么情况?只有一个 TT,集线器可能会回复 NYET 以响应新的 SSPLIT 请求,因为它正忙于以 12 MBit/秒的速度执行 IN+DATA。您肯定不希望出现这种情况!

多 TT 集线器在每个下游端口(您插入设备)上都有一个专用 TT。有了多个 TT,集线器始终能够接受 SSPLIT 请求,即使其他 TT 正忙于与其他下游设备通信。 如果只有一个 TT,即使有足够的 480 MBit/秒带宽,您的 PC 也可能需要等待,因为集线器在不同速度之间一次转换多条消息的能力有限。

这段描述略过了 TT 处理的许多重要 USB 时序问题,但重点是 USB 2.0 集线器可以使用两种截然不同的设计。您确实应该避免使用更便宜的单 TT 集线器。

这些答案的其他地方提到了 USB 3.0 和 3.1 速度。但集线器中的 TT 永远不会在 5 或 10 千兆位速度和 480、12 或 1.5 速度之间转换。相反,USB 3.0 和 3.1 集线器作为一对集线器运行。千兆位信号在较新的 USB 连接器中有自己的专用引脚,这些引脚连接到仅以 5 或 10 Gbit/秒速度运行的集线器。原始引脚上同时发生 480 Mbit/秒通信,因此 12 和 1.5 MBit/秒设备由 TT 转换为 480 Mbit/秒,但永远不会转换为 5 或 10 Gbit/秒。

其他地方也提到了“低速”,从技术上讲,在 USB 术语中,它意味着 1.5 Mbit/秒,但在日常对话中可能意味着 1.5 或 12 Mbit/秒。12 Mbit/秒在 USB 术语中称为“全速”。USB MIDI 协议从技术上讲是“音频类规范”的一部分,它使用“批量”协议(不是中断协议,如另一个答案所述)。USB 规范不允许 1.5 Mbit/sec 速度的批量传输协议。因此,除非 USB MIDI 设备严重违反 USB 速度,否则它的速度将始终至少为 12 Mbit/sec。USB MIDI 的速度可能是 480 Mbit/sec,在这种情况下 TT 不适用。但当今绝大多数 USB MIDI 产品的速度仍为 12 Mbit/sec。

那么你真的如果您希望最大限度地提高性能,请确保您的 USB 集线器是 Multi-TT 类型。

答案4

这只是我的情况,当多个设备连接到 USB 3.0 集线器时,它的速度就会变慢。

我有两套相同的设备:SATA III 转 USB3.1 Gen2 Type C 外壳,配备 480`GB SSD。

如果我将 SSD 放入 SATA III 端口,Linuxdd命令读取速度将超过 500 MiB/s。

如果我将 SSD 放入 SATA III 至 USB 3.1 Gen2 Type C 外壳中,dd无论我使用哪一组,Linux 命令读取速度都会接近 413MiB/s。

奇怪的是,当我将两个外壳都插入 USB 3.0 并要求 Linux 从两个外壳读取数据(无论是 LVM 条带、RAID0 还是两个并发dd命令)时,它只能以 2x150=300 MiB/s 的速度读取。

因此,当两者都插入时,我的速度会损失接近 413-300=113 MiB/s。

换句话说:

  • 将一个 SSD 连接到 USB 3 HUB,读取速度达到 413 MiB/s
  • 将两个 SSD 连接到 USB 3 HUB,读取速度为 150+150=300 MiB/s
  • 当两个 SSD 连接到 USB 3 集线器时,预期读取速度(每个 SSD)大约为 413/2=206 MiB/s,但每个 SSD 的速度仅为 150 MiB/s 左右,而不是假设的 >200 MiB/s。

我开始认为问题在于 USB 3 Hub 协议,该协议用于交替为两个驱动器提供数据带宽,这增加了巨大的开销。

因此,我可以确认,当同时连接多个 USB 3 集线器时,它会使一个 SSD 的速度远远超过最大带宽。

另外,我用一个 SSD 和一个非常慢(低于 50 MiB/s)的 USB 3.0 棒进行了测试,USB Hub 3 的组合读取速度下降到 263 MiB/s,所以如果我插入任何其他 USB 存储设备,我可以确认组合读取速度大约为 100 MiB/s。

还有更糟糕的是,我插入鼠标(或键盘),SSD 的读取速度也接近 313 MiB/s,我拔下鼠标/键盘,SSD 的读取速度又回到 413 MiB/s,因此,仅仅因为连接了鼠标(并正在使用),读取速度又损失了接近 100 MiB/s;如果我不移动鼠标,读取速度就会回到 413 MiB/s。

因此,当不止一个设备连接到集线器(并正在使用)时,集线器会导致组合传输速率的读取速度大幅下降(接近 100 MiB/s),无论我连接什么其他类型的设备,只要同时有多个设备工作,我得到的组合读取速度比仅使用一个设备时低接近 100 MiB/s。

我还用三种设备进行了测试:SSD + 鼠标 + 键盘,速度仍然接近,大约 100 MiB/s。

如果我只从一个 SSD 读取,但两个都连接了,那么我也会得到接近 413 MiB/s 的速度。

USB 3.0 集线器的价格约为 20 欧元,并不便宜。

结论:当同时连接(并传输)多个设备时,USB 集线器 3.0 会损失大量 MiB/s 的传输速度,谁知道为什么!可能是因为它将传输时间除以设备数量(完全错误),也可能是因为它在循环设备方面有巨大的开销,等等。

希望这可以帮助某人识别问题,所有测试都是在 Linux Live SystemRescueCD(最新版本)下完成的,使用dd状态=进度的命令,块大小为一兆字节,计数等于一千(总共读取 1GiB),目标设备/dev/null

我计划(当我有钱的时候)购买另一个 USB 3.x 集线器,这次是 3.1 Gen 2,以检查是否发生同样的情况,或者是该品牌的固件算法较差。

相关内容