S*A 发帖数: 7142 | 1 我想说的是,很多东西理论上看上去
容易,实际组合到一起就会有事先难以
预计的性能问题。
这是一个很实际的问题,我想把硬盘上
的一个磁盘image 克隆到另外一部机器上。
假设现在有两部机器 hosta, hostb,中间用
用 Gigabit 的网卡连接。现在想把 hosta:/dev/sda
复制到 hostb:/dev/sda 越快越好。硬盘可以支持
100MB 左右顺序读写,网卡可以支持 125MB 的
传输。
之所以用 /dev/sda 这种原始硬盘而不用文件是,
这样没有文件系统的 overhead.
我现在的做法是,
在 hosta 上用 nc 起一个 socket 发送文件。
# dd if=/dev/sda bs=1M | nc --send-only -l 8888
在 hostb 上用 nc 收 socket 写文件。
# nc --recv-only hosta 8888 | dd of=/dev/sda bs=1M
这样可以用差不多 30MB/s 的速度复制。
但是如果 hostb 上用
nc hosta 8888 | dd of=/dev/null
也就是不写盘,可以有接近 100MB/s 的速度。这说明
读盘和网络转的速度是可以占用大部分 gigabit 带宽。
如果 hostb 上用 dd if=/dev/zero of=/dev/sda
这个写盘速度就是同样有差不多 100MB 左右。
完全顺序写。这个也大致符合硬盘的评测。
但是组合一下,虽然 netcat 和 dd 都是不同 process,
占用不同 core, CPU 也远远没有满,同时就只有 30MB
了。谁给解释一下? 还有什么更好的方法? |
d***a 发帖数: 13752 | 2 这是因为接受端的pipe缓冲区不足
nc和dd之间的pipe缓冲区满了
然后造成TCP/IP反复启停,网络速度就降下来了
解决的办法是,在下来的命令中
nc --recv-only hosta 8888 | dd of=/dev/sda bs=1M
在|中再加一个mbuffer或buffer命令 |
w***g 发帖数: 5958 | 3 第一次听到 mbuffer,受教了。
【在 d***a 的大作中提到】 : 这是因为接受端的pipe缓冲区不足 : nc和dd之间的pipe缓冲区满了 : 然后造成TCP/IP反复启停,网络速度就降下来了 : 解决的办法是,在下来的命令中 : nc --recv-only hosta 8888 | dd of=/dev/sda bs=1M : 在|中再加一个mbuffer或buffer命令
|
S*A 发帖数: 7142 | 4 赞,这个 mbuffer 还不错,好像专门写来网络备份的。
放在 nc 和 dd 之间作用不大。
mbuffer 本身支持网络读写。
我现在这样干:
接受端
mbuffer -s 1M -m 10M -I 8888 -o /dev/sda
发送端
mbuffer -s 1M -m 10M -i /dev/sda -O hostb:8888
这样可以推送到 73MB/s 的确快多了。很爽。
多谢。 |
d***a 发帖数: 13752 | 5 赞钻研!这样做更好。
【在 S*A 的大作中提到】 : 赞,这个 mbuffer 还不错,好像专门写来网络备份的。 : 放在 nc 和 dd 之间作用不大。 : mbuffer 本身支持网络读写。 : 我现在这样干: : 接受端 : mbuffer -s 1M -m 10M -I 8888 -o /dev/sda : 发送端 : mbuffer -s 1M -m 10M -i /dev/sda -O hostb:8888 : 这样可以推送到 73MB/s 的确快多了。很爽。 : 多谢。
|
t***t 发帖数: 6066 | 6 不明觉厉。
我只会java, windows.
【在 d***a 的大作中提到】 : 赞钻研!这样做更好。
|
z********0 发帖数: 9013 | 7 why not iSCSI, SAN protocol? like ATA over Ethernet? |
S*A 发帖数: 7142 | 8 没有限定协议,快就行了。你知道有
比较快的 iscsi 软件推荐,比较容易用?
mbuffer 就是一行启动,很简单。
因为73M已经接近硬盘的极限了,
所以更加快的余地不大了。
【在 z********0 的大作中提到】 : why not iSCSI, SAN protocol? like ATA over Ethernet?
|
a***n 发帖数: 538 | 9 Rsync不行吗?
【在 S*A 的大作中提到】 : 没有限定协议,快就行了。你知道有 : 比较快的 iscsi 软件推荐,比较容易用? : mbuffer 就是一行启动,很简单。 : 因为73M已经接近硬盘的极限了, : 所以更加快的余地不大了。
|
z********0 发帖数: 9013 | 10 AoE runs on layer 2, less network protocol overhead
【在 S*A 的大作中提到】 : 没有限定协议,快就行了。你知道有 : 比较快的 iscsi 软件推荐,比较容易用? : mbuffer 就是一行启动,很简单。 : 因为73M已经接近硬盘的极限了, : 所以更加快的余地不大了。
|
|
|
s*****m 发帖数: 8094 | 11 累
【在 S*A 的大作中提到】 : 赞,这个 mbuffer 还不错,好像专门写来网络备份的。 : 放在 nc 和 dd 之间作用不大。 : mbuffer 本身支持网络读写。 : 我现在这样干: : 接受端 : mbuffer -s 1M -m 10M -I 8888 -o /dev/sda : 发送端 : mbuffer -s 1M -m 10M -i /dev/sda -O hostb:8888 : 这样可以推送到 73MB/s 的确快多了。很爽。 : 多谢。
|
S*A 发帖数: 7142 | 12 Rsync 很慢啊,能上 10MB/s 就不错了。
【在 a***n 的大作中提到】 : Rsync不行吗?
|
S*A 发帖数: 7142 | 13 前面的分析,网络不是瓶颈,只要不写盘,可以100MB的速度
传输。所以省一点点网络没有很大意义。这个关键问题网络
传输和写盘之间的调度问题。
【在 z********0 的大作中提到】 : AoE runs on layer 2, less network protocol overhead
|
a***n 发帖数: 538 | 14 是不是很小的文件啊。
【在 S*A 的大作中提到】 : Rsync 很慢啊,能上 10MB/s 就不错了。
|
S*A 发帖数: 7142 | 15 拷贝整个硬盘分区,动不动就是几十G 几百 G。
和文件系统里文件大小没有关系。
相当于网络 ghost image.
【在 a***n 的大作中提到】 : 是不是很小的文件啊。
|