微博上kevin_prajna提了一个问题:“求Linux下一打包工具,需求:能把两个10G的文件打包成一个文件,时间在1分钟之内能接受!”。 暂且作答一下吧。首先问题是求解工具,那么我们忽略IO问题,采用内存盘来解决, 在公司一台128G内存的机器上: mkdir /mnt/test
mount -t ramfs none /mnt/test
cd /mnt/test
生成一个小脚本,生成两个10G的文件: #!/bin/bash
for (( i = ; i < ; i++)); do
echo $i
dd if=/dev/zero of=file$i.bin bs=1M count=
done;
生成测试文件: time ./test.sh <<< + records in
+ records out
bytes ( GB) copied, 4.78903 s, 2.2 GB/s + records in
+ records out
bytes ( GB) copied, 4.92947 s, 2.1 GB/s
./test.sh .00s user .68s system % cpu 9.731 total
测试结果,生成两个10G文件,消耗了9.731秒 采用tar打包工具测试: time tar cvf out.bin file* <<<
file0.bin
file1.bin
tar cvf out.bin file* .40s user .90s system % cpu 14.353 total
采用 tar打包这两个文件,并且写入 out.bin文件,消耗了 .353秒, 完全满足kevin_prajna的要求。 然后我们用cpio来测试,由于cpio对10G这样的文件打包有bug,会报错,所以我们用20个1G文件测试: #!/bin/bash
for (( i = ; i < ; i++)); do
echo $i
dd if=/dev/zero of=file$i.bin bs=1M count=
done;
生成20个1G测试文件,用了 .806秒 使用tar对这20个1G文件打包,用了13. 秒 cpio的测试结果: # time ls file*|cpio -o > out.bin <<<
blocks
ls --color=tty file* .00s user .00s system % cpu 0.002 total
cpio -o > out.bin .31s user .61s system % cpu 44.029 total
cpio打包这20个1G文件消耗了44.029秒,速度相对tar,还是慢了好多。 测试环境: Dell R710, *Xeon E5620, 128G RAM
OS: Ubuntu 12.04 x86_64 从上面也可以看出,现在CPU和工具是很强悍的,弱爆的是磁盘IO,这是要大把花银子的。