Công cụ nén đa lõi


61

Những công cụ nén nào có sẵn trong Ubuntu có thể hưởng lợi từ CPU đa lõi.


Chỉ cần cho hồ sơ, một sự thay thế có thể là tạo các tài liệu lưu trữ độc lập song song. Vì vậy, thay vì tạo myfiles.8core.xz, bạn tạo song song myfiles1.xz thành myfiles8.xz. Điều này sẽ yêu cầu một đại lý điều phối. Cả hai phương pháp đều có những ưu và nhược điểm bổ sung.
Acumenus

2
Đã thử giải nén tệp 7GB chỉ bằng bzip2 để tìm ra nó không sử dụng tất cả 8 lõi của tôi. Đọc về nó và quyết định thử pbzip2. Vẫn chỉ chạy trên một lõi. Sau đó, tôi nhận thấy các bình luận nói rằng pbzip2 chỉ có thể song song hóa hoàn toàn việc giải nén các tệp mà nó tự nén. Nhận xét tương tự đề xuất lbzip2 hoàn toàn có thể song song trên bất kỳ tệp bz2 nào thực sự đúng - đã sử dụng gần như toàn bộ (80-90% CPU) của tất cả các lõi của tôi và nó được giải nén nhanh hơn.
Edi Bice

Câu trả lời:


34

Có hai công cụ chính. lbzip2pbzip2. Về cơ bản chúng là những cách thực hiện khác nhau của máy nén bzip2. Tôi đã so sánh chúng (đầu ra là phiên bản được thu dọn nhưng bạn sẽ có thể chạy các lệnh)

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

lbzip2dường như là người chiến thắng trên dữ liệu ngẫu nhiên. Nó hơi nén nhưng nhanh hơn nhiều. YMMV.


5
có vẻ như một chữ số bị thiếu trong Kích thước pbzip2
Wayne Walker

4
/dev/urandomkhông phải là một lựa chọn đầu vào tuyệt vời cho các công cụ nén điểm chuẩn, vì theo định nghĩa, dữ liệu ngẫu nhiên là không thể nén được. Điều đó phần nào giải thích tại sao trong cả hai trường hợp, tệp đầu ra lớn hơn ~ 450MiB so với đầu vào.
ali_m

1
Xin lỗi, tôi thực sự là người phạm tội nhưng dữ liệu thực sự ngẫu nhiên thể siêu nén. Bạn có thể yêu cầu một RNG hoàn hảo cho 32 bit và nhận 00000000000000000000000000000000. Đó là cách hoạt động ngẫu nhiên;) Những gì bạn đang nói là trung bình thực tế. Không chắc bạn sẽ tạo ra một tệp 100 MB chỉ là số không. Và tôi đồng ý với tinh thần của những gì bạn đang nói, tôi chỉ không đồng ý với "theo định nghĩa" bởi vì đó không phải là định nghĩa (vì nó không chính xác).
Oli

2
Khi chúng tôi đánh giá hiệu suất của các phương pháp nén khác nhau, điều chúng tôi thực sự quan tâm là kích thước đầu ra dự kiến cho các ví dụ trong tương lai của loại dữ liệu mà chúng tôi muốn nén. Nếu dữ liệu này thực sự ngẫu nhiên thì nó không chứa tính thống kê thống kê để nén để khai thác, do đó, đối với chuỗi N byte ngẫu nhiên, điều tốt nhất chúng ta có thể hy vọng là độ dài đầu ra dự kiến ​​là N byte. Đối với một số ví dụ, chúng tôi có thể làm tốt hơn một chút, đối với những người khác, chúng tôi có thể làm tồi tệ hơn một chút (trong thực tế, chúng tôi hầu như luôn làm tồi tệ hơn), nhưng độ dài đầu ra dự kiến vẫn giữ nguyên.
ali_m

5
Tôi có nghĩa là "ngẫu nhiên" theo nghĩa Kolmogorov , được định nghĩa theo nghĩa đen là không thể nén được. Không có điểm chuẩn chung nào cho việc nén vì các thuật toán khác nhau hoạt động tốt hơn cho các loại dữ liệu khác nhau. Một khởi đầu tốt có thể chỉ là đưa nó vào một số văn bản, ví dụ wget http://mattmahoney.net/dc/enwik8.zipđể lấy 96 MB (nén 21 MB) văn bản từ Wikipedia. Đối với một bộ điểm chuẩn toàn diện hơn nhiều, xem ở đây .
ali_m

72

Vâng, các từ khóa là song song . Sau khi tìm kiếm tất cả các công cụ nén song song, tôi tìm thấy như sau:

PXZ - Parallel XZ là một tiện ích nén tận dụng việc chạy LZMA nén các phần khác nhau của tệp đầu vào trên nhiều lõi và bộ xử lý cùng một lúc. Mục tiêu chính của nó là sử dụng tất cả các tài nguyên để tăng tốc thời gian nén với ảnh hưởng tối thiểu có thể đến tỷ lệ nén.

sudo apt-get install pxz

PLZIP - Lzip là một máy nén dữ liệu không mất dữ liệu dựa trên thuật toán LZMA, với kiểm tra tính toàn vẹn rất an toàn và giao diện người dùng tương tự như của gzip hoặc bzip2. Lzip giải nén gần như nhanh như gzip và nén tốt hơn bzip2, điều này làm cho nó phù hợp để phân phối phần mềm và lưu trữ dữ liệu.

Plzip là phiên bản song song (đa luồng) của lzip sử dụng định dạng tệp lzip; các tập tin được tạo bởi plzip hoàn toàn tương thích với lzip.

Plzip được dùng để nén / giải nén nhanh hơn các tệp lớn trên các máy đa bộ xử lý, điều này làm cho nó đặc biệt phù hợp để phân phối các tệp phần mềm lớn và lưu trữ dữ liệu quy mô lớn. Trên các tệp đủ lớn, plzip có thể sử dụng hàng trăm bộ xử lý.

sudo apt-get install plzip

PIGZ - pigz, viết tắt của Parallel Thực hiện GZip, là sự thay thế đầy đủ chức năng cho gzip, tận dụng nhiều bộ xử lý và nhiều lõi khi nén dữ liệu.

sudo apt-get install pigz

PBZIP2 - pbzip2 là một triển khai song song của trình nén tệp sắp xếp khối bzip2 sử dụng pthreads và đạt được tốc độ gần tuyến tính trên các máy SMP. Đầu ra của phiên bản này hoàn toàn tương thích với bzip2 v1.0.2 (nghĩa là: mọi thứ được nén bằng pbzip2 đều có thể được giải nén bằng bzip2).

sudo apt-get install pbzip2

LRZIP - Một chương trình nén đa luồng có thể đạt được tỷ lệ và tốc độ nén rất cao khi được sử dụng với các tệp lớn. Nó sử dụng các thuật toán nén kết hợp của zpaq và lzma để nén tối đa, lzo cho tốc độ tối đa và giảm độ dự phòng trong phạm vi dài của rzip. Nó được thiết kế để mở rộng quy mô với kích thước RAM, cải thiện khả năng nén hơn nữa. Một lựa chọn tối ưu hóa kích thước hoặc tốc độ cho phép nén tốt hơn cả lzma có thể cung cấp, hoặc tốc độ tốt hơn gzip, nhưng với mức nén có kích thước bzip2.

sudo apt-get install lrzip

Một điểm chuẩn nén nhỏ (Sử dụng thử nghiệm Oli đã tạo):

KÍCH THƯỚC FILE ORIGINAL - 100 MB
PBZIP2 - 101 MB (Lớn hơn 1%)
PXZ - 101 MB (Lớn hơn 1%)
PLZIP - 102 MB (Lớn hơn 1%)
LRZIP - 101 MB (Lớn hơn 1%)
PIGZ - 101 MB (Lớn hơn 1%) )

Một điểm chuẩn nén nhỏ (Sử dụng tệp văn bản):

KÍCH THƯỚC FILE ORIGINAL - Tệp văn bản 70 KB
PBZIP2 - 16,1 KB (23%)
PXZ - 15,4 KB (22%)
PLZIP - 15,5 KB (22,1%)
LRZIP - 15,3 KB (21,8%)
PIGZ - 17,4 KB (24,8%)


Ví dụ sẽ là tuyệt vời.
earthmeLon

@earthmeLon Đọc câu trả lời của Oli trong đó đề cập đến cách tạo tệp ví dụ. Sau đó tiến hành các lệnh tôi đã sử dụng.
Luis Alvarado

Tôi hy vọng đầu ra của chúng là tương thích. tức là đầu ra từ lrzipcó thể được giải nén bằng cách sử dụng pbzip2, ví dụ.
Vineet Menon

10

Ngoài bản tóm tắt hay ở trên (cảm ơn Luis), ngày nay mọi người cũng có thể muốn xem xét PIXZ, theo đó là README (Nguồn: https://github.com/vasi/pixz - Tôi chưa tự mình xác minh các khiếu nại ) có một số lợi thế so với 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

Nói cách khác, PIXZ được cho là hiệu quả hơn về bộ nhớ và ổ đĩa và có tính năng lập chỉ mục tùy chọn giúp tăng tốc độ giải nén các thành phần riêng lẻ của các tệp tar được nén.


Tuy nhiên, theo hiểu biết của tôi thì pixztài liệu lưu trữ không tương thích với xzđịnh dạng tiêu chuẩn pxz.
Mxx

5
@Mxx: Các định dạng tệp tương thích. pixzcó thể giải nén xztài liệu lưu trữ và xzcó thể giải nén pixztài liệu lưu trữ. Tuy nhiên, các tùy chọn dòng lệnh trên xzpixzkhác nhau.
Quả cầu tuyết

Các tập tin có thể lập chỉ mục là một chiến thắng lớn cho pixz.
Ostrokach 2/2/2016

8

Cập nhật:

XZ Utils hỗ trợ nén đa luồng kể từ v5.2.0, ban đầu nó bị ghi nhầm là giải nén đa luồng.

Ví dụ: tar -cf - source | xz --threads=0 > destination.tar.xz


Bạn cũng có thể chạy export XZ_DEFAULTS="-T 0" và sau đó chỉ cần sử dụng cuộc gọi tar thông thường của bạn, tức là tar cJf target.tar.xz source.
Scai

4

lzop cũng có thể là một lựa chọn khả thi, mặc dù đó là luồng đơn.

Nó sử dụng rất nhanh Lempel-Ziv-oberhumer thuật toán nén mà là nhanh hơn 5-6 lần so với gzip trong quan sát của tôi.

Lưu ý: Mặc dù nó không đa luồng nhưng có lẽ nó sẽ vượt trội so với pigz trên các hệ thống lõi 1-4. Đó là lý do tại sao tôi quyết định đăng bài này ngay cả khi nó không trả lời trực tiếp câu hỏi của bạn. Hãy thử nó, nó có thể giải quyết vấn đề tắc nghẽn CPU của bạn trong khi chỉ sử dụng một CPU và nén tệ hơn một chút. Tôi thấy nó thường là một giải pháp tốt hơn, ví dụ như pigz.


Không phải nó chỉ tốt hơn trong việc giải nén sao? Quá trình nén mất khoảng (hoặc tệ hơn) so với gzip
Lennart Rolland

Tôi cũng có thể làm chứng rằng lzop là siêu nhanh. Proxmox sử dụng lzop để sao lưu các máy ảo theo mặc định.
Lonnie hay nhất

1
lz4 thậm chí còn nhanh hơn (và có phiên bản đa luồng).
David Balažic


3

Nó không thực sự là một câu trả lời, nhưng tôi nghĩ rằng nó có liên quan đủ để chia sẻ điểm chuẩn của tôi so sánh tốc độ gzippigztrên một CTNH thực trong một kịch bản thực tế. Như pigzlà sự tiến hóa đa luồng mà cá nhân tôi đã chọn để sử dụng từ bây giờ.

Metadata:

  • Phần cứng được sử dụng: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz(4c / 8t) + SSD Nvme
  • Phân phối GNU / Linux: Xubuntu 17.10 (artful)
  • gzip phiên bản: 1.6
  • pigz phiên bản: 2.4
  • Tệp đang được nén là kết xuất SQL Gi5 9,25

gzip nhanh chóng

time gzip -1kN ./db_dump.sql

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

gzip tốt

time gzip -9kN ./db_dump.sql 

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

pigz nhanh chóng

time pigz -1kMN ./db_dump.sql 

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

pigztốt nhất (không zopfli)

time pigz -9kMN ./db_dump.sql 

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

pigz+ zopflithuật toán

time pigz -11kMN ./db_dump.sql 

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

Như một điểm mấu chốt, tôi sẽ không đề xuất zopflithuật toán vì quá trình nén mất rất nhiều thời gian cho một lượng không gian đĩa không đáng kể.

Kết quả kích thước tập tin:

  • s tốt nhất : 1309M
  • s nhanh : 1680M
  • zopfli : 1180M

2

Zst Chuẩn hỗ trợ đa luồng kể từ v1.2.0 . Nó là một máy nén và giải nén rất nhanh nhằm thay thế gzip và nó cũng có thể nén hiệu quả - nếu không tốt hơn - như LZMA2 / XZ ở mức cao nhất.

Bạn phải sử dụng bản phát hành nghệ thuật hoặc mới hơn hoặc biên dịch phiên bản mới nhất từ ​​nguồn để có được những lợi ích này. May mắn thay, nó không kéo theo nhiều phụ thuộc.

  1. Ngoài ra còn có pzstd của bên thứ 3 trong v1.1.0 của zstd.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.