Computer >> 컴퓨터 >  >> 시스템 >> Linux

tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법

tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법

대용량 데이터를 tar로 압축해 본 경험이 있다면 그 과정이 얼마나 답답한지 잘 알 것입니다. 진행 속도가 너무 느려서 Ctrl + C를 눌러 작업을 중단하고 포기하고 싶어질 때가 많죠. 하지만 tar가 활용할 수 있는 별도의 도구들이 있으며, 이를 사용하면 오늘날의 멀티코어 CPU를 최대한 끌어내 tar 아카이브 작업을 크게 가속화할 수 있습니다. 이 글에서는 리눅스에서 tar가 모든 코어를 사용하도록 설정하는 방법을 소개합니다.

핵심 도구의 이해와 설치

여기서 다룰 세 가지 핵심 도구는 pigz, pbzip2, pxz입니다. 각 도구 사이에는 미묘한 차이가 있지만, 그 차이는 결국 gzip, bzip2, xz의 차이에서 비롯됩니다. 순서대로 압축률이 높아지는데, 즉 gzip으로 압축한 아카이브는 xz로 압축한 것보다 용량이 크지만, 그만큼 gzip이 xz보다 빠르게 처리됩니다. bzip2는 그 중간 정도에 위치한다고 보면 됩니다.

각 도구 이름 앞에 붙은 'p'는 'parallel(병렬)'을 의미합니다. 병렬화는 최근 몇 년간 점점 더 중요해진 주제로, 하나의 작업이 모든 CPU 코어를 얼마나 잘 활용하는지를 나타냅니다. 64코어 128스레드에 달하는 AMD의 Epyc나 Threadripper 계열처럼 코어 수가 많은 CPU에서는 어떤 프로그램이 이 성능을 제대로 활용할 수 있는지 아는 것이 중요합니다. 압축 작업은 바로 그 대표적인 후보입니다.

도구 설치는 배포판 저장소에서 간단히 할 수 있습니다.

sudo apt install pigz pbzip2 pxz # Debian/Ubuntu
sudo dnf install pigz pbzip2 pxz # Fedora
sudo pacman -Sy pigz pbzip2 pxz   # Arch Linux
tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법

이 글에서는 일관성을 위해 pxz를 중심으로 설명합니다. pigz에 대한 자세한 내용은 별도 튜토리얼을 참고하시기 바랍니다.

tar로 아카이브 압축하기

tar의 문법은 비교적 단순합니다. 디렉터리 하나를 압축하려면 다음과 같은 명령을 사용할 수 있습니다.

tar czf linux-5.10-rc3.tar.gz linux/
tar cjf linux-5.10-rc3.tar.bz2 linux/
tar cJf linux-5.10-rc3.tar.xz linux/

첫 번째 명령은 gzip, 두 번째는 bzip2, 세 번째는 xz를 사용합니다. 파일명과 디렉터리는 상황에 따라 달라지겠지만, 여기서는 GitHub에서 내려받은 리눅스 커널을 '/home' 디렉터리에 둔 상태로 진행하겠습니다. 명령 앞에 time을 붙여 소요 시간을 측정해 보면, 시스템 감시 도구에서 xz가 CPU 사용률을 가장 많이 차지하는 것으로 표시되지만 실제로는 한 개의 코어만 100%로 고정되어 있는 것을 확인할 수 있습니다.

tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법 tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법

실제로 구형 i7-2600s 시스템에서 리눅스 5.10-rc3를 압축하는 데 무려 28분 가까이 걸렸습니다.

tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법

바로 이 지점에서 병렬 압축 도구가 빛을 발합니다. 대용량 파일을 더 빨리 압축하고 싶다면 이 도구들을 강력히 추천합니다.

tar와 병렬 압축 도구 함께 사용하기

tar에게 압축 프로그램을 지정하는 방법은 두 가지입니다. --use-compression-program 옵션을 사용하거나, 좀 더 간단한 -I 플래그를 사용하는 것입니다. 각 도구의 기본 문법은 다음과 같습니다.

tar -I pigz -cf linux-5.10-rc3.tar.gz linux/
tar -I pbzip2 -cf linux-5.10-rc3.tar.bz2 linux/
tar -I pxz -cf linux-5.10-rc3.tar.xz linux/

직접 테스트해 보겠습니다. CPU의 여덟 개 스레드를 모두 활용하면 리눅스 커널 압축에 얼마나 걸릴까요? htop 화면을 보면 pxz 덕분에 모든 스레드가 100% 사용률로 고정되어 있는 것을 확인할 수 있습니다.

tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법 tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법

결과적으로 압축 시간이 크게 단축되었습니다(약 7분!). 게다가 이 시간에는 멀티태스킹도 포함되어 있습니다. 백그라운드에서 가상 머신을 돌리고 있었고, 웹 서핑도 동시에 하고 있었죠. 리눅스 커널의 하드웨어 스케줄러가 자원을 알아서 배분해 주기 때문에, 다른 작업 없이 pxz 명령만 실행하면 더 빠른 결과를 얻을 수 있을 것입니다.

tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법

pigz, pbzip2, pxz로 압축 수준 조절하기

pxz에 압축 수준 옵션을 전달하면 파일을 더욱 작게 만들 수도 있습니다. 물론 더 많은 RAM, CPU, 시간이 필요하지만, 파일 크기를 최소화해야 하는 상황이라면 충분히 가치 있는 선택입니다. 아래는 일반 압축과 높은 압축 수준의 명령과 결과를 나란히 비교한 것입니다.

tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법 tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법 tar와 pigz·pbzip2·pxz로 모든 CPU 코어를 활용해 아카이브 압축 속도 높이는 방법

압축률 향상 폭이 크지 않고 시간 대비 효율이 떨어질 수 있지만, 메가바이트 하나라도 아껴야 하는 상황이라면 여전히 훌륭한 선택지입니다.

이 글이 tar로 아카이브를 압축할 때 모든 CPU 코어를 활용하는 데 도움이 되었기를 바랍니다. 리눅스용 새 PC 조립 방법, APT 완전 정복하기, 라즈베리 파이에 Arch Linux 설치하기 등 다른 리눅스 관련 콘텐츠도 함께 확인해 보세요.