멀티 코어 압축 툴


61

어떤 압축 도구 멀티 코어 CPU에서 우분투에서 사용할 수있는 혜택을 수 있습니다.


레코드의 경우 대안으로 독립 아카이브를 병렬로 작성하는 것이 있습니다. 따라서 myfiles.8core.xz를 작성하는 대신 myfiles1.xz를 myfiles8.xz에 병렬로 작성하십시오. 디스패치 에이전트가 필요합니다. 두 방법 모두 보완적인 장단점이 있습니다.
Acumenus

2
bzip2를 사용하여 7GB 파일의 압축을 풀려고 시도했지만 8 코어가 모두 사용되지 않는 것을 알았습니다. 그것에 대해 읽고 pbzip2를 시도하기로 결정했습니다. 여전히 하나의 코어에서 실행 중입니다. 그런 다음 pbzip2가 압축 된 파일의 압축 풀기를 완전히 병렬화 할 수 있다는 의견을 발견했습니다. 같은 의견은 lbzip2가 실제로 모든 bz2 파일에서 완전히 병렬화 될 수 있다고 제안했습니다. 실제로 모든 코어를 거의 완전히 사용하고 (CPU의 80-90 %) 압축 속도가 더 빠릅니다.
Edi Bice

답변:


34

두 가지 주요 도구가 있습니다. lbzip2그리고 pbzip2. 그것들은 본질적으로 bzip2 압축기의 다른 구현입니다. 나는 그것들을 비교했다 (출력은 정리 된 버전이지만 명령을 실행할 수 있어야한다)

cd /dev/shm  # we do all of this in RAM!
dd if=/dev/urandom of=bigfile bs=1024 count=102400

$ lbzip2 -zk bigfile 
Time: 0m3.596s
Size: 105335428 

$ pbzip2 -zk bigfile
Time: 0m5.738s6
Size: 10532460

lbzip2무작위 데이터의 승자로 보입니다. 약간 덜 압축되었지만 훨씬 빠릅니다. YMMV.


5
pbzip2 크기에서 숫자가 누락 된 것 같습니다
Wayne Walker

4
/dev/urandom랜덤 데이터는 압축 할 수 없기 때문에 압축 도구 벤치마킹을위한 훌륭한 선택은 아닙니다. 그것은 두 경우 모두 출력 파일이 입력보다 ~ 450MiB 더 큰 이유를 부분적으로 설명합니다 .
ali_m

1
죄송합니다, 저는 정말 놀랍지 만 무작위 데이터 압축 할 수 있습니다. 32 비트에 대한 완벽한 RNG를 요청하고 얻을 수 00000000000000000000000000000000있습니다. 그것이 무작위로 작동하는 방식입니다.) 당신이 말하는 것은 실제 평균입니다. 그것은의 가능성 그냥 제로의 100MB의 파일을 생성 할 수 있습니다. 그리고 나는 당신이 말하는 것의 정신에 동의합니다. "정의"에 동의하지 않습니다. 왜냐하면 그것은 정의가 아니기 때문입니다 (정확하지 않기 때문입니다).
Oli

2
다른 압축 방법의 성능을 판단 할 때 실제로 관심이있는 것은 압축하려는 데이터 종류의 향후 예에 대한 예상 출력 크기입니다. 이 데이터가 실제로 임의적이라면 압축에 악용되는 통계 규칙이 포함되어 있지 않으므로 N 개의 임의 바이트 시퀀스의 경우 예상되는 출력 길이는 N 바이트입니다. 일부 예제에서는 조금 더 나아질 수 있고, 다른 예제에서는 조금 나빠질 수 있지만 (실제로 우리는 거의 항상 나빠집니다) 예상되는 출력 길이는 동일하게 유지됩니다.
ali_m

5
나는 Kolmogorov 의미 에서 "무작위"를 의미 하며, 이는 말 그대로 비압축성으로 정의됩니다. 다른 유형의 데이터에 대해 다른 알고리즘이 더 잘 작동하므로 압축에 대한 보편적 벤치 마크는 없습니다. 예 wget http://mattmahoney.net/dc/enwik8.zip를 들어 위키피디아에서 96MB (21MB 압축)의 텍스트를 가져 오기 위해 텍스트를 파이프하는 것이 좋습니다 . 훨씬 포괄적 인 벤치 마크 제품군 은 여기를 참조하십시오 .
ali_m

72

글쎄, 키워드는 평행했다 . 병렬 인 모든 압축 도구를 찾은 후 다음을 발견했습니다.

PXZ -Parallel XZ는 여러 코어 및 프로세서에서 입력 파일의 다른 부분에 대한 LZMA 압축을 동시에 실행하는 압축 유틸리티입니다. 주요 목표는 모든 리소스를 활용하여 압축 비율에 미치는 영향을 최소화하면서 압축 시간을 단축하는 것입니다.

sudo apt-get install pxz

PLZIP -Lzip은 LZMA 알고리즘을 기반으로하는 무손실 데이터 압축기로, 안전한 무결성 검사와 gzip 또는 bzip2와 유사한 사용자 인터페이스를 제공합니다. Lzip은 gzip만큼 압축을 풀고 bzip2보다 압축 성능이 우수하므로 소프트웨어 배포 및 데이터 보관에 적합합니다.

Plzip은 lzip 파일 형식을 사용하는 대규모 병렬 (멀티 스레드) 버전의 lzip입니다. plzip으로 작성된 파일은 lzip과 완전히 호환됩니다.

Plzip은 멀티 프로세서 시스템에서 큰 파일을보다 빠르게 압축 / 압축 해제하기 위해 고안되었으므로 큰 소프트웨어 파일 및 대규모 데이터 아카이브의 배포에 특히 적합합니다. 충분히 큰 파일에서 plzip은 수백 개의 프로세서를 사용할 수 있습니다.

sudo apt-get install plzip

GZip의 병렬 구현을 의미하는 PIGZ -pigz는 데이터를 압축 할 때 여러 프로세서와 여러 코어를 활용하는 gzip을 완전히 대체하는 기능입니다.

sudo apt-get install pigz

PBZIP2 -pbzip2는 pthread를 사용하고 SMP 머신에서 거의 선형 속도 향상을 달성하는 bzip2 블록 정렬 파일 압축기의 병렬 구현입니다. 이 버전의 출력은 bzip2 v1.0.2와 완전히 호환됩니다 (예 : pbzip2로 압축 된 항목은 bzip2로 압축 해제 할 수 있음).

sudo apt-get install pbzip2

LRZIP- 큰 파일과 함께 사용할 때 매우 높은 압축률과 속도를 달성 할 수있는 다중 스레드 압축 프로그램입니다. 최대 압축에는 zpaq 및 lzma, 최대 속도에는 lzo, rzip의 장거리 중복 감소 압축 알고리즘을 사용합니다. RAM 크기가 증가함에 따라 확장되도록 설계되어 압축률을 더욱 향상시킵니다. 크기 또는 속도 최적화 중 하나를 선택하면 lzma가 제공 할 수있는 것보다 압축률이 향상되거나 gzip보다 속도가 향상되지만 bzip2 크기 압축 수준을 사용할 수 있습니다.

sudo apt-get install lrzip

작은 압축 벤치 마크 (Oli가 만든 테스트 사용) :

원본 파일 크기
-100MB PBZIP2-101MB (1 % 큰)
PXZ-101MB (1 % 큰)
PLZIP-102MB (1 % 큰)
LRZIP-101MB (1 % 큰)
PIGZ-101MB (1 % 큰) )

작은 압축 벤치 마크 (텍스트 파일 사용) :

원본 파일 크기
-70KB 텍스트 파일 PBZIP2-16.1KB (23 %)
PXZ-15.4KB (22 %)
PLZIP-15.5KB (22.1 %)
LRZIP-15.3KB (21.8 %)
PIGZ-17.4KB (24.8 %)


예가 좋을 것입니다.
earthmeLon

@earthmeLon 예제 파일을 만드는 방법을 언급 한 Oli의 답변을 읽으십시오. 그런 다음 내가 사용한 명령으로 진행하십시오.
루이스 알바라도

나는 이것들의 출력이 상호 호환되기를 바랍니다. 예를 lrzip들어을 사용하여 출력을 압축 해제 할 수 있습니다 pbzip2.
Vineet Menon

10

또한 좋은 요약 위 (감사 루이스), 요즘 사람들은 또한 README는 (소스의에 따라 PIXZ을 고려하는 것이 좋습니다 : https://github.com/vasi/pixz - 나는 주장 자신을 확인하지 않은 )는 PXZ보다 몇 가지 장점이 있습니다.

[Compared to PIXZ, PXZ has these advantages and disadvantages:]

    * Simpler code
    * Uses OpenMP instead of pthreads
    * Uses streams instead of blocks, not indexable
    * Uses temp files and doesn't combine them until the whole file is compressed, high disk/memory usage

다시 말해, PIXZ는 메모리와 디스크 효율성이 높을 것으로 생각되며 압축 된 tar 파일의 개별 구성 요소 압축 해제 속도를 높이는 선택적 색인 기능이 있습니다.


그러나 pixz아카이브가 표준 xz형식 과 호환되지 않는다는 것을 이해 pxz합니다.
Mxx

5
@Mxx : 파일 형식이 호환됩니다. 아카이브 pixz를 압축 해제하고 xz아카이브 xz를 압축 해제 할 수 pixz있습니다. 그러나, 명령 줄 옵션에 대한 xzpixz다르다.
Snowball

색인을 생성 할 수있는 파일은 큰 승리입니다 pixz.
ostrokach

8

최신 정보:

XZ Utils 는 v5.2.0부터 멀티 스레드 압축을 지원하며 원래 실수로 멀티 스레드 압축 해제로 문서화되었습니다.

예를 들면 다음과 같습니다. tar -cf - source | xz --threads=0 > destination.tar.xz


또한 export XZ_DEFAULTS="-T 0" 일반적인 tar 호출을 실행 한 다음 사용할 수도 있습니다 ( 예 :) tar cJf target.tar.xz source.
scai

4

lzop 은 단일 스레드이지만 실행 가능한 옵션 일 수도 있습니다.

그것은 사용 매우 빠른 렘펠 - 지브 - oberhumer의 내 관찰에 gzip을보다 5-6 배 빠른 압축 알고리즘을.

참고 : 아직 멀티 스레드는 아니지만 1-4 코어 시스템에서 pigz보다 성능이 뛰어납니다. 그래서 귀하의 질문에 직접 답변하지 않더라도 게시하기로 결정했습니다. 시도해보십시오. 하나의 CPU 만 사용하고 약간 더 압축하면 CPU 병목 현상 문제를 해결할 수 있습니다. 나는 그것이 예를 들어 pigz보다 종종 더 나은 해결책이라는 것을 알았습니다.


압축 해제가 더 좋지 않습니까? 압축은 gzip을보다 동일 (또는 더 나쁜) 정도 걸립니다
레나 롤랑

또한 lzop 이 매우 빠르다는 것을 증언 할 수 있습니다 . Proxmox 는 기본적으로 가상 머신 백업에 lzop를 사용합니다.
Lonnie Best

1
lz4 는 훨씬 빠릅니다 (멀티 스레드 버전도 있습니다).
David Balažic


3

실제로 대답은 아니지만 실제 시나리오에서 실제 HW 속도 gzip와 속도를 비교하는 벤치 마크를 공유하는 것이 적절하다고 생각합니다 pigz. pigz내가 개인적으로 사용하기로 선택한 다중 스레드 진화와 마찬가지로 .

메타 데이터 :

  • 사용 된 하드웨어 : Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz(4c / 8t) + Nvme SSD
  • GNU / 리눅스 배포 : Xubuntu 17.10 (artful)
  • gzip 번역: 1.6
  • pigz 번역: 2.4
  • 압축중인 파일은 9.25 GiB SQL 덤프입니다.

gzip 빨리

time gzip -1kN ./db_dump.sql

real    1m22,271s
user    1m17,738s
sys     0m3,330s

gzip 베스트

time gzip -9kN ./db_dump.sql 

real    10m6,709s
user    10m2,710s
sys     0m3,828s

pigz 빨리

time pigz -1kMN ./db_dump.sql 

real    0m26,610s
user    1m55,389s
sys     0m6,175s

pigz최고 (아니요 zopfli)

time pigz -9kMN ./db_dump.sql 

real    1m54,383s
user    14m30,435s
sys     0m5,562s

pigz+ zopfli알고리즘

time pigz -11kMN ./db_dump.sql 

real    171m33,501s
user    1321m36,144s
sys     0m29,780s

결론 zopfli은 압축이 그다지 중요하지 않은 디스크 공간을 위해 많은 시간이 걸리기 때문에 알고리즘을 권장 하지 않습니다.

결과 파일 크기 :

  • 최고 s : 1309M
  • 빠른 s : 1680M
  • zopfli : 1180M

2

Zstandardv1.2.0 ¹ 이후 멀티 스레딩을 지원합니다 . gzip을 대체하기위한 초고속 컴프레서 및 압축 해제 기이며 LZMA2 / XZ의 최고 수준에서보다 효율적으로 압축 할 수 있습니다.

이러한 이점을 얻으려면 교묘 하거나 최신 버전 을 사용 하거나 소스에서 최신 버전을 컴파일해야합니다. 운 좋게도 많은 의존성을 끌어 들이지 않습니다.

  1. zstd v1.1.0에는 타사 pzstd도있었습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.