需求
前几天编译了不少文件,特别是gccgo、内核,文件数量多、文件较小。若直接拷贝耗时过长而且容易出错,故采用打包压缩方式。默认采用tar -czvf gccgo.tgz gccgo来压缩文件,发现仅仅单核工作,对于多核的aarch64服务器非常不友好及浪费资源。如何让多核同时工作是接下来需要讲解的内容。
环境如下:
[root@cp1 ~]# uname -a
Linux cp1 4.19.90-23.8.v2101.ky10.aarch64 #1 SMP Mon May 17 17:07:38 CST 2021 aarch64 aarch64 aarch64 GNU/Linux
[root@cp1 ~]# cat /etc/lsb-release
DISTRIB_ID=Kylin
DISTRIB_RELEASE=V10
DISTRIB_CODENAME=juniper
DISTRIB_DESCRIPTION="Kylin V10"
DISTRIB_KYLIN_RELEASE=V10
DISTRIB_VERSION_TYPE=enterprise
DISTRIB_VERSION_MODE=normal
[root@cp1 ~]# lscpu
架构: aarch64
CPU 运行模式: 64-bit
字节序: Little Endian
CPU: 64
在线 CPU 列表: 0-63
每个核的线程数: 1
每个座的核数: 64
座: 1
NUMA 节点: 8
厂商 ID: Phytium
型号: 2
型号名称: FT-2000+/64
步进: 0x1
BogoMIPS: 100.00
L1d 缓存: 2 MiB
L1i 缓存: 2 MiB
L2 缓存: 256 MiB
NUMA 节点0 CPU: 0-7
NUMA 节点1 CPU: 8-15
NUMA 节点2 CPU: 16-23
NUMA 节点3 CPU: 24-31
NUMA 节点4 CPU: 32-39
NUMA 节点5 CPU: 40-47
NUMA 节点6 CPU: 48-55
NUMA 节点7 CPU: 56-63
压缩
习惯使用gzip进行压缩,多核压缩我们采用它的并行版本pigz(pigz is a parallel implementation of gzip which utilizes multiple cores),流行的多线程归档器还有pbzip2,安装软件包:
yum install pigz.aarch64
以gccgo文件夹压缩为例,如下
- 使用tar标志“–use-compress-program =”
tar -c --use-compress-program=pigz -f gccgo.tgz gccgo
- 通过pigz管道
tar cf - gccgo| pigz -9 -p 64 > gccgo.tgz
压缩:pigz -9: 指定压缩级别(9最高,1最低),-p: 线程数
多核压缩状态下cpu的使用率如下:
解压缩:
tar --use-compress-program=pigz -xpf gccgo.tgz
解压缩通过cpu看不出多核效果,亦可采用常规解压缩方式
tar -xf gccgo.tgz
参考文献:
https://www.itranslater.com/qa/details/2122665251421291520
https://code-examples.net/zh-CN/q/bbe29a
https://www.codenong.com/12313242/