আমি নিজেকে অনেকগুলি বড় ফাইল (৮০-ইশ গিগাবাইট) সংকুচিত করতে দেখেছি এবং আমার সিস্টেমটি যে গতির (অভাব) প্রদর্শন করছে তাতে আমি অবাক হয়েছি। আমি প্রায় 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
তিনটি বিষয় লক্ষণীয়:
/usr/bin/time
পরিবর্তে ব্যবহার করাtime
, যেহেতু বিল্ট-ইন কমান্ডেরbash
জিএনইউ কমান্ডের চেয়ে অনেক কম বিকল্প রয়েছে--format
লগ ফাইলটি পড়া সহজ করে দেবে যদিও আমি বিকল্পটি ব্যবহার করে বিরক্ত করিনি- আমি একটি স্ক্রিপ্ট-ইন-এ-স্ক্রিপ্ট ব্যবহার করেছি যেহেতু
time
পাইপ সিকোয়েন্সে কেবল প্রথম কমান্ডটিতেই কাজ করছে (তাই আমি এটিকে একক কমান্ডের মতো দেখিয়েছি ...)।
এই সমস্ত শিখেছি সঙ্গে, আমার সিদ্ধান্তে হয়
-1
পতাকা দিয়ে জিনিসগুলির গতি বাড়ান (স্বীকৃত উত্তর)- ডিস্ক থেকে পড়ার চেয়ে ডেটা সংকুচিত করতে অনেক বেশি সময় ব্যয় হয়
- দ্রুত সংকোচনের সফ্টওয়্যারটিতে বিনিয়োগ করুন (
pigz
ভাল পছন্দ বলে মনে হচ্ছে)। - সংকোচনের জন্য আপনার কাছে একাধিক ফাইল থাকলে আপনি প্রতিটি
gzip
কমান্ডকে তার নিজস্ব থ্রেডে রাখতে পারেন এবং উপলব্ধ সিপিইউ ব্যবহার করতে পারেন (দরিদ্র লোকpigz
)
যারা আমাকে এই সমস্ত শিখতে সহায়তা করেছেন তাদের সবাইকে ধন্যবাদ!
$> gzip -c myStuff.tar | pv -r -b > myStuff.tar.gz
আপনাকে দেখিয়ে দেবে যে আপনার মেশিনটি কীভাবে স্ট্রেসটিকে সংকুচিত করছে। পার্শ্ব-নোট 2: ফলাফলটি অন্য কোনও ডিস্কে সংরক্ষণ করুন।
man
এবং আমি এখনও পর্যন্ত পড়িনি (কারণ এটি 'সিঙ্গেল লেটার কমান্ড' দ্বারা সাজানো হয়েছে, যা -#
) । এটি আরটিএফএমকে শিখিয়ে দেবে! এটি আমি পরের জিনিস চেষ্টা করব!
pigz
এটি ইনস্টল না করেই যেখানেই এটি নির্মাণ করার ক্ষেত্রে ঘটেছে সেখান থেকে এটি সঙ্কলন করতে এবং চালনা করতে পারেন । যদি কোনও সংকলক না থাকে তবে আপনি এটি অন্য কম্পিউটারে ক্রস-সংকলন করতে পারতেন, যদিও এটি তার চেয়ে বেশি চেষ্টাতে শুরু করতে পারে। (দ্রুত চালানোর জন্য আপনার এই সংকোচনের কতটা খারাপভাবে প্রয়োজন তার উপর নির্ভর করে আমার ধারণা))