ยูทิลิตี้ GZIP ที่เร็วที่สุด


18

ฉันกำลังมองหาgzipยูทิลิตี้ที่เร็วที่สุด(หรือ zip) ฉันมีปริมาตร LVM ที่ 95% ว่างเปล่า0ดังนั้นการบีบอัดนั้นง่ายมาก ฉันกำลังมองหาวิธีที่เร็วที่สุดมากที่สุดและไม่สนใจจริงๆของการบีบอัดยกเว้น0's

ฉันรู้gzip -1(เหมือนgzip --fast) แต่สงสัยว่ามีวิธีที่เร็วกว่านี้ไหม

ขอบคุณ

แก้ไข: หลังจากการทดสอบบางอย่างผมเมื่อเทียบgzip -1, lzop -1และpigz -1กับ eachother และมาถึงผลลัพธ์ต่อไปนี้:

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

แก้ไข 2 :

นี่ค่อนข้างไม่เกี่ยวข้องกับคำถามเริ่มต้นของฉันอย่างไรก็ตามการใช้time dd if=/dev/VPS/snap | lzop -1 | ssh backup-server "dd of=/home/backupvps/snap.lzop"(ขนาดบล็อกเปลี่ยนเป็น 16M) เวลาจะลดลงเป็นreal 18m22.442s!


1
ระวัง: มันค่อนข้างไม่ยุติธรรมที่จะใช้timeในลักษณะนี้ ปริมาณงานของ dd ที่ใช้สำหรับpigzจะต่ำกว่าอีกสอง
Henk

@Devator: โดยดูที่การกำหนดเวลาหนึ่งอาจสรุปได้ว่าตอนนี้ผลักดันไบต์ผ่านอุโมงค์ ssh ที่เข้ารหัสเป็นคอขวด คุณลองใช้ ssh กับแฟล็ก "-c" (การบีบอัด) และปล่อยให้คอมเพรสเซอร์ก่อนออกจากสมการหรือไม่ คุณสามารถเปลี่ยนเป็นอัลกอริทึมการเข้ารหัสที่เร็วขึ้น นอกเหนือจากนั้นอีกครั้งโดยไม่ได้มาตรฐาน SSH อุโมงค์ (เช่นการใช้ / dev / null เป็นอ่างที่ส่งออก)
อากิระ

ในฐานะ sidenote คุณสามารถใช้ไฟล์แบบกระจายได้หรือไม่? จากนั้นศูนย์จะไม่ใช้พื้นที่บนดิสก์ การบีบอัดของคุณจะเร็วขึ้นด้วยเพราะศูนย์จะถูกแก้ไขโดยไดรเวอร์ระบบไฟล์ (และไม่ต้องอ่านจากดิสก์)
Li-aung Yip

@ Li-aungYip ฉันไม่คิดอย่างนั้นเพราะ "ไฟล์" เป็นไดรฟ์ข้อมูล LVM
Devator

อ่าฉันเข้าใจแล้ว ดำเนินการต่อไป!
Li-aung Yip

คำตอบ:


14

หากคุณไม่รังเกียจที่จะก้าวออกจาก DEFLATE lzopการใช้ LZO ที่ช่วยเพิ่มความเร็วในการบีบอัดข้อมูล


1
หรือ .. เร็ว: code.google.com/p/snappy
akira

ขอบคุณฉันพบว่าlzopเร็วที่สุดในสถานการณ์ของฉัน มันเร็วกว่าpigzอย่างใด (อาจเป็นเพราะจำนวนมากของ 0)
Devator

23

แม้ว่าฉันจะไม่ได้ใช้มันเป็นการส่วนตัว แต่ฉันคิดว่าการใช้gzip แบบขนานสามารถทำให้เร็วขึ้นได้:

pigz ซึ่งย่อมาจากการใช้งานแบบขนานของ gzip เป็นการแทนที่การทำงานอย่างสมบูรณ์สำหรับ gzip ที่ใช้ประโยชน์จากโปรเซสเซอร์หลายตัวและหลายคอร์ไปยังด้ามจับเมื่อทำการบีบอัดข้อมูล


1
ฉันใช้มันเป็นประจำและแนะนำ pigz อย่างแน่นอนหากมีหลายแกน นอกเหนือจากการเปลี่ยนระดับการบีบอัดนี่เป็นวิธีที่เข้าถึงได้ง่ายและตรงไปตรงมาที่สุดในการเร่งการบีบอัด
jgrundstad

3
ไซต์ดูแปลก ๆ แต่อย่าหลงกลโดยที่ pigz เขียนโดยหนึ่งในนักพัฒนาของ gzip และ zlib, Mark Adler
so_mv

ดูเหมือนว่าโครงการนี้จะถูกละทิ้ง
AlexLordThorsen

ฉันชอบคิดว่ามัน "มั่นคง" ไม่อัปเดตบ่อย แต่อัปเดต
Alan De Smet

7

คุณสามารถลองใช้ Parallel Gzip (Pascal ที่เชื่อมโยง) หรือ Parallel BZIP
ในทางทฤษฎี BZIP ดีมากสำหรับข้อความดังนั้นคุณอาจต้องการที่จะลองpbzip


2

ดิสก์ของคุณถูก จำกัด ที่ 30MB / s

คอมเพรสเซอร์ทั้งหมดทำได้ดีพอสมควร คุณสามารถลดการถ่ายโอนเครือข่ายโดยใช้ช้าลงเล็กน้อย แต่อยู่ทั่วไปทุกหนทุกแห่ง bzip2

$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

คุณคิดว่า rsync แล้วหรือยัง? มันจะตรวจสอบความแตกต่างแล้ว gzipping ความแตกต่างเท่านั้น


1
ดิสก์ของฉันไม่ จำกัด ที่ 30 MB / s ผมเคยขับรถเพียงแค่การทดสอบของคุณ: และpigz -1: 1073741824 bytes (1.1 GB) copied, 8.6779 seconds, 124 MB/s gzip -1: 1073741824 bytes (1.1 GB) copied, 11.6724 seconds, 92.0 MB/sฉันคิดเกี่ยวกับ rsync แต่จะตรวจสอบไฟล์ที่แตกต่างกันและมันอาจจะไม่ช่วยได้เนื่องจากเวลาส่วนใหญ่มีการเปลี่ยนแปลง
Devator

หากคุณอยู่ระหว่างการถ่ายโอนเลขศูนย์ดูว่าการเข้ารหัส bzip2 นั้นดูน่าประทับใจเพียงใดเมื่อเปรียบเทียบกัน ที่ด้านข้างคุณวัดความเร็ว .... 4Mbit / s ของ pigz อาจมากเกินไปสำหรับสาย DSL ทั่วไป ... มันจะยิ่งแย่ลงถ้าดิสก์ของคุณเร็วขนาดนั้น
ZaB

2

Re: lzop มันช้ากว่าที่ std config ... Tweaking สามารถใช้เวลาครึ่งหนึ่งได้ แต่มีการแทนที่ที่เร็วกว่าที่เรียกว่า blosc:

https://github.com/FrancescAlted/blosc

อืม ... เวลาที่ใช้ในการโพสต์ข้อความนี้และการตอบกลับอย่างน้อยก็น่าจะประหยัดได้สองเท่าในเวลาที่คุณจะได้รับ ... ตอนนี้ขอโทษด้วยในขณะที่ฉันคอมไพล์เคอร์เนล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.