tar 写入磁盘的性能

tar 写入磁盘的性能

当写入磁盘(SATA)时,我注意到 tar 似乎对性能有很大影响。我正尝试从我的客户端(OSX)通过我的本地网络复制一个相对较大的 .dmg 文件(556MB),作为备份到我的服务器(debian)。尝试典型方法的结果在传输速度、客户端吞吐量和服务器 I/O 方面都相当糟糕

对于 I/O 监控,iostat -Ndx 1服务器iotop -oa上使用了

scp:服务器上客户端 I/O 的~18 minutes吞吐量 ()~500KB/s-540KB/s~800kB/s-1100kB/stime scp <my_file> user@host:/path/to/dir/

sftp:服务器上客户端 I/O~9 minutes吞吐量提高约 50% ,但由于我使用了 cyberduck gui,因此无法编写脚本~1MB/s~1500kB/s-2000kB/s

进一步研究发现这个帖子因此我尝试了以下方法:

在客户端上:(
tar -cf - <my_file> | pv -s $(du -sb <my_file> | awk '{print $1}') | nc -l 8888

在服务器上:(
nc <source_ip> 8888 | tar xf -

笔记:我放弃了pigz使用,因为它似乎导致客户端的吞吐量0 Kb/s在传输过程中频繁下降。

这产生了最差的结果,~33 minutes客户端的吞吐量为~300-400KB/s,服务器的 I/O~800-1200KB/s分别在最后 5 分钟内下降到约~200KB/s和 I/O ~800KB/s

为了确保不是网络问题,我将服务器修改为(nc <source_ip> 8888 > /dev/null),传输时间降至,~2minutes客户端吞吐量为~6-7MB/s

通过在手册页中进行更多搜索,我决定将块大小(-b, --blocking-factor)修改为更高的值,即 128、512、1024 等……这产生了更好的写入性能,与-b1024重定向测试相当/dev/null。手册页似乎相当过时,仅提到与写入磁带有关的此选项的更改,而未提及现代媒体。这样做是否会对数据完整性产生负面影响?通过此修改,并根据手册页,我假设 tar 试图以 512 字节的块写入数据,因此通过将其修改为 512*1024,即 512KB 的块,我不知道操作系统写入此内容是否会有问题。

編輯:

最初是在电脑之外发布的,所以我更新了实际使用的命令,提供了更准确的时间,并修复了拼写错误。还尝试了下面建议的 scp 加密,并包含了结果

scp:服务器上客户端 I/O 的~17.5 minutes吞吐量 ()~500KB/s-540KB/s~1100kB/s-1500kB/s
scp -C <my_file> user@host:/path/to/dir/

修改块大小后:~42 seconds客户端的吞吐量和服务器上的 I/O~15MB/s

客户: (tar --disable-copyfile -cf - <my_file> | pv -s $(du <my_file> | awk '{size = $1 * 512} END {print size}') | nc -l 8888

服务器: (nc 10.0.1.28 8888 | tar -b1024 -xf -

答案1

根据文件的内容,scp如果通过添加选项启用压缩,您可能会获得更短的方法时间-C

对于这种nc方法,您可以tar从图片中删除,因为您只传输一个文件(tar其主要功能是将多个目录和文件复用/解复用到单个数据流中):

nc -l 8888 < <my_file>
nc <source_ip> 8888 > <my_file_copy>

nc也可以尝试使用以下方法进行压缩:

cat <my_file> | gzip - | nc -l 8888
nc <source_ip> 8888 | zcat - > <my_file_copy>

由于加密/解密已经不存在,因此总体而言速度nc可能更快。scp

如果你仍然想使用,tar那么是的,阻塞因素非常重要。参见文档此问答例如。顺便说一下,tar 的块大小是 512字节, 不是知识库

相关内容