कभी दसियों या सैकड़ों गीगाबाइट डेटा की प्रतिलिपि बनाई या स्थानांतरित की? यदि आपने किया, तो आपने निश्चित रूप से देखा कि उस समय के दौरान सिस्टम बहुत कम प्रतिक्रियाशील हो जाता है। Linux पर आप ionice
. की मदद से इससे बच सकते हैं आदेश।
I/O प्राथमिकता क्या है?
I/O इनपुट/आउटपुट के लिए छोटा है। I/O डिवाइस कई प्रकार के होते हैं, लेकिन इस मामले में यह स्टोरेज डिवाइस के बारे में है।
प्रत्येक प्रक्रिया जो इस तरह के डिवाइस पर डेटा पढ़ना या लिखना चाहती है, उसे एक शेड्यूलिंग क्लास और प्राथमिकता संख्या (या "अच्छा" मान) असाइन की जाती है। यह लिनक्स पर फाइल सिस्टम जैसे ext4 पर लागू होता है। अन्य फाइल सिस्टम, जैसे कि ZFS, डिस्क पर पढ़ने/लिखने के संचालन को शेड्यूल करने के लिए थोड़ा अलग तरीके लागू कर सकते हैं। साथ ही, इसके लिए काम करने के लिए CFQ अनुसूचक सक्रिय होना चाहिए। आप के साथ जांच कर सकते हैं
cat /sys/block/*/queue/scheduler
उच्च "अच्छा" मान वाली प्रक्रिया की प्राथमिकता कम होती है। इसके पीछे तर्क यह है कि संख्या जितनी अधिक होगी, अन्य प्रक्रियाओं के लिए प्रक्रिया उतनी ही "अच्छी" होगी।
I/O प्राथमिकता कैसे काम करती है?
एक स्टोरेज डिवाइस में स्पष्ट रूप से सीमित संख्या में I/O संचालन होते हैं जो प्रति सेकेंड (आईओपीएस) कर सकते हैं। तो जब दो प्रक्रियाएं एक ही समय में पढ़ना/लिखना चाहती हैं, तो उनमें से प्रत्येक को आईओपीएस का हिस्सा मिलता है। यदि उनकी प्राथमिकता समान है, तो उन्हें लगभग 50% IOPS प्रत्येक मिलता है।
लेकिन IOPS अमूर्त और जटिल लग सकता है। सादगी के लिए, आप केवल अंतिम परिणाम के बारे में सोच सकते हैं:गति पढ़ें/लिखें। मान लें कि आपकी डिस्क अधिकतम 100MB/s के साथ लिख सकती है। प्रोसेस ए एक राइट ऑपरेशन शुरू करता है। यह 100MB/s के साथ डिस्क पर लिखता है। प्रोसेस बी साथ आता है और उसी डिस्क पर लिखना चाहता है। यह लगभग 50MB/s के साथ लिखेगा, प्रक्रिया A को समान मान, 50MB/s पर लिखने की गति लाएगा। अब, यदि आप प्रक्रिया B को उच्च I/O अच्छा मान प्रदान करते हैं, तो यह 20MB/s के साथ लिखेगा और प्रक्रिया A को 80MB/s के साथ लिखने देगा। जब प्रक्रिया A पूरी हो जाती है, तो प्रक्रिया B 100MB/s के साथ लिखना शुरू कर देगी।
यह उदाहरण कुछ ऐसा समझने के लिए उपयोगी है जो कुछ लोगों को भ्रमित कर सकता है। यदि किसी प्रक्रिया की प्राथमिकता बहुत कम है (उच्च अच्छा मूल्य), तो इसका मतलब यह नहीं है कि यह हर समय धीरे-धीरे लिखेगी। यदि यह डिस्क का उपयोग करने वाली एकमात्र प्रक्रिया है, तो यह अधिकतम गति के साथ पढ़/लिखेगी। लेकिन जब अन्य प्रक्रियाओं को डिस्क की आवश्यकता होती है, तो यह अस्थायी रूप से रास्ते से हट जाएगी और उन्हें अधिक डिस्क बैंडविड्थ का उपयोग करने देगी। कॉपी/राइट ऑपरेशन के लिए जिसे पूरा होने में घंटों लगेंगे, अगर आप उस दौरान अपने कंप्यूटर का उपयोग करना चाहते हैं तो इसे कम प्राथमिकता देना एक अच्छा विचार है।
आयनिस कमांड का उपयोग कैसे करें
कमांड का सामान्य सिंटैक्स है:
ionice -c scheduling_class -n priority_nice_value command
आयनिस शेड्यूलिंग क्लासेस
निष्क्रिय (कक्षा 3):इस वर्ग में प्रक्रियाएं केवल तभी पढ़ती/लिखती हैं जब किसी अन्य प्रोग्राम को डिस्क एक्सेस की आवश्यकता नहीं होती है। इसका मतलब है कि जब कोई प्रतिस्पर्धा नहीं होती है तो प्रक्रिया पूरी गति से पढ़ती/लिखती है। जब किसी अन्य प्रोग्राम को डिस्क समय की आवश्यकता होती है, तो निष्क्रिय वर्ग में प्रक्रिया केवल उन संसाधनों के साथ ही पढ़/लिखेगी जो शेष हैं। 100 एमबी/एस से यह अस्थायी रूप से 5 एमबी/एस के साथ लिख सकता है, फिर 100 एमबी/एस पर वापस जा सकता है जब अन्य प्रोग्राम डिस्क तक पहुंच जाता है। लंबे समय तक चलने वाली नौकरियों के लिए यह सही वर्ग है कि आप अपने सिस्टम को धीमा नहीं करना चाहते हैं। इस वर्ग के लिए कोई प्राथमिकता निर्दिष्ट करने की आवश्यकता नहीं है।
उदाहरण आदेश:
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 -c 3 -p 4910
यह प्रक्रिया आईडी 4910 के साथ चल रहे प्रोग्राम के प्राथमिकता वर्ग को बदल देता है। आप अपने कार्य प्रबंधक के साथ या pgrep
जैसे कमांड के साथ पीआईडी (प्रोसेस आईडी) पा सकते हैं। ।
निष्कर्ष
ionice उन डेस्कटॉप पर उपयोगी हो सकता है जिन्हें आप बड़ी फ़ाइलों को कॉपी/स्थानांतरित करते समय पिछड़ना नहीं चाहते हैं। लेकिन ध्यान रखें कि यह सर्वर पर और भी अधिक उपयोगी हो सकता है। आप निश्चित रूप से एक ऐसी वेबसाइट नहीं चाहते हैं जिसे आप एक पूर्ण बैकअप करते समय अपने आगंतुकों से पिछड़ने के लिए होस्ट कर सकें।