为什么在 4 个不同的磁盘上运行 2 个 dd 进程时,磁盘读/写似乎只有一半?

为什么在 4 个不同的磁盘上运行 2 个 dd 进程时,磁盘读/写似乎只有一半?

我正在尝试使用 ddrescue 在我的 debian 文件服务器上克隆 2 个外部火线磁盘。

我在两个终端运行两个进程,如下所示:

sudo ddrescue -d -r3 /dev/sdx'/mnt/disk1/image1.img' '/mnt/disk1/image.loggfile'

sudo ddrescue -d -r3 /dev/sdz '/mnt/disk2/image2.img' '/mnt/disk2/image2.loggfile'

当我启动第二个进程时,第一个进程的速度减慢了一半(大约 15 M/s)。这些进程正在读取和写入不同的磁盘,所以我搞不清楚瓶颈在哪里?谢谢

答案1

您的 Firewire 总线似乎限制为 30 MByte/秒。

2020 年 5 月 22 日 17:43 CEST:由 Hennes 的评论触发:您正在运行的总线与采用点对点连接的现代接口的运行方式不同。尽管运行不同的主轴,但数据必须共享 Firewire 总线的有限带宽。

答案2

IEEE1394(又名 Firewire)是一种共享串行总线。它支持热插拔,从所有插入的设备中选出最佳总线主控。它会选择最佳的同步管理器。它支持异步数据传输,并保留部分带宽,因此您可以获得保证无故障的音频或视频流。等等。所有这些在推出时都非常出色,我很乐意为它编写设备驱动程序,以便在飞利浦进行测试。

但忽略那些找到的记忆,只有一件东西对你来说真正重要:它是共享串行总线。

共享,因此如果一个设备正在通信,那么所有其他设备都必须监听。

如果您有两个磁盘,那么只有一个磁盘可以发送数据,或者两个磁盘有一半的时间可以发送数据。

因此,如果您有一个带宽为 400mbit 的主机适配器,那么您可以在该单个总线上推送最多 400mbit。例如

  • 1x 400 mbit,带一个活动设备(总计:400 mbit)
  • 2x 200 mbit,带两个有源设备(总计:400 mbit)
  • 3x 133 mbit,带三个活动设备(总计:400 mbit)
  • 4x 100 mbit,带三个活动设备(总计:400 mbit)

(是的,从技术上讲,一个驱动器比另一个驱动器获得更多的带宽是可能的。例如,当一个驱动器的速度比可用带宽慢时。但对于 HDD 来说,这种情况不太可能发生。)

数据传输总量保持400mbit。

电缆上的 400 mbit 信号传输不等于 400 mbit 数据传输。存在开销(通常约为 1/5,因为 8b:10B 转换)。这意味着最大理论带宽将接近 40MB/秒。

现在您通常不会得到这种结果。相比之下,USB 使用类似的东西。USB2 有 480 Mbit/秒,信号传输速度快 20%,良好的磁盘到计算机速度为 35 MB/秒。您在此处存档的速度非常相似,为 30MB/秒。但该总线上的总速度仍为 30 Mbyte/秒。或者当您插入第二个并开始从中读取最大速度时看到的 2x15 MByte(再次为 30 MB/秒)。


这是共享总线的固有特征。以太网(同轴电缆)、以太网(粗以太网)、USB、Firewire、PCI 等都存在这种现象,而加快速度的唯一选择是拥有更多独立总线。

例如,如果您添加了第二个基于 PCI-e 的 IEEE1394 主机适配器,则可以将它们两个都插入计算机上的单独卡中,并在两个卡上获得 30Mb/秒的速度。请注意,插入单独的卡中,而不是同一卡上的单独端口,连接到同一总线。

相关内容