অত্যধিক সিপিইউ এবং ডিস্ক ব্যবহার করা থেকে রোধ করা হচ্ছে (যদি পুরানো ল্যাপটপ ক্রাশ হয় 100%)


15

আমি 1 টেরাবাইট ডেটা একটি বাহ্যিক ডিস্কে ব্যাকআপ করতে চাই।

আমি এই আদেশটি ব্যবহার করছি: tar cf /media/MYDISK/backup.tar mydata

সমস্যা: আমি যখনই 100% সিপিইউ বা 100% ডিস্ক ব্যবহার করি তখনই আমার দরিদ্র ল্যাপটপ হিমশীতল এবং ক্র্যাশ হয়ে যায় (আপনি যদি এই সম্পর্কে প্রতিক্রিয়া জানাতে চান তবে এখানে লিখুন ) । সুতরাং আমি প্রায় 50% সিপিইউ এবং 50% ডিস্ক সর্বাধিক স্থানে থাকতে চাই।

আমার প্রশ্ন: সিপিইউ এবং ডিস্ক tarকমান্ড দিয়ে কীভাবে থ্রোটল করবেন ?

রাইকিঙ্কের একটি --bwlimit বিকল্প রয়েছে তবে আমি একটি সংরক্ষণাগার চাই কারণ 1) অনেকগুলি ছোট ফাইল রয়েছে 2) আমি একটি ফাইলের পরিবর্তে একটি গাছ পরিচালনা করতে পছন্দ করি। এজন্যই আমি ব্যবহার করি tar


1
এত বিশাল টারবল বানানোর কী চতুর ধারণা: ডিডিডি 'সুন্দর' কমান্ডের কী?
jirib

1
@ জিরিসিচটকনিহা: nice100% সিপিইউ ব্যবহার রোধ করবে না
নিকোলাস রাউল

উত্তর:


22

আপনি pvপাইপের ব্যান্ডউইদথ থ্রোটল করতে ব্যবহার করতে পারেন । যেহেতু আপনার ব্যবহারের ক্ষেত্রে দৃ strongly়ভাবে IO- আবদ্ধ, তাই কোনও পাইপের মধ্য দিয়ে যাওয়ার অতিরিক্ত যুক্ত সিপিইউ ওভারহেডটি লক্ষণীয় হওয়া উচিত নয় এবং আপনার কোনও সিপিইউ থ্রোটলিং করার দরকার নেই।

tar cf - mydata | pv -L 1m >/media/MYDISK/backup.tar

1
আমি যা আশা করছিলাম তার থেকেও ভাল! আমি আইওকে 5 এমবি / সেকেন্ডে সীমাবদ্ধ করছি এবং সিপিইউ 13% এ থাকে (এনক্রিপশন চলমান যুক্তিসঙ্গত বলে মনে হয়)।
নিকোলাস রাউল

1
খুব সুন্দর!. অগ্রগতি বারটি মুছে ফেলার জন্য হয়ত-কি-ফ্ল্যাগেরও প্রস্তাব দিন।
szabgab 22'15

এত বড় কমান্ড !!! আপনার ডেবিয়ান / উবুন্টুতে এটি না থাকলে কেবল চালান apt-get install pv। আমি পরে `-b adding যুক্ত করার পরামর্শ দিচ্ছি -L 1m: এইভাবে একটি ইনক্রিমেন্টাল বাইট কাউন্টার ছাপানো হবে, প্রতি সেকেন্ডে আপডেট হবে। এইভাবে আপনি জানেন কত বাইট এখনও অবধি লেখা হয়েছে
লুকাফেরেরিও

এছাড়াও, দয়া করে নোট করুন যে আপনি যদি আউটপুট সংকুচিত করেন ( tar czfপরিবর্তে ব্যবহার করে tar cf) সীমাটি সংকুচিত আউটপুটকে বোঝায় (সুতরাং -L 1mআপনার ডিস্কের সাথে রাইটিংটি 1 এমবি / সেকেন্ডের বেশি হবে না .... তবে আপনার ডিস্ক পঠন সম্ভবত 1 এমবি / সেকেন্ডের মধ্যে হবে) এবং 5 এমবি / গুলি, আপনার সামগ্রীর ধরণের উপর নির্ভর করে)
লুকাফেরারিও

দুর্দান্ত কৌশল! এক্সজেড দিয়ে সংকুচিত করার সময়, আমি প্রথমে পিভি দিয়ে পাইপ করি তারপর এক্স জেড এর মাধ্যমে।
জিন-বার্নার্ড জেনসেন

8

আপনি সিপুলিমিট সরঞ্জামটি চেষ্টা করতে পারেন যা সিপিইউ শতাংশকে সীমাবদ্ধ করে না। এটি কোনও মানক সরঞ্জাম নয়, সুতরাং আপনাকে এটি ইনস্টল করতে হবে। এখানে পড়ুন এর একটি দ্রুত অংশ:

"সিপুলিমিট একটি হাতিয়ার যা কোনও প্রক্রিয়ার সিপিইউ ব্যবহার সীমিত করার চেষ্টা করে (শতাংশে প্রকাশিত হয়, সিপিইউয়ের সময় নয়)। [...] ব্যবহৃত সিপিইউ পরিমাণের নিয়ন্ত্রণগুলি প্রসেসগুলিতে সিগস্টপ এবং সিগনক পসিক্স সিগন্যাল প্রেরণ করা হয়। সব শিশুদের প্রক্রিয়াগুলি এবং নির্দিষ্ট প্রক্রিয়াটির থ্রেডগুলি একই শতাংশে সিপিইউ ভাগ করে নেবে। "

তারপরে আমি আইও ব্যবহার সীমিত করার জন্য আয়নিকে সুপারিশ করব, যদিও এটি একযোগে অ্যাক্সেস যা সীমাবদ্ধ থাকবে, সর্বাধিক থ্রুটপুট নয় ... এখানে কখনই কম ব্যবহার করা যায় তা নয়:

ionice -c 3 <your_command>

গ্রেট! মনে হচ্ছে সিপুলিমিটই আমি যা খুঁজছিলাম।
নিকোলাস রাউল

2

আপনি কম চালানোর জন্য কোনও প্রক্রিয়া পেতে পারেন না । আপনি niceএটিকে নিম্ন অগ্রাধিকার দিতে ব্যবহার করতে পারেন তবে এটি অন্যান্য প্রক্রিয়াগুলির সাথে সম্পর্কিত। প্রসেস চলাকালীন সিপিইউ কুলার চালনার উপায় হ'ল usleep(3)প্রক্রিয়াটি রান-স্টেটের বাইরে নির্দিষ্ট সময় ব্যয় করতে ব্যবহৃত হয় তবে এতে প্যাচিং tarবা প্রচুর পরিমাণে ব্যবহৃত LD_PRELOADপ্যাচ ফাংশন সরবরাহ করার প্রক্রিয়া ব্যবহার করা হয় tar(উদাঃ fopen(3))।

আমি সন্দেহ করি যে আপনার সেরা কাজের ক্ষেত্রগুলি হ'ল হার্ডওয়্যার যা আপনি সুপার ইউজারে উল্লেখ করেছেন: ল্যাপটপটি শীতল রাখা এবং / অথবা সিপিইউ ঘড়ি কমিয়ে দেওয়া।

একটি বিরক্তিকর তবে সম্ভবত কার্যকর টেকসই কাজ (একটি ক্লড্জ, সত্যই) একটি 'ম্যাক্রোস্কোপিক' পর্যায়ে কাজ করে। tarপ্রতি 200ms তে 100ms রান করার পরিবর্তে , আপনি এটিকে প্রতি দুটির মধ্যে এক সেকেন্ড রান করতে পারেন। দ্রষ্টব্য: এটি একটি ভয়ঙ্কর, ভয়াবহ ক্লাদ্জ। কিন্তু ওহে, এটি এমনকি কাজ করতে পারে!

tar cjf some-file.tar.bz2 /some-directory &
while true; do
    sleep 1  # Let it run for a second
    kill -STOP $! 2>/dev/null || break
    sleep 1  # Pause it for a second
    kill -CONT $! 2>/dev/null || break
done

প্রথম sleepঘুমের সময় সামঞ্জস্য করে, দ্বিতীয়টি রানটাইম সামঞ্জস্য করে। এখন যেমন দাঁড়িয়েছে, এটি একটি 50% শুল্কচক্র পেয়েছে। তাপমাত্রা কম রাখতে, আপনাকে সম্ভবত ডিউটি ​​চক্রটি কমিয়ে 25% বা তার চেয়ে কম করতে হবে (1 সেকেন্ড রান, 3 সেকেন্ড ঘুম = প্রতি 4 সেকেন্ডের = 25% শুল্ক চক্রের 1)। শেল কমান্ডটি sleepউপায় দ্বারা ভগ্নাংশের সময় নিতে পারে। আপনি এমনকি বলতে পারে sleep 0.1। এটি নিশ্চিত করার জন্য এটি 0.001 এর উপরে রাখুন এবং ভুলে যাবেন না যে স্ক্রিপ্টের প্রয়োগের সময়টিও যুক্ত করে।


+1 দুর্দান্ত ধারণা! আমি অনুমান করি এটি হিউজেনস প্রস্তাবিত সিপুলিমিট সরঞ্জামের সাথে সমান।
নিকোলাস রাউল

হুয়েজেন্সের সরঞ্জাম ব্যতীত আরও বেশি ভাল এবং ব্যবহারিক, কারণ এই উত্তরটি আমার নিজের +1 পেয়েছে। :)
অ্যালেক্সিয়াস

0

সিপিইউ সীমাবদ্ধ করার আরও সাধারণ উদ্দেশ্য উপায় /sys। এটি আপনি যা চান তাই মনে হচ্ছে যেহেতু অন্যান্য বিষয়গুলি tarগণনা ব্যয়বহুল কাজ সম্পাদন করতে সক্ষম, আপনি কেবল tarএটিই সবচেয়ে বেশি দেখছেন ।

এটি করার উপায় হ'ল:

  1. ফিরে যেতে /sys/devices/system/cpu/cpuX/cpufreqআপনার সিপিইউ প্রত্যেকের জন্য (প্রতিস্থাপন cpuXপ্রতিটি cpu 'র সহ)।
  2. তারপরে scaling_available_frequenciesআপনার সিপিইউ কী ফ্রিকোয়েন্সি সমর্থন করে তা দেখতে ফাইলটি দেখুন।
  3. একটি ফ্রিকোয়েন্সি চয়ন করুন (1234567 বলে দিন) এবং করুন echo 1234567 > scaling_max_freq

এটি সিপিইউকে নির্দিষ্ট ফ্রিকোয়েন্সি থেকে ওঠা থেকে বিরত রাখবে।


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