আপনি কি কখনো দশক বা শতক গিগাবাইট ডেটা কপি বা মুভ করেছেন? যদি করেন, তবে নিশ্চিতভাবেই লক্ষ্য করেছেন যে সিস্টেম उस সময় অনেক কম রেসপন্সিভ হয়ে যায়। লিনাক্সে আপনি ionice কমান্ডের সাহায্যে এটা এড়াতে পারেন।
I/O প্রায়োরিটি কী?
I/O মানে ইনপুট/আউটপুট। I/O ডিভাইসের অনেক প্রকার আছে, কিন্তু এখানে স্টোরেজ ডিভাইসের কথা বলা হচ্ছে।
যে প্রসেস স্টোরেজ ডিভাইস থেকে ডেটা পড়তে বা লিখতে চায়, তাতে একটি শিডিউলিং ক্লাস এবং প্রায়োরিটি নম্বর (বা "nice" ভ্যালু) অ্যাসাইন করা হয়। লিনাক্সে এটি ext4-এর মতো ফাইলসিস্টেমে প্রযোজ্য। অন্যান্য ফাইলসিস্টেম, যেমন ZFS, ডিস্কে রিড/রাইট অপারেশন শিডিউল করার জন্য কিছুটা ভিন্ন পদ্ধতি বাস্তবায়ন করতে পারে। এছাড়া, এই কাজ করার জন্য CFQ শিডিউলার সক্রিয় থাকতে হবে। আপনি চেক করতে পারেন:
cat /sys/block/*/queue/scheduler
উচ্চ "nice" ভ্যালুওয়ালা প্রসেসের কম প্রায়োরিটি থাকে। এর পেছনের যুক্তি হলো, নম্বর যত বেশি, প্রসেসটি অন্যান্য প্রসেসের प्रति তত "nice" (সদয়)।
I/O প্রায়োরিটি কীভাবে কাজ করে?
একটি স্টোরেজ ডিভাইস স্পষ্টতই প্রতি সেকেন্ডে সীমিত সংখ্যক I/O অপারেশন সম্পাদন করতে পারে (IOPS)। তাই যখন দুটি প্রসেস একই সময়ে রিড/রাইট করতে চায়, তখন তাদের প্রতিটি IOPS-র একটি শেয়ার পায়। একই প্রায়োরিটি থাকলে, প্রতিটি প্রায় ৫০% IOPS পায়।
IOPS বিমূর্ত এবং জটিল মনে হতে পারে। সরলতার জন্য, আপনি চূড়ান্ত ফলাফলে ভাবতে পারেন: রিড/রাইট স্পীড। ধরি আপনার ডিস্ক সর্বোচ্চ ১০০MB/s-এ লিখতে পারে। প্রসেস A একটি রাইট অপারেশন শুরু করে। এটি ১০০MB/s-এ ডিস্কে লিখে। প্রসেস B আসে এবং একই ডিস্কে লিখতে চায়। এটি প্রায় ৫০MB/s-এ লিখবে, প্রসেস A-এর রাইট স্পীডও একই মান, ৫০MB/s-এ নামিয়ে আনে। এখন, যদি আপনি প্রসেস B-কে উচ্চতর I/O nice ভ্যালু দেন, তবে এটি ২০MB/s-এ লিখবে এবং প্রসেস A-কে ৮০MB/s-এ লিখতে দেবে। প্রসেস A শেষ হলে, প্রসেস B ১০০MB/s-এ লিখতে শুরু করবে।
এই উদাহরণটি কিছু ऐसी বুঝতে সাহায্য করে যা কিছু লোককে বিভ্রান্ত করতে পারে। যদি একটি প্রসেসের খুব কম প্রায়োরিটি (উচ্চ nice ভ্যালু) থাকে, তার মানে এটি নয় যে সবসময় ধীরে লিখবে। যদি এটি ডিস্ক ব্যবহার করার একমাত্র প্রসেস হয়, তবে এটি সর্বোচ্চ গতিতে রিড/রাইট করবে। কিন্তু যখন অন্যান্য প্রসেস ডিস্ক দরকার করবে, তবে এটি সাময়িকভাবে পাশে হটে যাবে এবং তাদের আরও ডিস্ক ব্যান্ডউইথ ব্যবহার করতে দেবে। ঘন্টোগুলো সময় নেওয়া একটি কপি/রাইট অপারেশনের জন্য, আপনি যদি সেই সময় কম্পিউটার ব্যবহার করতে চান, তবে এটিকে কম প্রায়োরিটি দেওয়া ভালো আইডিয়া।
ionice কমান্ড কীভাবে ব্যবহার করবেন
কমান্ডের সাধারণ সিনট্যাক্স:
ionice -c scheduling_class -n priority_nice_value command
ionice শিডিউলিং ক্লাস
আইডল (ক্লাস ৩): এই ক্লাসের প্রসেসগুলো শুধু তখন রিড/রাইট করে যখন অন্য কোনো প্রোগ্রাম ডিস্ক অ্যাক্সেস করতে চায় না। এর মানে, প্রসেসটি যখন কোনো প্রতিযোগিতা নেই তখন পুরো স্পীডে রিড/রাইট করে। যখন অন্য প্রোগ্রাম ডিস্ক টাইম চায়, আইডল ক্লাসের প্রসেস শুধু বাকি রিসোর্স দিয়ে রিড/রাইট করে। ১০০MB/s থেকে এটি সাময়িকভাবে ৫MB/s-এ লিখতে পারে, তারপর অন্য প্রোগ্রাম ডিস্ক অ্যাক্সেস শেষ হলে আবার ১০০MB/s-এ ফিরে যায়। এটি লম্বা সময় ধরে চলা যেসব কাজের জন্য সাদৃশ্য ক্লাস যাতে আপনার সিস্টেম ধীর না হয়। এই ক্লাসের জন্য কোনো প্রায়োরিটি নির্দিষ্ট করতে হয় না।
উদাহরণ কমান্ড:
ionice -c 3 cp /home/user/largefile /Backups
বেস্ট-এফোর্ট (ক্লাস ২): ০ থেকে ৭ পর্যন্ত প্রায়োরিটি/nice ভ্যালু নেয়। মনে রাখবেন, কম নম্বর মানে উচ্চ প্রায়োরিটি। দুটি বা ততোধিক প্রসেসের জন্য ডিস্ক টাইম ফাইন-টিউন করতে চাইলে এই ক্লাস ব্যবহার করুন।
উদাহরণস্বরূপ, আপনি আপনার ব্যাকআপ দ্রুত শেষ করতে চান এবং nice ভ্যালু ০ দেন। আপনি ছয়টি সিনেমা অন্য ডিস্কে মুভ করছেন কিন্তু জরুরি নয়, তাই এটিকে nice ভ্যালু ৭ দেন।
উদাহরণ কমান্ড:
ionice -c 2 -n 0 backup_command
রিয়েল-টাইম (ক্লাস ১): শুধু তখন ব্যবহার করা উচিত যখন প্রসেসটি যত তাড়াতাড়ি সম্ভব লিখতে হবে, অন্য কোনো প্রোগ্রাম দ্বারা বাধা না পাওয়া। অধিকাংশ ব্যবহারকারী কখনোই এর দরকার পাবে না এবং এটা এড়িয়ে যাওয়া উচিত, ব্যতিক্রম কেসগুলো বাদে। এটিও ০ থেকে ৭ পর্যন্ত nice ভ্যালু সাপোর্ট করে। শুধু রুট এটি ব্যবহার করতে পারে, অর্থাৎ আপনি কমান্ডের আগে sudo লাগাবেন। মনে রাখবেন, প্রায়োরিটি ০ সহ রিয়েল-টাইম ক্লাসের একটি প্রসেস অন্যান্য প্রসেসকে রিসোর্স থেকে বঞ্চিত রাখতে পারে। ব্যাবহারিক অর্থে, অন্য একটি প্রোগ্রামকে কয়েক মিনিট বা এমনকি ঘন্টা انتظار করতে হয়ে পারে কয়েক মেগাবাইট ডেটা রিড/রাইট করার জন্য। সতর্কতার সাথে ব্যবহার করুন, শুধু নিশ্চিত হলে যে আপনার এটি দরকার। যদি ক্লাস ২ বা ৩-এ একটি গুরুত্বপূর্ণ প্রসেস ডিস্ক অ্যাক্সেসের দরকার হয়, তবে রিয়েল-টাইম প্রসেস লিখা শেষ না হওয়া পর্যন্ত আপনার সিস্টেম ফ্রিজ করে যেতে পারে।
উদাহরণ কমান্ড:
sudo ionice -c 1 -n 7 bash
উপকারী ionice উদাহরণ
গত উদাহরণে, একটি কপি/মুভ কমান্ডের বদলে, একটি শেল চালু করা হয়েছে (Bash)। এখন সেই শেলে আপনি যে পরবর্তী কমান্ডগুলো টাইপ করবেন সেগুলো I/O শিডিউলিং ক্লাস এবং প্রায়োরিটি উত্তরাধিকার সূত্রে পাবে। আপনি গ্রাফিক্যাল ইন্টারফেসেও এটি করতে পারেন।
ionice -c 3 pcmanfm
উপরোক্ত কমান্ড LXDE ডেস্কটপ এনভায়রনমেন্টের একটি ফাইল এক্সপ্লোরার চালু করবে। "pcmanfm"-কে আপনার নির্দিষ্ট ডেস্কটপের ফাইল এক্সপ্লোরারের নাম দিয়ে বদল দিন। এখন আপনি সেখানে যেসব ডিস্ক অপারেশন শুরু করবেন সেগুলো আইডল I/O শিডিউলিং ক্লাসে পারফর্ম হবে।
অন্য পরিস্থিতিতে, একটি কপি/মুভ অপারেশন ইতিমধ্যে সক্রিয় থাকতে পারে। এই ক্ষেত্রে আপনি ionice অন্যভাবে ব্যবহার করতে পারেন।
ionice -c 3 -p 4910
এটি প্রসেস আইডি ৪৯১০ দিয়ে চলমান প্রোগ্রামের প্রায়োরিটি ক্লাস পরিবর্তন করে। আপনি PID (প্রসেস আইডি) টাস্ক ম্যানেজার বা pgrep কমান্ডের মতো কমান্ড দিয়ে খুঁজে পেতে পারেন।
উপসংহার
ionice ডেস্কটপে বড় ফাইল কপি/মুভ করার সময় ল্যাগ এড়াতে ব্যবহারী হতে পারে। কিন্তু মনে রাখবেন এটি সার্ভারে আরও বেশি উপযোগী হতে পারে। আপনি নিশ্চিতভাবেই চাইবেন না যে আপনি যে ওয়েবসাইট হোস্ট করছেন সেটি আপনার ভিজিটরদের জন্য ফুল ব্যাকআপ করার সময় ল্যাগ করবে।