我想通过 1Gbit 网络以最高效的方式将多 TB 目录传输到 nfs 挂载目录(可能是限制因素)
3 个选项 -
- tar 并压缩,然后复制
- 复制,然后 tar 并压缩
- tar | 压缩
在我看来,#3 显然是最高效的,因为我只读取和写入数据一次。不幸的是,我的命令 (tar -c dir | pigz > /mnt/nfs/dir.tgz ) 似乎先 tar 一段时间,然后 zip 一段时间,然后 tar 一段时间……并且网络大部分时间处于空闲状态,然后 CPU 处于空闲状态。
我是否错过了一些选项?
PS我的问题似乎与这个问题但这并没有答案,并没有真正提出关于网络和 CPU 饱和度交替的确切问题。
答案1
您可能忘记了这样一个事实:在 UNIX/Linux 中,一个进程每次只能执行一个 BLOCKING I/O 操作。tar 或 compress 函数中不包含并发读取或写入操作。这两个进程在其 I/O 调用期间也不进行任何数据处理。
有一些缓冲过滤器尝试通过使用共享内存和两个进程(一个用于读取,另一个用于写入)来减轻这种影响。
在这种模型下,您必须重新分析您的选项以确定瓶颈和实际的系统运行顺序。