Tiện ích GZIP nhanh nhất


18

Tôi đang tìm kiếm gziptiện ích (hoặc zip) nhanh nhất . Tôi có một khối lượng LVM mà 95% tồn tại trong khoảng trống 0, vì vậy việc nén nó rất dễ dàng. Tôi đang tìm giải pháp nhanh nhất và không thực sự quan tâm đến việc nén ngoại trừ 0.

Tôi biết gzip -1(giống như gzip --fast) nhưng tự hỏi liệu có phương pháp nào nhanh hơn không.

Cảm ơn.

Chỉnh sửa: sau một số thử nghiệm, tôi đã so sánh gzip -1, lzop -1pigz -1với nhau và đưa ra kết quả sau:

PIGZ:

time dd if=/dev/VPS/snap | pigz -1 | ssh backup-server "dd of=/home/backupvps/snap.pigz"

104857600+0 records in
104857600+0 records out
53687091200 bytes (54 GB) copied, 2086.87 seconds, 25.7 MB/s
7093985+266013 records in
7163950+1 records out
3667942715 bytes (3.7 GB) copied, 2085.75 seconds, 1.8 MB/s

real    34m47.147s

LZOP:

time dd if=/dev/VPS/snap | lzop -1 | ssh backup-server "dd of=/home/backupvps/snap.lzop"

104857600+0 records in
104857600+0 records out
53687091200 bytes (54 GB) copied, 1829.31 seconds, 29.3 MB/s
7914243+311979 records in
7937728+1 records out
4064117245 bytes (4.1 GB) copied, 1828.08 seconds, 2.2 MB/s

real    30m29.430s

GZIP:

time dd if=/dev/VPS/snap | gzip -1 | ssh backup-server "dd of=/home/backupvps/snap_gzip.img.gz

104857600+0 records in
104857600+0 records out
53687091200 bytes (54 GB) copied, 1843.61 seconds, 29.1 MB/s
7176193+42 records in
7176214+1 records out
3674221747 bytes (3.7 GB) copied, 1842.09 seconds, 2.0 MB/s

real    30m43.846s

Chỉnh sửa 2 :

Điều này có phần không liên quan đến câu hỏi ban đầu của tôi, tuy nhiên bằng cách sử dụng time dd if=/dev/VPS/snap | lzop -1 | ssh backup-server "dd of=/home/backupvps/snap.lzop"(kích thước khối thay đổi thành 16M) thời gian được giảm xuống real 18m22.442s!


1
Hãy cẩn thận: sử dụng timetheo cách như vậy có phần không công bằng . Thông lượng của dd được sử dụng cho pigzthấp hơn so với hai người kia.
Henk

@Devator: bằng cách nhìn vào thời gian, người ta có thể kết luận rằng ngay bây giờ việc đẩy byte qua đường hầm ssh được mã hóa là nút cổ chai. bạn đã thử sử dụng ssh với cờ "-c" (nén) và để máy nén trước ra khỏi phương trình chưa? bạn cũng có thể chuyển sang một thuật toán mã hóa nhanh hơn. ngoài ra: đánh giá lại mà không có đường hầm ssh (ví dụ: sử dụng / dev / null làm mức chìm đầu ra)
akira

Là một sidenote, bạn có thể sử dụng một tập tin thưa thớt ? Sau đó, các số 0 sẽ không chiếm dung lượng trên đĩa. Quá trình nén của bạn cũng sẽ nhanh hơn vì các số 0 sẽ được nội suy bởi trình điều khiển hệ thống tập tin (và sẽ không phải đọc từ đĩa.)
Li-aung Yip

@ Li-aungYip Tôi không nghĩ vậy, vì "tập tin" là khối lượng LVM.
Devator

Ah tôi thấy. Tiếp tục!
Li-aung Yip

Câu trả lời:



23

Mặc dù cá nhân tôi chưa sử dụng nó, tôi nghĩ rằng sử dụng gzip song song có thể tăng tốc mọi thứ một chút:

pigz, viết tắt của việc triển khai song song gzip, là sự thay thế đầy đủ chức năng cho gzip khai thác nhiều bộ xử lý và nhiều lõi cho chuôi khi nén dữ liệu.


1
Tôi sử dụng nó thường xuyên, và hoàn toàn khuyên dùng pigz nếu có sẵn nhiều lõi. Khác với việc thay đổi mức độ nén, đây là phương tiện dễ tiếp cận và đơn giản nhất để tăng tốc độ nén.
jgrundstad

3
Các trang web trông hơi kỳ lạ. Nhưng đừng để bị lừa bởi điều đó, pigz được viết bởi một trong những nhà phát triển của gzip và zlib, Mark Adler.
so_mv

Có vẻ như dự án bị bỏ rơi vào thời điểm này.
AlexLordThorsen

Tôi thích nghĩ về nó như là "ổn định". Nó không cập nhật thường xuyên, nhưng nó cập nhật.
Alan De Smet

7

Bạn có thể thử Parallel Gzip (Pascal đã liên kết nó) hoặc Parallel BZIP.
Về lý thuyết, BZIP tốt hơn nhiều cho văn bản, vì vậy bạn có thể muốn thử pbzip .


2

Đĩa của bạn bị giới hạn ở mức 30MB / s

Tất cả các máy nén làm đủ tốt. Bạn thậm chí có thể giảm chuyển mạng bằng cách sử dụng bzip2 chậm hơn một chút nhưng có mặt khắp nơi.

$dd if=/dev/zero bs=2M count=512 | pigz -1 | dd > /dev/null
512+0 records in
512+0 records out
1073741824 bytes (1.1 GB) copied, 9.12679 s, 118 MB/s
8192+7909 records in
9488+1 records out
4857870 bytes (4.9 MB) copied, 9.13024 s, 532 kB/s
$dd if=/dev/zero bs=2M count=512 | bzip2 -1 | dd > /dev/null
512+0 records in
512+0 records out
1073741824 bytes (1.1 GB) copied, 37.4471 s, 28.7 MB/s
12+1 records in
12+1 records out
6533 bytes (6.5 kB) copied, 37.4981 s, 0.2 kB/s
$dd if=/dev/zero bs=2M count=512 | gzip -1 | dd > /dev/null
512+0 records in
512+0 records out
1073741824 bytes (1.1 GB) copied, 14.305 s, 75.1 MB/s
9147+1 records in
9147+1 records out
4683762 bytes (4.7 MB) copied, 14.3048 s, 327 kB/s

Bạn đã xem xét rsync chưa? Nó không kiểm tra và sau đó gzipping sự khác biệt mà thôi.


1
Đĩa của tôi không giới hạn ở 30 MB / s. Tôi vừa mới chạy thử nghiệm của bạn: pigz -1: 1073741824 bytes (1.1 GB) copied, 8.6779 seconds, 124 MB/sgzip -1: 1073741824 bytes (1.1 GB) copied, 11.6724 seconds, 92.0 MB/s. Tôi đã nghĩ về rsync nhưng điều đó sẽ kiểm tra các tệp khác biệt và nó có thể không giúp ích gì, vì hầu hết thời gian đã thay đổi rất nhiều.
Devator

Nếu bạn đang chuyển các số 0, hãy xem mã hóa bzip2 ấn tượng như thế nào khi so sánh. Chỉ ở phía nào bạn đo tốc độ .... 4Mbit / s pigz có thể là quá nhiều cho một đường DSL thông thường ... Nó còn phát triển tồi tệ hơn nếu đĩa của bạn nhanh như vậy.
ZaB

2

Re: lzop nó chậm hơn ở cấu hình std của nó ... Tinh chỉnh có thể giảm một nửa thời gian. Nhưng có một sự thay thế thậm chí còn nhanh hơn được gọi là blosc:

https://github.com/FrancescAlted/blosc

Hmm ... Thời gian để đăng bài này và nhận được trả lời có lẽ ít nhất gấp đôi số tiền tiết kiệm thời gian bạn sẽ nhận được ... Bây giờ xin lỗi trong khi tôi biên dịch lại kernel của mình để loại bỏ .1 giây từ thời gian khởi động 2 giây của tôi.

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.