Tre*_*ith 5 performance networking latency file-transfer
我正在尝试通过高延迟和高带宽链接传输文件。不幸的是,当我使用rsync传输速度时,仅占用了我可用带宽的一小部分。我的总传输时间比我预期的要长得多(即传输时间=字节/每秒字节可用带宽)!
通过高延迟和高带宽链接传输文件的最快方法是什么[1]?
因此,例如:
[1]即利用大部分可用带宽
在高延迟和高带宽情况下使用时rsync,您的每个连接传输速度将比您的可用带宽慢[1]。对于给出的示例,您的预期传输速度将为 56.25 KiB 或小于可用带宽的 10%。
rsync一种解决方案是并行运行 N 个进程:
#!/bin/bash
# tar up the files
tar -cvzf x.tar ${list_of_files}
# [optional]
# compute the md5sum
md5sum x.tar > x.tar.md5sum
# break the large tar file into N files (i.e. x.tar would become x.tar.1 ... x.tar.N)
# TODO
# start N `rsync` processes in parallel
for ((i=1;i<=N;i++)); do rsync -avzh x.tar.${i} ${destination} & done
# wait for the transfers to finish
wait && echo "success" || echo "fail" && exit 1
# stitch the N files back together into x.tar
TODO
# [optional... but gives everyone a nice warm and fuzzy]
# copy the md5sum and verify your files (even though `rsync` already did so)
scp x.tar.md5sum ${destination}
ssh ${destination_machine} "cd ${path} && md5sum -c x.tar.md5sum && echo 'PASS (files verified with md5sum)' || echo 'FAIL (file verification failed md5sum)' && exit 1"
# done!
Run Code Online (Sandbox Code Playgroud)
[1] 为什么在这个例子中你的传输速度很慢?
一句话:带宽-延迟乘积(实际上是三个词)
这是高延迟和高带宽链路的示例。rsync有些人可能会使用诸如传输数据之类的工具。如果您运行一个实例rsync(或类似的也使用 TCP 或类似 TCP 协议的实例),您将不会利用可用带宽。
速度减慢的原因与 TCP(或类似 TCP 的协议)的往返性质有关,在发送更多数据之前需要 ACK。该问题正式称为带宽延迟积。每个连接速度都会受到延迟的限制,而不是带宽的限制。
具体而言,对于给出的示例,理论速度将为 56.25 KiB 或小于可用带宽的 10%。
限制是针对每个连接的。因此,仅使用一个 rsync进行文件传输并不能充分利用您的带宽。
解决方案一:
使用不同的程序,不使用类似 TCP 的协议,但仍然通过其他方式保证您的数据(快速谷歌搜索类似于uftp通过 UDP 协议而不是 TCP 传输数据)。不幸的uftp是,截至撰写本文时,许多发行版存储库中仍然没有。
解决方案2:
继续使用其中之一rsync并更改两侧的 TCP 网络参数,但这需要我目前不具备的专业知识。
解决方案3:
rsync如本问题开头所述,并行运行多个进程。
| 归档时间: |
|
| 查看次数: |
3710 次 |
| 最近记录: |