খুব বড় (100 জি) ফাইল জিপ করার সময়


27

আমি নিজেকে অনেকগুলি বড় ফাইল (৮০-ইশ গিগাবাইট) সংকুচিত করতে দেখেছি এবং আমার সিস্টেমটি যে গতির (অভাব) প্রদর্শন করছে তাতে আমি অবাক হয়েছি। আমি প্রায় 500 এমবি / মিনিটের রূপান্তর গতি পাই; ব্যবহার করে top, আমি প্রায় একক সিপিইউ ব্যবহার করছে বলে মনে হচ্ছে 100%।

আমি নিশ্চিত যে এটি (কেবল) ডিস্ক অ্যাক্সেসের গতি নয়, যেহেতু কোনও tarফাইল তৈরি করা (যেভাবে 80G ফাইলটি তৈরি হয়েছিল) কয়েক মিনিট সময় নিয়েছিল (সম্ভবত 5 বা 10), তবে 2 ঘন্টারও বেশি সময় পরেও আমার সহজ জিপিপ কমান্ডটি এখনও রয়েছে শেষ না.

সংক্ষেপে:

tar -cvf myStuff.tar myDir/*

একটি 87 জি টার ফাইল তৈরি করতে <5 মিনিট সময় নিয়েছে

gzip myStuff.tar

55 ঘন্টা জিপ ফাইল তৈরি করে দুই ঘন্টা 10 মিনিট সময় নিয়েছে।

আমার প্রশ্ন: এটা কি স্বাভাবিক? gzipজিনিসগুলি গতি বাড়ানোর জন্য কিছু বিকল্প আছে ? কমান্ডগুলি ব্যবহার করে ব্যবহার করা tar -cvfzকি দ্রুত হবে ? আমি জিজেপের সমান্তরাল বাস্তবায়নpigz - এর রেফারেন্স দেখেছি - তবে দুর্ভাগ্যক্রমে আমি যে মেশিনটি ব্যবহার করছি তার মধ্যে আমি সফ্টওয়্যার ইনস্টল করতে পারছি না, এটি আমার পক্ষে বিকল্প নয় is উদাহরণস্বরূপ এই আগের প্রশ্নটি দেখুন

আমি এই বিকল্পগুলির কিছু নিজের এবং চেষ্টা করার ইচ্ছা করছি - তবে এটি সম্ভবত সম্ভাব্য যে আমি বিকল্পগুলির "ম্যাজিক সংমিশ্রণ "টিকে আঘাত করব না। আমি আশা করছি যে এই সাইটের কেউ জিনিসগুলি দ্রুত করার জন্য সঠিক কৌশলটি জানে।

আমার কাছে অন্যান্য পরীক্ষার ফলাফল উপলব্ধ হলে আমি এই প্রশ্নটি আপডেট করব - তবে কারও কাছে যদি বিশেষভাবে ভাল কৌশল উপলব্ধ থাকে তবে আমি সত্যিই এটির প্রশংসা করব। সম্ভবত জিজিপ আমার প্রসেসিংয়ের চেয়ে বেশি সময় নিচ্ছে ...

হালনাগাদ

প্রতিশ্রুতি হিসাবে, আমি নীচে মিষ্ট কৌশলগুলি চেষ্টা করেছি: সংক্ষেপণের পরিমাণ পরিবর্তন করুন এবং ফাইলের গন্তব্য পরিবর্তন করুন change প্রায় 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

তিনটি বিষয় লক্ষণীয়:

  1. /usr/bin/timeপরিবর্তে ব্যবহার করা time, যেহেতু বিল্ট-ইন কমান্ডের bashজিএনইউ কমান্ডের চেয়ে অনেক কম বিকল্প রয়েছে
  2. --formatলগ ফাইলটি পড়া সহজ করে দেবে যদিও আমি বিকল্পটি ব্যবহার করে বিরক্ত করিনি
  3. আমি একটি স্ক্রিপ্ট-ইন-এ-স্ক্রিপ্ট ব্যবহার করেছি যেহেতু timeপাইপ সিকোয়েন্সে কেবল প্রথম কমান্ডটিতেই কাজ করছে (তাই আমি এটিকে একক কমান্ডের মতো দেখিয়েছি ...)।

এই সমস্ত শিখেছি সঙ্গে, আমার সিদ্ধান্তে হয়

  1. -1পতাকা দিয়ে জিনিসগুলির গতি বাড়ান (স্বীকৃত উত্তর)
  2. ডিস্ক থেকে পড়ার চেয়ে ডেটা সংকুচিত করতে অনেক বেশি সময় ব্যয় হয়
  3. দ্রুত সংকোচনের সফ্টওয়্যারটিতে বিনিয়োগ করুন ( pigzভাল পছন্দ বলে মনে হচ্ছে)।
  4. সংকোচনের জন্য আপনার কাছে একাধিক ফাইল থাকলে আপনি প্রতিটি gzipকমান্ডকে তার নিজস্ব থ্রেডে রাখতে পারেন এবং উপলব্ধ সিপিইউ ব্যবহার করতে পারেন (দরিদ্র লোক pigz)

যারা আমাকে এই সমস্ত শিখতে সহায়তা করেছেন তাদের সবাইকে ধন্যবাদ!


tar -cvf কোনও সংকোচন করে না তাই এটি দ্রুত হবে
parkydr

2
@ ফ্লোরিস: আপনি কী ধরনের ডেটা সংকোচনের চেষ্টা করছেন? পার্শ্ব-নোট: $> gzip -c myStuff.tar | pv -r -b > myStuff.tar.gzআপনাকে দেখিয়ে দেবে যে আপনার মেশিনটি কীভাবে স্ট্রেসটিকে সংকুচিত করছে। পার্শ্ব-নোট 2: ফলাফলটি অন্য কোনও ডিস্কে সংরক্ষণ করুন।
আকির

3
দুঃখিত, আমি আপনার প্রশ্ন ভুল পড়েছি। দ্রুততম সংকোচন নির্বাচন করার জন্য জিজিপ-এ বিকল্প রয়েছে
parkydr

1
@ পারকাইডার: - প্রাতঃরাশ বিকল্পটি এমন একটি যা সম্পর্কে আমি জানতাম না ... এটি পৃষ্ঠার সর্বশেষতমটি manএবং আমি এখনও পর্যন্ত পড়িনি (কারণ এটি 'সিঙ্গেল লেটার কমান্ড' দ্বারা সাজানো হয়েছে, যা -#) । এটি আরটিএফএমকে শিখিয়ে দেবে! এটি আমি পরের জিনিস চেষ্টা করব!
ফ্লোরিস

2
মনে রাখবেন যে মেশিনে যদি কোনও উপযুক্ত সংকলক উপলব্ধ থাকে এবং আপনার যে ডিরেক্টরিতে অ্যাক্সেস রয়েছে সেগুলি থেকে বাইনারিগুলি নির্বাহের জন্য ফাইল সিস্টেমের অনুমতিগুলি সেট করা না থাকে, আপনি pigzএটি ইনস্টল না করেই যেখানেই এটি নির্মাণ করার ক্ষেত্রে ঘটেছে সেখান থেকে এটি সঙ্কলন করতে এবং চালনা করতে পারেন । যদি কোনও সংকলক না থাকে তবে আপনি এটি অন্য কম্পিউটারে ক্রস-সংকলন করতে পারতেন, যদিও এটি তার চেয়ে বেশি চেষ্টাতে শুরু করতে পারে। (দ্রুত চালানোর জন্য আপনার এই সংকোচনের কতটা খারাপভাবে প্রয়োজন তার উপর নির্ভর করে আমার ধারণা))
ডেভিড জেড

উত্তর:


27

আপনি জিজিপের গতি ব্যবহার করে --fast --bestবা -#যেখানে # 1 এবং 9 এর মধ্যে একটি নম্বর (1 দ্রুততম তবে কম সংকোচনের, 9 ধীরতম তবে বেশি সংক্ষেপণ) পরিবর্তন করতে পারেন। ডিফল্টভাবে জিজিপ 6 স্তরে চলে।


26

জিজিপের তুলনায় টারে এত কম সময় নেয় কারণ হ'ল আপনার ফাইলগুলি একটি একক ফাইলে অনুলিপি করার ক্ষেত্রে খুব সামান্য কম কম্পিউটেশনাল ওভারহেড থাকে (যা এটি করে তা)। অন্যদিকে জিজিপ, টার ফাইলটি সঙ্কুচিত করতে আসলে সংক্ষেপণ অ্যালগরিদম ব্যবহার করছে।

সমস্যাটি হ'ল gzip একক থ্রেডে সীমাবদ্ধ (যেমন আপনি আবিষ্কার করেছেন)।

পিগজ প্রবেশ করান , যা সংক্ষেপণ সম্পাদন করতে একাধিক থ্রেড ব্যবহার করতে পারে। এটি কীভাবে ব্যবহার করবেন তার একটি উদাহরণ হ'ল:

tar -c --use-compress-program=pigz -f tar.file dir_to_zip

একটি বোনের সাইটে - ব্যবহার-সংক্ষেপণ-প্রোগ্রাম বিকল্পটির একটি সুন্দর সাফল্য সংক্ষিপ্তসার রয়েছে ।


আপনার উত্তর এবং লিঙ্কগুলির জন্য ধন্যবাদ। আমি আসলে প্রশ্নে পিগজ উল্লেখ করেছি।
ফ্লোরিস

এটাই এখানে সঠিক উত্তর ..!
স্টলভিক

4

আমি প্রায় 100% একক সিপিইউ ব্যবহার করছি বলে মনে হচ্ছে।

এর দ্বারা বোঝা যাচ্ছে যে I / O পারফরম্যান্স সমস্যা নেই তবে কম্প্রেশনটি কেবল একটি থ্রেড ব্যবহার করছে (যা gzip এর ক্ষেত্রে হবে)।

যদি আপনি অন্যান্য সরঞ্জামগুলি ইনস্টল করার জন্য প্রয়োজনীয় অ্যাক্সেস / চুক্তিটি অর্জন করতে পরিচালনা করেন তবে 7 জিপ মাল্টি কোর সিপিইউগুলির সুবিধা নিতে একাধিক থ্রেডকে সমর্থন করে, যদিও আমি নিশ্চিত নই যে এটি gzip ফর্ম্যাটটির সাথে তার নিজস্বও প্রসারিত কিনা I'm

আপনি যদি আপাতত জিজিপ ব্যবহার করতে আটকে থাকেন এবং সংকোচনের জন্য একাধিক ফাইল রেখেছেন তবে আপনি সেগুলি পৃথকভাবে সংকোচনের চেষ্টা করতে পারেন - এইভাবে আপনি সমান্তরালে একাধিক প্রক্রিয়া চালিয়ে সেই মাল্টি-কোর সিপিইউ ব্যবহার করবেন। এটি অত্যধিক না হওয়ার বিষয়ে সতর্ক থাকুন কারণ আপনার আই / ও সাবসিস্টেমের সক্ষমতা কাছাকাছি পৌঁছানোর সাথে সাথেই মাথা নড়াচড়া করার প্রবণতাটি তাত্পর্যপূর্ণ হয়ে ওঠার সাথে সাথে (আপনি যদি একটি প্রক্রিয়া / থ্রেড ব্যবহার করে যাচ্ছিলেন তার চেয়ে কম) নামিয়ে দেবেন বোতলের।


আপনার ইনপুট জন্য ধন্যবাদ। আপনি আমাকে একটি ধারণা দিয়েছেন (যার জন্য আপনি একটি উত্সাহ পাবেন): যেহেতু তৈরি করার জন্য আমার একাধিক সংরক্ষণাগার রয়েছে আমি কেবল স্বতন্ত্র আদেশগুলি অনুসরণ করতে পারি একটি &- তারপরে সিস্টেমটিকে সেখান থেকে এটি দেখাশোনা করা যাক। প্রত্যেকটি তার নিজস্ব প্রসেসরে চালিত হবে, এবং যেহেতু আমি I / O এর চেয়ে কমপ্রেসনের চেয়ে অনেক বেশি সময় ব্যয় করেছি, সেগুলির 10 টি করার জন্য এটি করতে একই সময় লাগবে। সুতরাং আমি একক থ্রেডেড এক্সিকিউটেবলের কাছ থেকে "মাল্টি কোর পারফরম্যান্স" পেয়েছি ...
ফ্লোরিস

1

যে কেউ পিগজ এ উপলব্ধ প্রসেসের সংখ্যাটি কাজে লাগাতে পারে যা নীচের কমান্ডের মতো দ্রুত গতি সম্পন্ন হয়

tar cf - সংরক্ষণাগার থেকে ডিরেক্টরি | pigz -0 -p largenumber> mydir.tar.gz

উদাহরণ - tar cf - patha | pigz -0 -p 32> patha.tar.gz

পোস্টে প্রস্তাবিত পদ্ধতিগুলির চেয়ে এটি সম্ভবত দ্রুততর হয় -p হ'ল যে কোনও চলমান প্রক্রিয়াগুলির সংখ্যা। আমার ব্যক্তিগত অভিজ্ঞতাটিতে একটি খুব বড় মান নির্ধারণের ক্ষেত্রে কার্যকারিতা ক্ষতিগ্রস্থ করে না যদি সংরক্ষণাগারভুক্ত করা ডিরেক্টরিতে বড় সংখ্যক ছোট ফাইল থাকে। অন্যটি হিসাবে বিবেচিত ডিফল্ট মান 8। বড় ফাইলগুলির জন্য, আমার প্রস্তাবটি এই মানটি সিস্টেমে সমর্থিত মোট থ্রেডের সংখ্যা হিসাবে সেট করা হবে।

32 সিপিইউ মেশিনের ক্ষেত্রে পি = 32 এর মান নির্ধারণের উদাহরণ সহায়তা করে।

0টি দ্রুততম পিগজ সংক্ষেপণের জন্য বোঝানো হয় কারণ এটি সংরক্ষণাগারটিকে সংকুচিত করে না এবং গতিতে ফোকাস করে। সংক্ষেপণের জন্য ডিফল্ট মান is

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.