2014-06-24 143 views
1

如何使用所有的CPU内核在我的服务器(有4个内核)的Linux Debian的OpenVZ的过度到gzip压缩更快一个大文件多CPU核心gzip压缩大文件

我试图使用这些命令,但我不能把拼在一起核 CORES=$(grep -c '^processor' /proc/cpuinfo)

split -b100 file.big

这款本作拆分大文件用gzip的

GET号命令与多个核心 find /source -type f -print0 | xargs -0 -n 1 -P $CORES gzip --best

我不知道这是否是op的最佳方式大文件timize gzip的过程..

回答

2

使用pigz,一个并行的gzip实现。

parallelgzip不同,pigz产生单个gzip流。

+1

您是否介意解释为什么您认为单流有利? –

+1

gzip命令行实用程序将正确处理串联的gzip流,但大多数其他软件不会。大多数其他软件将停止在第一个gzip流的末尾,包括几乎所有需要gzip内容编码的网页浏览器。 –

+0

感谢您的解释 - 尽管如果文件足够大以保证多核处理,它们不太可能用于Web使用。 –

1

尝试GNU并行

cat bigfile | parallel --pipe --recend '' -k gzip -9 >bigfile.gz 

这将使用所有的内核并行gzip压缩。

通过比较的方式,在我的Mac OSX运行小牛的,并且使用固态磁盘6.4GB文件,这个命令

time gzip -9 <bigger >/dev/null 

需要4个分钟时间23S,并使用1-2的CPU在50%左右。

而低于

time cat bigger | parallel --pipe --recend '' -k gzip -9 >/dev/null 

在GNU并行版本需要1分44秒,并保持所有8个核心80 +%忙。一个非常显着的差异,GNU Parallel在简单方法的40%时间内运行。

+0

在我的服务器(OpenVZ下)不存在GNU并行!但只有并行命令的moreutils包! – StefanoCudini

+0

'(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3)| bash'将在10秒内安装GNU Parallel。使用版本20140622,您可以使用--pipe-part,如果greater.file是一个文件而不是一个管道,则该部分更高效。 –