สิ่งที่บีบอัดเครื่องมือที่มีอยู่ในอูบุนตูที่สามารถได้รับประโยชน์จาก CPU แบบ multi-core
สิ่งที่บีบอัดเครื่องมือที่มีอยู่ในอูบุนตูที่สามารถได้รับประโยชน์จาก CPU แบบ multi-core
คำตอบ:
มีเครื่องมือสองหลัก และ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
/dev/urandom
ไม่ใช่ตัวเลือกที่ยอดเยี่ยมในการป้อนข้อมูลสำหรับเครื่องมือบีบอัดข้อมูลเนื่องจากข้อมูลแบบสุ่มนั้นไม่สามารถบีบอัดได้ ส่วนหนึ่งอธิบายว่าทำไมในทั้งสองกรณีไฟล์เอาต์พุตจะมีขนาดใหญ่กว่าอินพุท~ 450MiB
00000000000000000000000000000000
บิตและได้รับ นั่นเป็นวิธีสุ่มทำงาน) สิ่งที่คุณกำลังพูดถึงคือค่าเฉลี่ยจริง เป็นไปไม่ได้ที่คุณจะสร้างไฟล์ขนาด 100MB ซึ่งเป็นศูนย์ และฉันเห็นด้วยกับวิญญาณของสิ่งที่คุณพูดฉันไม่เห็นด้วยกับ "ตามคำจำกัดความ" เพราะนั่นไม่ใช่คำจำกัดความ (เพราะมันไม่ถูกต้อง)
wget http://mattmahoney.net/dc/enwik8.zip
การหยิบข้อความขนาด 96MB (บีบอัด 21MB) จาก Wikipedia สำหรับชุดที่ครอบคลุมมากขึ้นของมาตรฐาน, ดูที่นี่
ดีคำที่เป็นคู่ขนาน หลังจากหาเครื่องมือบีบอัดทั้งหมดที่ขนานกันฉันก็พบสิ่งต่อไปนี้:
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
PIGZ - pigz ซึ่งย่อมาจาก Parallel Implementation ของ GZip เป็นอุปกรณ์ทดแทนที่ทำงานได้อย่างสมบูรณ์สำหรับ gzip ที่ใช้ประโยชน์จากโปรเซสเซอร์หลายตัวและหลายคอร์เมื่อทำการบีบอัดข้อมูล
sudo apt-get install pigz
PBZIP2 - pbzip2 เป็นการใช้งานแบบขนานของคอมเพรสเซอร์ไฟล์การเรียงลำดับบล็อก bzip2 ที่ใช้ pthreads และรับความเร็วแบบใกล้เคียงเชิงเส้นบนเครื่อง SMP ผลลัพธ์ของรุ่นนี้เข้ากันได้อย่างสมบูรณ์กับ 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 ทดสอบที่สร้างขึ้น):
ขนาดไฟล์ต้นฉบับ - 100 MB
PBZIP2 - 101 MB (ใหญ่กว่า 1%)
PXZ - 101 MB (ใหญ่กว่า 1%)
PLZIP - 102 MB (ใหญ่กว่า 1%)
LRZIP - 101 MB (ใหญ่กว่า 1%)
PIGZ - 101 MB (ใหญ่กว่า 1%) )
เกณฑ์มาตรฐานการบีบอัดขนาดเล็ก (การใช้ไฟล์ข้อความ):
ขนาดไฟล์ต้นฉบับ - ไฟล์ข้อความ 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
สามารถถูกบีบอัดโดยใช้pbzip2
ตัวอย่างเช่น
นอกจากนี้บทสรุปที่ดีข้างต้น (ขอบคุณ Luis) คนเหล่านี้อาจต้องการพิจารณา PIXZ ซึ่งเป็นไปตาม README (ที่มา: 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
จะเป็น
pixz
สามารถขยายxz
คลังข้อมูลและxz
สามารถขยายpixz
จดหมายเหตุ อย่างไรก็ตามตัวเลือกบรรทัดคำสั่งในxz
และpixz
แตกต่างกัน
pixz
ไฟล์ที่จัดทำดัชนีเป็นชัยชนะที่ยิ่งใหญ่สำหรับ
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
ตามปกติของคุณคือ
lzopอาจเป็นตัวเลือกที่ทำงานได้แม้ว่าจะเป็นเธรดเดี่ยว
มันใช้มากอย่างรวดเร็วLempel-Ziv-oberhumerวิธีการบีบอัดซึ่งเป็น 5-6 ครั้งได้เร็วกว่าใน gzip สังเกตของฉัน
หมายเหตุ: แม้ว่าจะยังไม่เป็นแบบมัลติเธรด แต่ก็อาจมีประสิทธิภาพสูงกว่าหมูในระบบหลัก 1-4 เครื่อง นั่นเป็นเหตุผลที่ฉันตัดสินใจโพสต์สิ่งนี้แม้ว่าจะไม่ได้ตอบคำถามของคุณโดยตรง ลองใช้มันอาจช่วยแก้ปัญหาคอขวดของคุณในขณะที่ใช้ CPU เพียงตัวเดียวและบีบอัดให้แย่ลงเล็กน้อย ฉันพบว่ามันมักจะเป็นทางออกที่ดีกว่าเช่น pigz
คอมเพรสเซอร์ LZMA2 ของp7zip ใช้ทั้งสองแกนในระบบของฉัน
มันไม่ได้เป็นคำตอบจริงๆ แต่ฉันคิดว่ามันมีความเกี่ยวข้องพอที่จะแบ่งปันมาตรฐานเปรียบเทียบความเร็วgzip
และpigz
HW จริงในสถานการณ์ชีวิตจริง เช่นเดียวpigz
กับวิวัฒนาการที่มีหลายเธรดฉันเลือกที่จะใช้ตั้งแต่นี้ไป
เมตา
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c / 8t) + Nvme SSDXubuntu 17.10 (artful)
gzip
รุ่น: 1.6
pigz
รุ่น: 2.4
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
อัลกอริทึมเนื่องจากการบีบอัดใช้เวลาจำนวนมหาศาลสำหรับพื้นที่ดิสก์ที่ไม่ได้ใช้อย่างมีนัยสำคัญ
ขนาดไฟล์ผลลัพธ์:
Zstandardรองรับมัลติเธรดตั้งแต่v1.2.0 ¹ มันเป็นคอมเพรสเซอร์และตัวคลายการบีบอัดที่รวดเร็วมากที่ต้องการแทนที่ gzip และยังสามารถบีบอัดได้อย่างมีประสิทธิภาพ - ถ้าไม่ดีกว่า - เหมือน LZMA2 / XZ ในระดับสูงสุด
คุณต้องใช้งานฝีมือหรือรุ่นที่ใหม่กว่าหรือรวบรวมรุ่นล่าสุดจากแหล่งที่มาเพื่อรับสิทธิประโยชน์เหล่านี้ โชคดีที่มันไม่ได้มีการพึ่งพามากนัก