কখনো দশ বা শত শত গিগাবাইট ডেটা কপি বা সরানো হয়েছে? আপনি যদি তা করেন তবে আপনি অবশ্যই লক্ষ্য করেছেন যে সেই সময়ে সিস্টেমটি অনেক কম প্রতিক্রিয়াশীল হয়ে ওঠে। লিনাক্সে আপনি ionice
এর সাহায্যে এটি এড়াতে পারেন আদেশ।
I/O অগ্রাধিকার কি?
ইনপুট/আউটপুটের জন্য I/O সংক্ষিপ্ত। অনেক ধরনের I/O ডিভাইস আছে, কিন্তু এই ক্ষেত্রে এটি স্টোরেজ ডিভাইস সম্পর্কে।
প্রতিটি প্রক্রিয়া যা এই জাতীয় ডিভাইসে ডেটা পড়তে বা লিখতে চায় তার জন্য একটি শিডিউলিং ক্লাস এবং অগ্রাধিকার নম্বর (বা "সুন্দর" মান) বরাদ্দ করা হয়। এটি লিনাক্সে ext4 এর মতো ফাইল সিস্টেমে প্রযোজ্য। অন্যান্য ফাইল সিস্টেম, যেমন ZFS, ডিস্কে রিড/রাইট অপারেশনের সময় নির্ধারণের জন্য সামান্য ভিন্ন পদ্ধতি প্রয়োগ করতে পারে। এছাড়াও, এটি কাজ করার জন্য CFQ সময়সূচী সক্রিয় হওয়া উচিত। আপনি
দিয়ে চেক করতে পারেনcat /sys/block/*/queue/scheduler
একটি উচ্চ "সুন্দর" মান সহ একটি প্রক্রিয়ার অগ্রাধিকার কম থাকে৷ এর পিছনে যুক্তি হল যে সংখ্যা যত বেশি হবে, অন্যান্য প্রক্রিয়ার কাছে প্রক্রিয়াটি তত বেশি "সুন্দর"।
I/O অগ্রাধিকার কিভাবে কাজ করে?
একটি স্টোরেজ ডিভাইসে স্পষ্টতই সীমিত সংখ্যক I/O অপারেশন রয়েছে যা এটি প্রতি সেকেন্ডে (IOPS) করতে পারে। তাই যখন দুটি প্রক্রিয়া একই সময়ে পড়তে/লিখতে চায়, তারা প্রত্যেকে IOPS-এর একটি ভাগ পায়। যদি তাদের একই অগ্রাধিকার থাকে তবে তারা প্রায় 50% IOPS পাবে।
কিন্তু IOPS বিমূর্ত এবং জটিল মনে হতে পারে। সরলতার জন্য, আপনি শুধু শেষ ফলাফল সম্পর্কে চিন্তা করতে পারেন:পড়া/লেখার গতি। ধরে নিন আপনার ডিস্ক সর্বাধিক 100MB/s দিয়ে লিখতে পারে। প্রক্রিয়া A একটি লেখার কাজ শুরু করে। এটি 100MB/s দিয়ে ডিস্কে লেখে। প্রক্রিয়া বি বরাবর আসে এবং একই ডিস্কে লিখতে চায়। এটি প্রায় 50MB/s দিয়ে লিখবে, প্রক্রিয়া A লেখার গতি একই মান, 50MB/s এ নিয়ে আসবে। এখন, আপনি যদি B প্রসেসকে উচ্চতর I/O চমৎকার মান দেন, তাহলে এটি 20MB/s দিয়ে লিখবে এবং A-কে 80MB/s দিয়ে লিখতে দেবে। প্রক্রিয়া A সম্পন্ন হলে, প্রক্রিয়া B 100MB/s দিয়ে লিখতে শুরু করবে।
এই উদাহরণটি এমন কিছু বোঝার জন্য দরকারী যা কিছু লোককে বিভ্রান্ত করতে পারে। যদি একটি প্রক্রিয়ার খুব কম অগ্রাধিকার থাকে (উচ্চ সুন্দর মান), এর মানে এই নয় যে এটি সব সময় ধীরে ধীরে লিখবে। যদি এটি ডিস্ক ব্যবহার করে একমাত্র প্রক্রিয়া হয়, তবে এটি সর্বোচ্চ গতিতে পড়তে/লিখবে। কিন্তু যখন অন্যান্য প্রক্রিয়ার জন্য ডিস্কের প্রয়োজন হয়, তখন এটি অস্থায়ীভাবে পথ থেকে বেরিয়ে যাবে এবং তাদের আরও ডিস্ক ব্যান্ডউইথ ব্যবহার করতে দেবে। একটি কপি/রাইট অপারেশনের জন্য যা সম্পূর্ণ হতে কয়েক ঘন্টা সময় লাগবে, যদি আপনি সেই সময়ের মধ্যে আপনার কম্পিউটার ব্যবহার করতে চান তবে এটিকে কম অগ্রাধিকার দেওয়া একটি ভাল ধারণা৷
কিভাবে ionice কমান্ড ব্যবহার করবেন
কমান্ডের সাধারণ সিনট্যাক্স হল:
ionice -c scheduling_class -n priority_nice_value command
ionice শিডিউলিং ক্লাস
অলস৷ (ক্লাস 3):এই ক্লাসের প্রসেসগুলি শুধুমাত্র তখনই পড়া/লেখা যায় যখন অন্য কোন প্রোগ্রামের ডিস্ক অ্যাক্সেসের প্রয়োজন হয় না। এর মানে প্রক্রিয়াটি পূর্ণ গতিতে পড়া/লেখা হয় যখন এটির কোন প্রতিযোগিতা নেই। যখন অন্য একটি প্রোগ্রামের জন্য ডিস্ক সময়ের প্রয়োজন হয়, তখন নিষ্ক্রিয় শ্রেণীতে প্রক্রিয়াটি যা কিছু অবশিষ্ট থাকে তার সাথে শুধুমাত্র পড়া/লেখা হবে। 100MB/s থেকে এটি সাময়িকভাবে 5MB/s দিয়ে লিখতে পারে, তারপর অন্য প্রোগ্রামটি ডিস্ক অ্যাক্সেস করার পরে 100MB/s-এ ফিরে যেতে পারে। এটি দীর্ঘমেয়াদী চাকরির জন্য নিখুঁত ক্লাস যা আপনি আপনার সিস্টেমকে ধীর করতে চান না। এই শ্রেণীর জন্য কোন অগ্রাধিকার নির্দিষ্ট করতে হবে না।
উদাহরণ কমান্ড:
ionice -c 3 cp /home/user/largefile /Backups
সর্বোত্তম প্রচেষ্টা (শ্রেণি 2):0 এবং 7 এর মধ্যে একটি অগ্রাধিকার/সুন্দর মান নেয়। মনে রাখবেন, কম সংখ্যা মানে উচ্চ অগ্রাধিকার। আপনি যখন দুই বা ততোধিক প্রসেসের জন্য ডিস্ক টাইম ফাইন-টিউন করতে চান তখন এই ক্লাসটি ব্যবহার করুন৷
উদাহরণস্বরূপ, আপনি আপনার ব্যাকআপ দ্রুত শেষ করতে চান এবং এটিকে 0 এর সুন্দর মান বরাদ্দ করতে চান। আপনি ছয়টি মুভি অন্য ডিস্কে নিয়ে যাচ্ছেন কিন্তু তাড়াহুড়ো করছেন না, তাই আপনি এটিকে 7 এর একটি সুন্দর মান নির্ধারণ করুন।
উদাহরণ কমান্ড:
ionice -c 2 -n 0 backup_command
রিয়েলটাইম (শ্রেণি 1):শুধুমাত্র তখনই ব্যবহার করা উচিত যদি এটি অত্যাবশ্যক হয় যে প্রক্রিয়াটি যত তাড়াতাড়ি সম্ভব লিখতে হবে, অন্য কোনও প্রোগ্রাম দ্বারা নিরবচ্ছিন্নভাবে লিখতে হবে। বেশিরভাগ ব্যবহারকারীর কখনই এটির প্রয়োজন হবে না এবং বিশেষ ক্ষেত্রে ব্যতীত এটি এড়ানো উচিত। এছাড়াও 0 এবং 7 এর মধ্যে চমৎকার মান সমর্থন করে। শুধুমাত্র রুট এই ক্লাসটি ব্যবহার করতে পারে, যার মানে আপনি সম্ভবত sudo-এর সাথে কমান্ডটি উপসর্গ করবেন। নোট করুন যে রিয়েলটাইম ক্লাসে অগ্রাধিকার 0 সহ একটি প্রক্রিয়া অন্যান্য সংস্থান প্রক্রিয়াগুলিকে ক্ষুধার্ত করতে পারে। ব্যবহারিক পরিভাষায়, এর মানে হল যে অন্য একটি প্রোগ্রামকে কয়েক মেগাবাইট ডেটা লেখা/পড়া শেষ করতে মিনিট বা এমনকি ঘন্টা অপেক্ষা করতে হতে পারে। যত্ন সহকারে ব্যবহার করুন, শুধুমাত্র যদি আপনি নিশ্চিত হন যে আপনার এটি প্রয়োজন। যদি ক্লাস 2 বা 3-এর একটি অত্যাবশ্যক প্রক্রিয়ার জন্য ডিস্ক অ্যাক্সেসের প্রয়োজন হয়, তাহলে রিয়েলটাইম প্রক্রিয়া লেখা শেষ না হওয়া পর্যন্ত আপনার সিস্টেম হিমায়িত হতে পারে৷
উদাহরণ কমান্ড:
sudo ionice -c 1 -n 7 bash
উপযোগী আয়োনিস উদাহরণ
শেষ উদাহরণে, একটি কপি/মুভ কমান্ড চালানোর পরিবর্তে, একটি শেল চালু করা হয়েছে (ব্যাশ)। এখন আপনি সেই শেলটিতে টাইপ করা প্রতিটি পরবর্তী কমান্ড I/O শিডিউলিং ক্লাস এবং অগ্রাধিকারের উত্তরাধিকারী হবে। আপনি এটি একটি গ্রাফিক্যাল ইন্টারফেসেও করতে পারেন।
ionice -c 3 pcmanfm
শেষ কমান্ড LXDE ডেস্কটপ পরিবেশে একটি ফাইল এক্সপ্লোরার চালু করবে। আপনার নির্দিষ্ট ডেস্কটপের ফাইল এক্সপ্লোরারের নামের সাথে "pcmanfm" প্রতিস্থাপন করুন। এখন আপনি সেখানে শুরু করা সমস্ত ডিস্ক অপারেশন নিষ্ক্রিয় I/O শিডিউলিং ক্লাসের সাথে সঞ্চালিত হবে৷
অন্যান্য পরিস্থিতিতে, একটি অনুলিপি/সরানো অপারেশন ইতিমধ্যে সক্রিয় হতে পারে। এই ক্ষেত্রে আপনি একটি ভিন্ন উপায়ে ionice ব্যবহার করতে পারেন।
ionice -c 3 -p 4910
এটি প্রসেস আইডি 4910 দিয়ে চলমান প্রোগ্রামের অগ্রাধিকার শ্রেণীকে পরিবর্তন করে। আপনি আপনার টাস্ক ম্যানেজার বা pgrep
-এর মতো একটি কমান্ডের মাধ্যমে PID (প্রসেস আইডি) খুঁজে পেতে পারেন। .
উপসংহার
ionice ডেস্কটপগুলিতে দরকারী হতে পারে যেগুলি আপনি বড় ফাইলগুলি অনুলিপি/সরানোর সময় পিছিয়ে থাকতে চান না। তবে মনে রাখবেন এটি সার্ভারগুলিতে আরও বেশি কার্যকর হতে পারে। আপনি অবশ্যই চান না যে আপনি একটি ওয়েবসাইট হোস্ট করতে পারেন যেখানে আপনি সম্পূর্ণ ব্যাকআপ করার সময় আপনার দর্শকদের থেকে পিছিয়ে থাকতে পারেন।