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.
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.
Câu trả lời:
Có hai công cụ chính. lbzip2
và pbzip2
. 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
lbzip2
dườ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.
/dev/urandom
khô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.
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).
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 .
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%)
lrzip
có thể được giải nén bằng cách sử dụng pbzip2
, ví dụ.
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.
pixz
tài liệu lưu trữ không tương thích với xz
định dạng tiêu chuẩn pxz
.
pixz
có thể giải nén xz
tài liệu lưu trữ và xz
có thể giải nén pixz
tài liệu lưu trữ. Tuy nhiên, các tùy chọn dòng lệnh trên xz
và pixz
khác nhau.
pixz
.
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
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
.
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.
Máy nén LZMA2 của p7zip sử dụng cả hai lõi trên hệ thống của tôi.
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 độ gzip
và pigz
trên một CTNH thực trong một kịch bản thực tế. Như pigz
là sự tiến hóa đa luồng mà cá nhân tôi đã chọn để sử dụng từ bây giờ.
Metadata:
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c / 8t) + SSD NvmeXubuntu 17.10 (artful)
gzip
phiên bản: 1.6
pigz
phiên bản: 2.4
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
pigz
tốt nhất (không zopfli
)
time pigz -9kMN ./db_dump.sql
real 1m54,383s
user 14m30,435s
sys 0m5,562s
pigz
+ zopfli
thuậ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 zopfli
thuậ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:
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.