为什么tar -c dir | pigz> /mnt/nfs/dir.tgz使用network,然后cpu循环而不是同时使用两个(有一个瓶颈)

我想通过1Gbitnetworking将一个多TB的目录最有效地传输到nfs挂载目录(可能是限制因素)

3个选项 –

  1. tar并压缩到位,然后复制
  2. 复制,然后焦油和压缩
  3. tar | 压缩

对我来说看起来很明显,#3应该是最有效率的,因为我只是一次读写数据。 不幸的是,我的命令(tar -c dir | pigz> /mnt/nfs/dir.tgz)似乎tar了一段时间,然后压缩一段时间,然后焦油一段时间…和networking闲置大块的时间,那么CPU是闲置的。

我错过了一些select吗?

PS我的问题似乎与这个问题有关,但没有答案,并没有真正问清楚networking和CPU饱和之间交替的确切问题。

您可能会忘记,在UNIX / Linux中,一个进程一次只能执行一次BLOCKING I / O操作。 tar或compress函数中没有并发的读或写操作。 在I / O调用期间,在这两个进程中也没有任何数据处理。

有缓冲filter试图通过使用共享内存和2个进程来减轻这种影响:一个读取,另一个写入。

在这种模式下,您必须重新分析您的选项以确定瓶颈和实际的系统操作顺序。