bzip2 बहुत धीमा। एकाधिक कोर avaible हैं


31

मैं यह कमांड चला रहा हूं:

pg_dumpall | bzip2 > cluster-$(date --iso).sql.bz2

यह भी लंबा समय लेता है। मैं प्रक्रियाओं को देखता हूं top। Bzip2 प्रक्रिया में लगभग 95% लगते हैं और एक कोर के 5% को पोस्ट करते हैं। waप्रविष्टि कम है। इसका मतलब है कि डिस्क अड़चन नहीं है।

प्रदर्शन को बढ़ाने के लिए मैं क्या कर सकता हूं?

शायद bzip2 को अधिक कोर का उपयोग करने दें। सर्वर में 16 कोर हैं।

या bzip2 के लिए एक विकल्प का उपयोग करें?

प्रदर्शन को बढ़ाने के लिए मैं क्या कर सकता हूं?


8
जब तक आपको विरासत कारणों के लिए bzip2 की आवश्यकता नहीं होती है, यह मेरा व्यक्तिगत अनुभव रहा है कि xz bzip2 की तुलना में बेहतर संपीड़न / समय देता है। यदि आप एक नया पर्याप्त कार्यक्रम प्राप्त करते हैं, तो यह भी थ्रेडेड है, और यह आपको बड़े पैमाने पर समय और मेमोरी के उपयोग से बड़े पैमाने पर उपयोग की अनुमति देता है जो आप चाहते हैं पर निर्भर करता है।
पर्किन्स

6
"पिगज़" एक और विकल्प है - यह bzip2 आउटपुट के बजाय gzip आउटपुट का उत्पादन करता है। और मूल रूप से सब कुछ समझ में आता है।
क्रैगी

आप bzip2 संपीड़न के साथ GnuPG के साथ सममित रूप से इसे एन्क्रिप्ट करने का प्रयास कर सकते हैं; यह किसी अनजान कारण से, यहां तक ​​कि उच्चतम संपीड़न स्तर के साथ, इसे संपीड़ित करने की तुलना में आश्चर्यजनक रूप से तेज लगता है। यह संभव है कि एल्गोरिथ्म मेरे नियमित संपीड़न कार्यक्रम की दक्षता से तेज हो सकता है, जो कि जीयूआई-आधारित है।
Shule

2
आपने अपने वैकल्पिक एल्गोरिदम की आवश्यकताओं को नहीं बताया है। Bzip2 शानदार है। क्या यह आपके लिए महत्वपूर्ण है?
मार्टिन स्मिथ

7
" मैं प्रदर्शन बढ़ाने के लिए क्या कर सकता हूं? " - इसे संपीड़ित नहीं करें आप वास्तव में यह नहीं कहते हैं कि आपको इसे संकुचित करने की आवश्यकता है, और न करने वाले कार्य हमेशा कार्य करने की तुलना में तेज़ होते हैं। डिस्क को अड़चन बनाओ।
TessellatingHeckler

जवाबों:


49

आसपास कई संपीड़न एल्गोरिदम हैं, और bzip2धीमे लोगों में से एक है। सादा gzipआमतौर पर ज्यादा खराब संपीड़न नहीं होने पर काफी तेज हो जाता है। जब गति सबसे महत्वपूर्ण है, lzopमेरा पसंदीदा है। गरीब संपीड़न, लेकिन ओह इतनी जल्दी।

मैंने कुछ मज़ेदार होने और कुछ एल्गोरिदम की तुलना करने का फैसला किया, जिसमें उनके समानांतर कार्यान्वयन भी शामिल हैं। इनपुट फ़ाइल pg_dumpallमेरे वर्कस्टेशन, 1913 एमबी एसक्यूएल फ़ाइल पर कमांड का आउटपुट है । हार्डवेयर एक पुराना क्वाड-कोर i5 है। समय सिर्फ संपीड़न की दीवार-घड़ी का समय है। सभी 4 कोर का उपयोग करने के लिए समानांतर कार्यान्वयन निर्धारित किए जाते हैं। संपीड़न गति द्वारा क्रमबद्ध तालिका।

Algorithm     Compressed size        Compression          Decompression

lzop           398MB    20.8%      4.2s    455.6MB/s     3.1s    617.3MB/s
lz4            416MB    21.7%      4.5s    424.2MB/s     1.6s   1181.3MB/s
brotli (q0)    307MB    16.1%      7.3s    262.1MB/s     4.9s    390.5MB/s
brotli (q1)    234MB    12.2%      8.7s    220.0MB/s     4.9s    390.5MB/s
zstd           266MB    13.9%     11.9s    161.1MB/s     3.5s    539.5MB/s
pigz (x4)      232MB    12.1%     13.1s    146.1MB/s     4.2s    455.6MB/s
gzip           232MB    12.1%     39.1s     48.9MB/s     9.2s    208.0MB/s
lbzip2 (x4)    188MB     9.9%     42.0s     45.6MB/s    13.2s    144.9MB/s
pbzip2 (x4)    189MB     9.9%    117.5s     16.3MB/s    20.1s     95.2MB/s
bzip2          189MB     9.9%    273.4s      7.0MB/s    42.8s     44.7MB/s
pixz (x4)      132MB     6.9%    456.3s      4.2MB/s     7.9s    242.2MB/s
xz             132MB     6.9%   1027.8s      1.9MB/s    17.3s    110.6MB/s
brotli (q11)   141MB     7.4%   4979.2s      0.4MB/s     3.6s    531.6MB/s

यदि आपके सर्वर के 16 कोर पर्याप्त निष्क्रिय हैं, जिसका उपयोग सभी संपीड़न के लिए किया जा सकता है, pbzip2तो शायद यह आपको एक बहुत महत्वपूर्ण गति प्रदान करेगा। लेकिन आपको अभी भी अधिक गति की आवश्यकता है और आप ~ 20% बड़ी फ़ाइलों को सहन कर सकते हैं, gzipशायद यह आपकी सबसे अच्छी शर्त है।

अद्यतन: मैंने brotliतालिका में (TOOGAMs उत्तर देखें) परिणाम जोड़े । brotliतो मैं तीन सेटिंग्स जोड़ा रों संपीड़न गुणवत्ता सेटिंग, संपीड़न अनुपात और गति पर एक बहुत बड़ा प्रभाव पड़ता है ( q0, q1, और q11)। डिफ़ॉल्ट है q11, लेकिन यह बहुत धीमा है, और अभी भी इससे भी बदतर है xzq1हालांकि बहुत अच्छा लग रहा है; के रूप में एक ही संपीड़न अनुपातgzip , लेकिन उपवास के रूप में 4-5 बार!

अद्यतन:lbzip2 तालिका में जोड़ा गया (gmathts टिप्पणी देखें) और zstd(जॉनी की टिप्पणी), और इसे संपीड़न गति से हल किया। एक महान संपीड़न अनुपात के साथ तीन गुना तेजी से संपीड़ित करके परिवार को वापस चलाने में lbzip2डालता है! भी उचित लगता है लेकिन द्वारा हराया हैbzip2pbzip2zstdbrotli (q1) अनुपात और गति दोनों है।

मेरा मूल निष्कर्ष यह है कि सादा gzipसबसे अच्छा दांव लगभग मूर्खतापूर्ण लगने लगा है। हालांकि सर्वव्यापीता के लिए, यह अभी भी हरा नहीं सकता है;)


1
कहीं अधिक एल्गोरिदम के साथ समान-ईश तालिका के लिए, Mattmahoney.net/dc/text.html देखें ।
डॉगल

1
@ डगल मेला काफी मेरा परीक्षण ओपी के समान डेटा पर है, हालांकि ( pg_dumpallआउटपुट), इसलिए यह शायद थोड़ा अधिक प्रतिनिधि है :)
मार्सेल्म

1
zstd एक और है जो तालिका से गायब है - हमारी लॉग फ़ाइलों को संपीड़ित करने के लिए, मैंने पाया कि एक एकल कोर zstd प्रक्रिया तुलनीय संपीड़न अनुपात के साथ pbzip2 के 16 कोर को बेहतर बनाती है।
जॉनी

1
lz4थोड़ा तेज और अधिक कुशल है lzop, वैसे। यह हालांकि अधिक रैम का उपयोग करता है, जो एम्बेडेड सिस्टम में प्रासंगिक है।
डैनियल बी

1
यदि आप बहु-थ्रेडेड संस्करणों का परीक्षण करने के इच्छुक हैं, तो आप भी कोशिश कर सकते zstd -T4हैं। बहुत तेज़ सेटिंग्स के लिए, आप डिफॉल्ट के zstd -T4 -1रूप में कोशिश कर सकते हैं , जो संभवतः आपके द्वारा परीक्षण की गई सेटिंग है। zstd-3
सियान

37

Pbzip2 का उपयोग करें।

मैनुअल का कहना है:

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

यह आपके पास मौजूद प्रोसेसर की संख्या का पता लगाता है और तदनुसार धागे बनाता है।


यह ठीक है अगर आप एक फ़ाइल को संपीड़ित कर रहे हैं, तो यह एक पाइप के माध्यम से बुरी तरह से काम करता है
21 अक्टूबर 2017 को camelccc

@camelccc आप ऐसा क्यों कहते हैं? मुझे लगता है कि ऐसा बिल्कुल नहीं है। इष्टतम प्रदर्शन के लिए आपको इसके सामने पाइप पर एक तेज निर्माता या बड़े बफर की आवश्यकता है, लेकिन यह उतना ही सच है pixzऔर pigzएक पाइप पर भी।
माइकल - sqlbot

डिपेंड करता है कि वह कितना बड़ा है। यदि आपके पास एक बड़ा बफर है जैसा कि आप कहते हैं, यदि आप कुछ ऐसा कर रहे हैं जो भौतिक राम की तुलना में बहुत बड़ा है, तो मैंने पाया है कि चीजें अधिक दिलचस्प हो सकती हैं। जैसा कि आप कहते हैं कि किसी भी संपीड़न एल्गोरिदम के लिए शायद सच है।
camelccc

4
bzip2 मेढ़े बिट का उपयोग कर सकता है, इसलिए एक समय में 16 bzip कर्मचारी चलाने पर गैर-तुच्छ राम का उपभोग कर सकता है, 1GB से अधिक। बीटीडब्लू, lbzip2बेहतर गति, स्मृति उपयोग और मामूली बेहतर संपीड़न देने के लिए लगता है pbzip2। यहाँ बेंचमार्क हैं: vbtechsupport.com/1614
gmatht

@gmatht lbzip2अच्छी लग रही है! मैं अपने जवाब देने के लिए :) यह जोड़ा
marcelm

8

  • Google की ब्रेटली एक नया प्रारूप है जिसने हाल ही में ब्राउज़रों के भीतर कुछ व्यापक समर्थन प्राप्त किया है, क्योंकि इसमें कुछ प्रभावशाली संपीड़न, कुछ प्रभावशाली गति और शायद उन सभी विशेषताओं का सबसे प्रभावशाली संयोजन / संतुलन है।

    कुछ आंकड़े:

    ब्रेटली, डिफलेट, ज़ोफ़ली, LZMA, LZHAM और Bzip2 कम्पोज़र अलार्म की तुलना

    • उदाहरण के लिए, यह चार्ट रिपोर्टिंग संख्या जो ब्रेटली को Bzip2 की तुलना में 6-14 तेजी से दिखाता है।

    CanIUse.com: फ़ीचर: ब्रेटली माइक्रोसॉफ्ट एज, मोज़िला फ़ायरफ़ॉक्स, गूगल क्रोम, ऐप्पल सफारी, ओपेरा (लेकिन ओपेरा मिनी या माइक्रोसॉफ्ट इंटरनेट एक्सप्लोरर नहीं) द्वारा समर्थन दिखाती है।

    तुलना: ब्रॉटलि बनाम डिफलेट बनाम ज़ोपफली बनाम लज़मा बनाम लज़म बनाम बज़िप 2

    • यदि आप संपीड़न गति की तलाश कर रहे हैं, तो आप जिस चीज की तलाश कर रहे हैं वह इस चार्ट पर और सही है। (इस चार्ट के शीर्ष पर प्रविष्टियाँ तंग संपीड़न अनुपात दिखाती हैं। उच्च = तंग। हालांकि, यदि संपीड़न गति आपकी प्राथमिकता है, तो आप चार्ट पर और आगे क्या पंक्तियों तक पहुँचना चाहते हैं, इस पर अधिक ध्यान देना चाहते हैं।)
    तुलना: 7-ज़िप ZStandard तरीकों के लिए संपीड़न अनुपात बनाम संपीड़न गति

  • फेसबुक का ZStandard एक और विकल्प है, बिट्स को कम करने का प्रयास करता है, लेकिन डेटा को स्टोर करने के तरीके पर एक उच्च ध्यान केंद्रित करता है जो मिस्ड भविष्यवाणियों को कम करता है, जिससे तेज गति की अनुमति मिलती है। इसके होम पेज पर है: ZStandard के साथ छोटे और तेजी से डेटा संपीड़न
  • छिपकली ब्रेटली या ZStandard के रूप में संपीड़न के उच्च के रूप में नहीं मिलता है, लेकिन संपीड़न अनुपात में कुछ हद तक करीब हो सकता है, और काफी तेज हो सकता है (कम से कम इस चार्ट के अनुसार जो गति के बारे में है, हालांकि यह विघटन की सूचना दे रहा है)

आपने एक ऑपरेटिंग सिस्टम का उल्लेख नहीं किया है। अगर विंडोज, 7-ज़िप विथ ZStandard (रिलीज) 7-ज़िप का एक संस्करण है जिसे इन सभी एल्गोरिदम का उपयोग करने के लिए समर्थन प्रदान करने के लिए संशोधित किया गया है।


दिलचस्प है, मैंने पहले सुना था brotli, लेकिन मैं इसके बारे में भूल गया था। मैंने अपने उत्तर में इसे बेंचमार्क की तालिका में जोड़ दिया! मैं वास्तव में अपने प्रदर्शन से थोड़ा निराश था, गुणवत्ता सेटिंग 1 को छोड़कर, जहां इसने gzipउतनी ही उच्च गति पर समान संपीड़न अनुपात प्रदान किया ।
15

2

Zstd का प्रयोग करें । यदि यह फेसबुक के लिए पर्याप्त है, तो यह आपके लिए भी काफी अच्छा है।

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

अब, आपका एक SQL डंप संपीड़ित कर रहा है, जो बस के रूप में के रूप में यह हो सकता है के लिए शर्मनाक तुच्छ के बारे में है। यहां तक ​​कि सबसे गरीब कंप्रेशर्स भी उस तरह के डेटा पर अच्छा स्कोर करते हैं।
तो आप zstdएक कम संपीड़न स्तर के साथ चल सकते हैं , जो दर्जनों बार तेजी से चलेगा और अभी भी उस डेटा पर 95-99% उसी संपीड़न को प्राप्त करेगा।

एक बोनस के रूप में, यदि आप अक्सर ऐसा कर रहे हैं और कुछ अतिरिक्त समय का निवेश करना चाहते हैं, तो आप zstdकंप्रेसर को समय से पहले "ट्रेन" कर सकते हैं , जो संपीड़न अनुपात और गति दोनों को बढ़ाता है। ध्यान दें कि अच्छी तरह से काम करने के लिए प्रशिक्षण के लिए, आपको इसे व्यक्तिगत रिकॉर्ड खिलाना होगा, न कि पूरी बात। जिस तरह से उपकरण काम करता है, वह प्रशिक्षण के लिए कई छोटे और कुछ इसी तरह के नमूनों की अपेक्षा करता है, न कि एक विशाल बूँद।


बेहतर अभी भी, मल्टीकोर मशीनों पर pzstd (समानांतर संस्करण) का उपयोग करें
बोरोविस

1

ऐसा लगता है कि समायोजन (कम करना) ब्लॉक का आकार संपीड़न समय पर महत्वपूर्ण प्रभाव डाल सकता है।

यहां मेरे मशीन पर किए गए प्रयोग के कुछ परिणाम दिए गए हैं। मैंने timeनिष्पादन समय को मापने के लिए कमांड का उपयोग किया। input.txtएक ~ 250mb पाठ फ़ाइल है जिसमें मनमाना जोंस रिकॉर्ड होता है।

डिफ़ॉल्ट (सबसे बड़ा) ब्लॉक आकार का उपयोग करना ( --bestकेवल डिफ़ॉल्ट व्यवहार का चयन करता है):

# time cat input.txt | bzip2 --best > input-compressed-best.txt.bz

real    0m48.918s
user    0m48.397s
sys     0m0.767s

सबसे छोटे ब्लॉक आकार ( --fastतर्क) का उपयोग करना :

# time cat input.txt | bzip2 --fast > input-compressed-fast.txt.bz

real    0m33.859s
user    0m33.571s
sys     0m0.741s

यह थोड़ा आश्चर्यचकित करने वाला खोज था, जिस पर विचार करते हुए कहा गया है:

संपीड़न और विघटन की गति लगभग ब्लॉक आकार से अप्रभावित हैं


मेरा वर्तमान पसंदीदा pbzip2 है। क्या आपने भी यह कोशिश की है? यह सवाल एक ऐसे वातावरण के बारे में है जहां 16 कोर उपलब्ध हैं।
गुत्थी

@guettli दुर्भाग्य से मुझे bzip के साथ रहना होगा। मैं इसे Hadoop नौकरियों के लिए उपयोग कर रहा हूं और bzip वहां अंतर्निहित संपीड़न में से एक है। तो एक तरह से यह पहले से ही समानांतर है।
जकुब कुकुल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.