![rsync --整个文件与增量传输协议 CPU 使用率和复制速度](https://linux22.com/image/187680/rsync%20--%E6%95%B4%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%8E%E5%A2%9E%E9%87%8F%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE%20CPU%20%E4%BD%BF%E7%94%A8%E7%8E%87%E5%92%8C%E5%A4%8D%E5%88%B6%E9%80%9F%E5%BA%A6.png)
我正在测试通过局域网复制文件的速度。我已经生成了 1GB 的 /dev/urandom 数据,并在超过 1Gbps 的网络上复制到另一台机器。
rsync 传输速度(仅 -a 选项)约为 17MB/s 附加 -W 的 rsync 传输速度稳定为 110MB/s
我的特殊情况是,我希望整个文件都被复制,因为我每次在复制之前都会生成它。如果没有 -a 选项,总共 4 个核心中的一个将显示 100% 使用率。我认为这是因为 rsync 计算要传输的增量,这似乎是瓶颈。
问题:是否有可能使增量计算成为“多核”?现在仅使用了 25% 的 CPU。
答案1
对于一个文件,您不会获得任何带宽优化,也不会使用多核进行计算,但是当有更多文件时,尤其是数千个文件,其中一些只需要更新,您可以使用 xargs,如下所示
ls /your/local/folder/ | xargs -n1 -P4 -I% rsync -Pa % ursrv.com:/remote/folder/
此命令行将列出所有文件夹/文件,然后运行 4 个 rsync 实例,并将输入参数作为文件夹或文件。这不是直接多核,但会运行 rsync 的多个实例,这肯定会更有效地加载您的 CPU。
答案2
最初,用户创建一个单个文件和随机数据在源服务器上:
Delta Transfer 使用一种算法来更新一台计算机上的文件,使其与另一台远程计算机上的文件相同。该算法识别源文件中与目标文件中某些部分相同的部分,并仅发送无法以这种方式匹配的部分。实际上,该算法计算一组差异,而无需将两个文件放在同一台机器上。通常,当两台机器通过低带宽、高延迟的通信链路连接时,Delta Transfer 工作得非常好。在这种情况下,两台机器之间的连接是整个系统的主要瓶颈。通过显着减少通过链路发送的字节量,操作效率将大大提高。 --源无处不在
用户在远程服务器上没有相应文件的情况下进行传输,因此复制文件而不同步,初始传输--whole-file
效率更高。
为了以 CPU 周期换取网络开销,我建议使用-z
压缩选项。压缩的类型和级别也可以调整:
--compress-choice= |
--compress-level= |
---|---|
兹标准 | 0-9 |
lz4 | 0-9 |
兹利布克斯 | 0-9 |
兹库 | 0-9 |
在支持的文件系统上,与用户的随机数据不同,公共数据可以通过设置开关保存为稀疏文件--sparse
,然后在后续的 rsync 中,将--inplace
开关设置为就地写入。
添加--update
开关会跳过接收器上较新的文件,从而节省浪费的写入。
该--append
开关允许用户将数据附加到较短的文件中。
以下设置可以提供帮助增加整体的冗长性测试期间:
--verbose, -v increase verbosity
--stats give some file-transfer stats
--human-readable, -h output numbers in a human-readable format
--progress show progress during transfer