मैं खुद को बहुत बड़ी फ़ाइलों (80-ish GB) को संकुचित करने के लिए पा रहा हूं, और मुझे आश्चर्य है कि (कमी) मेरी प्रणाली का प्रदर्शन कर रही है। मुझे लगभग 500 एमबी / मिनट रूपांतरण की गति मिलती है; का उपयोग करते हुए top, मैं एक CPU का उपयोग लगभग 100% पर कर रहा हूँ।
मुझे पूरा यकीन है कि यह (सिर्फ) डिस्क एक्सेस स्पीड नहीं है, क्योंकि एक tarफाइल बनाने के बाद (यह कि 80 जी फाइल कैसे बनाई गई थी) बस कुछ ही मिनट लगे (शायद 5 या 10), लेकिन 2 घंटे से अधिक समय के बाद भी मेरी सरल gzip कमांड अभी भी है नहीं हुआ।
संक्षेप में:
tar -cvf myStuff.tar myDir/*
87 G टार फ़ाइल बनाने के लिए <5 मिनट का समय लिया
gzip myStuff.tar
55G ज़िप फ़ाइल बनाते हुए दो घंटे 10 मिनट का समय लिया।
मेरा प्रश्न: क्या यह सामान्य है? क्या gzipचीजों को गति देने के लिए कुछ निश्चित विकल्प हैं? क्या यह आदेशों का उपयोग करने और उपयोग करने के लिए तेज़ होगा tar -cvfz? करने के लिए मैं देखा संदर्भ pigz- GZip की समानांतर कार्यान्वयन - लेकिन दुर्भाग्य से मैं मशीन मैं उपयोग कर रहा हूँ पर सॉफ़्टवेयर स्थापित नहीं कर सकते, तो यह है कि मेरे लिए एक विकल्प नहीं है। उदाहरण के लिए यह पहले का प्रश्न देखें ।
मैं इनमें से कुछ विकल्पों को स्वयं आजमाने और उन्हें समय देने का इरादा कर रहा हूं - लेकिन यह काफी संभावना है कि मैं विकल्पों के "जादू संयोजन" को नहीं मारूंगा। मुझे उम्मीद है कि इस साइट पर कोई व्यक्ति चीजों को गति देने के लिए सही चाल जानता है।
जब मेरे पास अन्य परीक्षणों के परिणाम उपलब्ध होंगे तो मैं इस प्रश्न को अपडेट करूंगा - लेकिन अगर किसी के पास विशेष रूप से अच्छी ट्रिक उपलब्ध है, तो मैं वास्तव में इसकी सराहना करूंगा। हो सकता है कि gzip को मेरे द्वारा महसूस किए जाने की तुलना में अधिक प्रसंस्करण समय लगे ...
अद्यतन करें
जैसा कि वादा किया गया था, मैंने नीचे दिए गए ट्रिक्स को सुव्यवस्थित करने की कोशिश की: संपीड़न की मात्रा को बदलें, और फ़ाइल के गंतव्य को बदलें। मुझे एक टार के लिए निम्नलिखित परिणाम मिले जो लगभग 4.1GB था:
flag user system size sameDisk
-1 189.77s 13.64s 2.786G +7.2s
-2 197.20s 12.88s 2.776G +3.4s
-3 207.03s 10.49s 2.739G +1.2s
-4 223.28s 13.73s 2.735G +0.9s
-5 237.79s 9.28s 2.704G -0.4s
-6 271.69s 14.56s 2.700G +1.4s
-7 307.70s 10.97s 2.699G +0.9s
-8 528.66s 10.51s 2.698G -6.3s
-9 722.61s 12.24s 2.698G -4.0s
तो हां, झंडे को डिफ़ॉल्ट -6से सबसे तेज में बदलना -1मुझे 30% स्पीडअप देता है, (मेरे डेटा के लिए) शायद ही ज़िप फ़ाइल के आकार में कोई बदलाव हुआ हो। चाहे मैं एक ही डिस्क का उपयोग कर रहा हूं या कोई अन्य अनिवार्य रूप से कोई अंतर नहीं करता है (मुझे किसी भी सांख्यिकीय महत्व को प्राप्त करने के लिए इसे कई बार चलाना होगा)।
अगर किसी को दिलचस्पी है, तो मैंने निम्नलिखित दो लिपियों का उपयोग करके इन समयसीमाओं को उत्पन्न किया:
#!/bin/bash
# compare compression speeds with different options
sameDisk='./'
otherDisk='/tmp/'
sourceDir='/dirToCompress'
logFile='./timerOutput'
rm $logFile
for i in {1..9}
do /usr/bin/time -a --output=timerOutput ./compressWith $sourceDir $i $sameDisk $logFile
do /usr/bin/time -a --output=timerOutput ./compressWith $sourceDir $i $otherDisk $logFile
done
और दूसरी स्क्रिप्ट ( compressWith):
#!/bin/bash
# use: compressWith sourceDir compressionFlag destinationDisk logFile
echo "compressing $1 to $3 with setting $2" >> $4
tar -c $1 | gzip -$2 > $3test-$2.tar.gz
तीन बातें ध्यान दें:
/usr/bin/timeइसके बजाय का उपयोग करनाtime, क्योंकि अंतर्निहित कमांड मेंbashGNU कमांड की तुलना में कई कम विकल्प हैं- मैंने
--formatविकल्प का उपयोग करने की जहमत नहीं उठाई हालांकि इससे लॉग फाइल को पढ़ने में आसानी होगी - मैंने एक स्क्रिप्ट-इन-ए-स्क्रिप्ट का उपयोग किया
timeथा, क्योंकि यह केवल एक पाइप्ड अनुक्रम में पहली कमांड पर काम करता था (इसलिए मैंने इसे एक एकल कमांड की तरह देखा ...)।
यह सब सीखने के साथ, मेरे निष्कर्ष हैं
-1झंडे के साथ चीजों को गति दें (स्वीकृत उत्तर)- बहुत अधिक समय डिस्क से पढ़ने की तुलना में डेटा को संपीड़ित करने में खर्च होता है
- तेजी से संपीड़न सॉफ्टवेयर में निवेश करें (
pigzएक अच्छा विकल्प जैसा लगता है)। - यदि आपके पास संपीड़ित करने के लिए कई फाइलें हैं, तो आप प्रत्येक
gzipकमांड को अपने स्वयं के धागे में रख सकते हैं और उपलब्ध सीपीयू (गरीब आदमीpigz) का अधिक उपयोग कर सकते हैं
सभी को धन्यवाद जिन्होंने मुझे यह सब सीखने में मदद की!
$> gzip -c myStuff.tar | pv -r -b > myStuff.tar.gzआपको दिखाएगा कि आपकी मशीन कितनी तेजी से सामान को संकुचित कर रही है। साइड-नोट 2: परिणाम को एक अलग डिस्क पर संग्रहीत करें।
man, और मैंने इसे दूर तक नहीं पढ़ा (क्योंकि यह 'सिंगल लेटर कमांड' द्वारा क्रमबद्ध है, जो है -#) । वह मुझे RTFM सिखाएगा! यह मैं कोशिश करता हूँ अगली बात होगी!
pigzआप इसे संस्थापित कर सकते हैं और जहाँ भी आप इसे बनाने के लिए हुआ है, इसे स्थापित किए बिना चला सकते हैं। यदि कोई संकलक नहीं है, तो आप इसे दूसरे कंप्यूटर पर क्रॉस-कंपाइल कर सकते हैं, हालांकि यह इसके लायक होने की तुलना में अधिक प्रयास में शुरू हो रहा है। (तेजी से चलाने के लिए आपको इस संपीड़न की कितनी बुरी तरह आवश्यकता है, इस पर निर्भर करता है।)