![为什么在 4 个不同的磁盘上运行 2 个 dd 进程时,磁盘读/写似乎只有一半?](https://linux22.com/image/1624235/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%204%20%E4%B8%AA%E4%B8%8D%E5%90%8C%E7%9A%84%E7%A3%81%E7%9B%98%E4%B8%8A%E8%BF%90%E8%A1%8C%202%20%E4%B8%AA%20dd%20%E8%BF%9B%E7%A8%8B%E6%97%B6%EF%BC%8C%E7%A3%81%E7%9B%98%E8%AF%BB%2F%E5%86%99%E4%BC%BC%E4%B9%8E%E5%8F%AA%E6%9C%89%E4%B8%80%E5%8D%8A%EF%BC%9F.png)
我正在尝试使用 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/秒的速度。请注意,插入单独的卡中,而不是同一卡上的单独端口,连接到同一总线。