मल्टी-कोर संपीड़न उपकरण


61

उबंटू में कौन से संपीड़न उपकरण उपलब्ध हैं जो मल्टी-कोर सीपीयू से लाभ उठा सकते हैं।


सिर्फ रिकॉर्ड के लिए, एक विकल्प समानांतर में स्वतंत्र अभिलेखागार बनाने के लिए हो सकता है। इसलिए myfiles.8core.xz बनाने के बजाय, आप myfiles1.xz को समानांतर में myfiles8.xz बनाएं। इसके लिए प्रेषण एजेंट की आवश्यकता होगी। दोनों दृष्टिकोणों में पूरक पेशेवरों और विपक्ष हैं।
एक्यूमेनस

2
Bzip2 का उपयोग करके 7GB फ़ाइल को अनज़िप करने की कोशिश की केवल यह पता लगाने के लिए कि यह मेरे सभी 8 कोर का उपयोग नहीं कर रहा है। इसके बारे में पढ़ें और pbzip2 को आजमाने का फैसला किया। अभी भी सिर्फ एक कोर पर चल रहा है। तब मैंने टिप्पणियों में कहा कि pbzip2 केवल पूरी तरह से फ़ाइलों के अपघटन को ही संकुचित कर सकती है। समान टिप्पणियों का सुझाव दिया lbzip2 पूरी तरह से किसी भी bz2 फ़ाइल पर पूरी तरह से समानांतर कर सकता है जो वास्तव में सच था - मेरे सभी कोर के लगभग पूर्ण उपयोग (सीपीयू का 80-90%) किया और यह तेजी से विघटित हो गया।
एडी बाइस

जवाबों:


34

दो मुख्य उपकरण हैं। 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।


5
ऐसा लगता है कि एक अंक pbzip2 आकार से गायब है
वेन वॉकर

4
/dev/urandomयादृच्छिक डेटा बेंचमार्किंग संपीड़न उपकरणों के लिए इनपुट का एक बढ़िया विकल्प नहीं है, क्योंकि परिभाषा के अनुसार, अयोग्य है। यह आंशिक रूप से बताता है कि क्यों दोनों मामलों में आउटपुट फ़ाइल इनपुट से ~ 450MiB बड़ी है।
अली_म

1
क्षमा करें, मैं वास्तव में पांडित्यपूर्ण हूं, लेकिन वास्तव में यादृच्छिक डेटा सुपर-संपीड़ित हो सकता है। आप 32 बिट्स के लिए एक सही RNG पूछ सकते हैं और प्राप्त कर सकते हैं 00000000000000000000000000000000। यह कैसे यादृच्छिक काम करता है;) आप जिस बारे में बात कर रहे हैं वह व्यावहारिक औसत है। यह संभव नहीं है कि आप सिर्फ शून्य की 100MB फ़ाइल उत्पन्न करेंगे। और मैं जो कह रहा हूं उसकी भावना से सहमत हूं, मैं सिर्फ "परिभाषा से" सहमत नहीं हूं क्योंकि यह परिभाषा नहीं है (क्योंकि यह गलत है)।
ओली

2
जब हम विभिन्न संपीड़न विधियों के प्रदर्शन को देखते हैं, तो हम वास्तव में जिस तरह के डेटा को संपीड़ित करना चाहते हैं उसके भविष्य के उदाहरणों के लिए अपेक्षित आउटपुट आकार में रुचि रखते हैं। यदि यह डेटा वास्तव में यादृच्छिक है, तो इसमें शोषण के लिए संपीड़न के लिए कोई सांख्यिकीय नियमितता नहीं है, इसलिए एन यादृच्छिक बाइट्स के अनुक्रमों के लिए सबसे अच्छा हम कभी भी उम्मीद कर सकते हैं कि एन बाइट्स की अपेक्षित आउटपुट लंबाई है । कुछ उदाहरणों के लिए हम थोड़ा बेहतर कर सकते हैं, दूसरों के लिए हम थोड़ा बुरा कर सकते हैं (व्यवहार में हम लगभग हमेशा खराब करते हैं), लेकिन अपेक्षित आउटपुट की लंबाई समान रहती है।
एलि_म

5
मेरा मतलब है कोलमोगोरोव अर्थ में "यादृच्छिक" , जिसे वस्तुतः अतुलनीयता के रूप में परिभाषित किया गया है। संपीड़न के लिए कोई सार्वभौमिक बेंचमार्क नहीं है क्योंकि विभिन्न एल्गोरिदम विभिन्न प्रकार के डेटा के लिए बेहतर काम करते हैं। wget http://mattmahoney.net/dc/enwik8.zipविकिपीडिया से 96MB (21MB संपीड़ित) पाठ को हथियाने के लिए एक अच्छी शुरुआत बस इसे कुछ पाठ को पाइप करने के लिए हो सकती है । बेंचमार्क के अधिक व्यापक सूट के लिए, यहां देखें
अलिअम

72

खैर, कीवर्ड समानांतर था । सभी संपीड़न उपकरणों की तलाश करने के बाद जो समानांतर थे, मुझे निम्नलिखित मिला:

पीएक्सजेड - समानांतर एक्सजेड एक संपीड़न उपयोगिता है जो एक से अधिक कोर और प्रोसेसर पर एक इनपुट फ़ाइल के विभिन्न भागों के LZMA संपीड़न को एक साथ चलाने का लाभ उठाती है। इसका प्राथमिक लक्ष्य संपीड़न अनुपात पर न्यूनतम संभव प्रभाव के साथ संपीड़न समय को गति देने के लिए सभी संसाधनों का उपयोग करना है।

sudo apt-get install pxz

PLZIP - Lzip LZMA एल्गोरिथ्म पर आधारित एक दोषरहित डेटा कंप्रेसर है, जिसमें बहुत ही सुरक्षित अखंडता की जाँच की जाती है और एक उपयोगकर्ता इंटरफ़ेस जो कि gzip या bzip2 के समान है। Lzip लगभग gzip के रूप में तेजी से कम हो जाता है और bzip2 से बेहतर संपीड़ित होता है, जो इसे सॉफ्टवेयर वितरण और डेटा संग्रह के लिए अच्छी तरह से अनुकूल बनाता है।

प्लज़िप लज़ीज़ फ़ाइल प्रारूप का उपयोग करके लाज़िप का एक व्यापक रूप से समानांतर (बहु-थ्रेडेड) संस्करण है; plzip द्वारा निर्मित फाइलें पूरी तरह से lzip के साथ संगत हैं।

मल्टिप्रेसर मशीन पर बड़ी फ़ाइलों के तेजी से संपीड़न / अपघटन के लिए प्लज़िप का इरादा है, जो बड़ी सॉफ़्टवेयर फ़ाइलों और बड़े पैमाने पर डेटा संग्रह के वितरण के लिए विशेष रूप से अनुकूल है। बड़ी फ़ाइलों पर, plzip सैकड़ों प्रोसेसर का उपयोग कर सकता है।

sudo apt-get install plzip

PIGZ - पिगज़, जो GZip के समानांतर कार्यान्वयन के लिए खड़ा है, gzip के लिए एक पूरी तरह कार्यात्मक प्रतिस्थापन है जो डेटा को संपीड़ित करते समय कई प्रोसेसर और कई कोर का लाभ उठाता है।

sudo apt-get install pigz

PBZIP2 - pbzip2 bzip2 ब्लॉक-सॉर्टिंग फ़ाइल कंप्रेसर का समानांतर कार्यान्वयन है जो एसएमपी मशीनों पर निकट-रैखिक स्पीडअप का उपयोग करता है। इस संस्करण का आउटपुट पूरी तरह से bzip2 v1.0.2 के साथ संगत है (यानी: pbzip2 के साथ संकुचित कुछ भी bzip2 के साथ विघटित हो सकता है)।

sudo apt-get install pbzip2

LRZIP - एक मल्टीथ्रेडेड संपीड़न प्रोग्राम जो बड़ी फ़ाइलों के साथ उपयोग किए जाने पर बहुत अधिक संपीड़न अनुपात और गति प्राप्त कर सकता है। यह अधिकतम संपीड़न के लिए zpaq और lzma के संयुक्त संपीड़न एल्गोरिदम का उपयोग करता है, अधिकतम गति के लिए lzo, और rzip की लंबी अवधि के अतिरेक में कमी। यह रैम आकार में वृद्धि के साथ बड़े पैमाने पर बनाया गया है, जिससे संपीड़न में और सुधार होता है। आकार या गति अनुकूलन दोनों में से एक विकल्प या तो बेहतर संपीड़न के लिए अनुमति देता है, यहां तक ​​कि lzma प्रदान भी कर सकता है, या gzip की तुलना में बेहतर गति, लेकिन bzip2 आकार संपीड़न स्तरों के साथ।

sudo apt-get install lrzip

एक छोटी सी संपीड़न बेंचमार्क (बनाई गई परीक्षण ओली का उपयोग करके):

मूल फ़ाइल आकार - 100 एमबी
PBZIP2 - 101 एमबी (1% बड़ा)
PXZ - 101 एमबी (1% बड़ा)
PLZIP - 102 एमबी (1% बड़ा)
LRZIP - 101 एमबी (1% बड़ा)
PIGZ - 101 एमबी (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%)


उदाहरण बहुत अच्छा होगा।
पृथ्वीमान

@earthmeLon ओली का जवाब पढ़ें जिसमें उदाहरण फ़ाइल बनाने का उल्लेख है। फिर मेरे द्वारा उपयोग किए जाने वाले आदेशों के साथ आगे बढ़ें।
लुइस अल्वाराडो 22

मुझे आशा है कि इनका उत्पादन अंतर-संगत है। उदाहरण के लिए उत्पादन से lrzipअसम्पीडित का उपयोग कर असम्पीडित किया जा सकता है pbzip2
विनीत मेनन

10

उपरोक्त अच्छे सारांश के अलावा (धन्यवाद लुइस), इन दिनों लोग PIXZ पर भी विचार करना चाह सकते हैं, जो इसके अनुसार README है (स्रोत: https://github.com/vasi/pixz - मैंने स्वयं दावों का सत्यापन नहीं किया है ) पीएक्सजेड से अधिक कुछ फायदे हैं।

[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 माना जाता है कि अधिक मेमोरी और डिस्क कुशल है, और इसमें एक वैकल्पिक अनुक्रमण सुविधा है जो संपीड़ित टार फ़ाइलों के व्यक्तिगत घटकों के अपघटन को गति देती है।


हालांकि, यह मेरी समझ है कि pixzअभिलेखागार मानक xzप्रारूप के साथ संगत नहीं हैं , जिस तरह से pxzहोगा।
Mxx

5
@ XXX: फ़ाइल प्रारूप संगत हैं। अभिलेखागार pixzdecompress कर सकते हैं xzऔर अभिलेखागार decompress xzकर सकते हैं pixz। हालाँकि, कमांड लाइन विकल्प xzऔर pixzअलग - अलग हैं।
स्नोबॉल

इंडेक्सेबल फाइल्स के लिए एक बड़ी जीत है pixz
9

8

अपडेट करें:

XZ Utils v5.2.0 के बाद से बहु-थ्रेडेड संपीड़न का समर्थन करता है, यह मूल रूप से गलती से बहु-थ्रेडेड विसंपीड़न के रूप में प्रलेखित था।

उदाहरण के लिए: tar -cf - source | xz --threads=0 > destination.tar.xz


आप भी चला सकते हैं export XZ_DEFAULTS="-T 0" और फिर अपने सामान्य टार कॉल का उपयोग कर सकते हैं tar cJf target.tar.xz source
scai

4

lzop एक व्यवहार्य विकल्प भी हो सकता है, हालांकि यह सिंगल-थ्रेडेड है।

यह बहुत तेजी से लेम्पेल-ज़िव-ओबरहूमर संपीड़न एल्गोरिथ्म का उपयोग करता है जो मेरे अवलोकन में गज़िप की तुलना में 5-6 गुना अधिक तेज है।

नोट: हालांकि यह अभी तक बहु-थ्रेडेड नहीं है, यह संभवतः 1-4 कोर सिस्टम पर पिग्मेंट को आउटपरफॉर्म करेगा। इसलिए मैंने इसे पोस्ट करने का फैसला किया, भले ही यह सीधे आपके सवाल का जवाब न दे। यह कोशिश करो, यह केवल एक सीपीयू का उपयोग करते हुए और थोड़ा खराब होने पर आपकी सीपीयू अड़चन की समस्या को हल कर सकता है। मैंने पाया कि अक्सर पिगज़ की तुलना में यह एक बेहतर समाधान है।


क्या यह केवल डिकम्प्रेसिंग में बेहतर नहीं है?
संप्रदाय गज़िप की

मैं यह भी गवाही दे सकता हूं कि lzop सुपर फास्ट है। Proxmox डिफ़ॉल्ट रूप से वर्चुअल मशीनों के बैकअप के लिए lzop का उपयोग करता है।
लोनी बेस्ट

1
lz4 और भी तेज है (और इसमें एक बहु-थ्रेडेड संस्करण है)।
डेविड बालैसिक


3

यह वास्तव में एक उत्तर नहीं है, लेकिन मुझे लगता है कि यह मेरे बेंचमार्क को वास्तविक जीवन परिदृश्य में वास्तविक एचडब्ल्यू पर gzipऔर pigzवास्तविक एचआर पर तुलना करने के लिए पर्याप्त प्रासंगिक है। जैसा कि pigzमैं अब से उपयोग करने के लिए चुना है कि व्यक्तिगत रूप से विकसित विकास है।

मेटाडाटा:

  • हार्डवेयर का इस्तेमाल किया: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz(4c / 8t) + Nvme SSD
  • GNU / Linux वितरण: Xubuntu 17.10 (artful)
  • gzip संस्करण: 1.6
  • pigz संस्करण: 2.4
  • फ़ाइल को संकुचित किया जा रहा है 9.25 GiB SQL डंप

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एल्गोरिथ्म की सिफारिश नहीं करूंगा क्योंकि संपीड़न ने डिस्क स्पेस के एक-नहीं-महत्वपूर्ण मात्रा के लिए जबरदस्त समय लिया।

परिणाम आकार फ़ाइल:

  • सर्वोत्तम s: 1309M
  • क्विक s: 1680M
  • zopfli : 1180M

2

Zstandard v1.2.0 v1 के बाद से बहु-थ्रेडिंग का समर्थन करता है । यह gzip को बदलने के लिए एक बहुत तेज़ कंप्रेसर और डीकंप्रेसर है और यह कुशल के रूप में संपीड़ित भी कर सकता है - यदि बेहतर नहीं है - अपने उच्चतम स्तरों पर LZMA2 / XZ के रूप में।

आपको इन लाभों को प्राप्त करने के लिए कलात्मक या नए रिलीज़ का उपयोग करना होगा या स्रोत से नवीनतम संस्करण संकलित करना होगा। सौभाग्य से यह बहुत अधिक निर्भरता में नहीं खींचता है।

  1. Zstd के v1.1.0 में एक 3rd पार्टी pzstd भी था।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.