प्रक्रिया 'अच्छाई' बनाम 'प्राथमिकता'


104

दौड़ते समय top, मैं इसे (छोटा) उदाहरण आउटपुट देख सकता हूं:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4586 ipc-adm+  20   0 1303900 605152  92844 S  30,6 29,3   3:52.88 firefox
 3985 ipc-adm+  20   0  258588 124508  63072 S  12,2  6,0   0:40.04 compiz
 3092 root      20   0  172392  56164  25980 S   6,1  2,7   0:30.13 Xorg

ऐसे दो मूल्य हैं जिनकी मुझे दिलचस्पी है: PR(प्राथमिकता) और NI(निकेसी)।

अगर मुझे समझ में आ गया कि मैं पहले से ही सही तरीके से पता लगा रहा हूं, तो दोनों यह निर्धारित करते हैं कि एक सीपीयू समय अन्य प्रक्रियाओं के विपरीत कितना समय लगेगा। लेकिन फिर उन मूल्यों में क्या अंतर है?

क्या आप यह भी बता सकते हैं कि किसी प्रक्रिया के उन मूल्यों में हेरफेर कैसे करें और किन परिस्थितियों में यह उपयोगी हो सकता है?

जवाबों:


103

अच्छा मूल्य एक उपयोगकर्ता-स्थान है और प्राथमिकता पीआर प्रक्रिया की वास्तविक प्राथमिकता है जो लिनक्स कर्नेल द्वारा उपयोग की जाती है। लिनक्स सिस्टम में प्राथमिकताएं 0 से 139 हैं जिसमें वास्तविक समय के लिए 0 से 99 और उपयोगकर्ताओं के लिए 100 से 139 हैं। अच्छा मान सीमा -20 से +19 है जहां -20 सबसे अधिक है, 0 डिफ़ॉल्ट और +19 सबसे कम है। अच्छा मूल्य और प्राथमिकता के बीच संबंध है:

PR = 20 + NI

इसलिए, मान PR = 20 + (-20 to +19)0 से 39 है जो 100 से 139 पर मैप करता है।

शीर्ष मैनुअल के अनुसार:

पीआर - प्राथमिकता कार्य की समयबद्धता प्राथमिकता। यदि आप इस क्षेत्र में 'आरटी' देखते हैं, तो इसका मतलब है कि कार्य 'वास्तविक समय' के अनुसार चल रहा है।

NI कार्य का अच्छा मूल्य है।

NI - अच्छा मूल्य कार्य का अच्छा मूल्य। एक नकारात्मक अच्छा मूल्य का मतलब उच्च प्राथमिकता है, जबकि एक सकारात्मक अच्छा मूल्य कम प्राथमिकता का मतलब है। इस क्षेत्र में शून्य का मतलब है प्राथमिकता को किसी कार्य के प्रेषण-क्षमता को निर्धारित करने में समायोजित नहीं किया जाएगा।

संपादित करें: डिफ़ॉल्ट रूप से जब किसी प्रोग्राम को लिनक्स में लॉन्च किया जाता है, तो वह '0' की प्राथमिकता के साथ लॉन्च हो जाता है। हालाँकि, आप निम्न विधियों में से किसी एक के द्वारा अपने कार्यक्रमों की प्राथमिकता बदल सकते हैं।

  1. आप अपनी आवश्यक प्राथमिकता के साथ एक प्रोग्राम लॉन्च कर सकते हैं

    nice -n nice_value program_name
    
  2. आप पहले से चल रही प्रक्रिया की प्राथमिकता को बदल सकते हैं

    renice -n nice_value -p process_id
    

1
क्या आप कह रहे हैं, वे लगभग एक ही चीज़ के विपरीत हैं (दोनों ही प्राथमिकता का प्रतिनिधित्व करते हैं) लेकिन nicenessनकारात्मक प्राथमिकता देने के लिए BUT का उपयोग किया जा सकता है ताकि nicenessउच्च प्राथमिकता वाले कार्यों के रास्ते से बाहर निकल जाए? (यानी यह किया जा रहा है niceऔर अन्य संसाधनों का उपयोग कर रहे हैं? या यह सिर्फ मुझे भ्रमित किया?
मार्क किर्बी

1
मेरे उदाहरण का एक उदाहरण, दो कार्य, दोनों prमें 20 हैं, इसलिए समान, कार्य एक की niसंख्या 0 है और कार्य दो की एक ni20 है, इसलिए, इसका मतलब यह होगा कि कार्य दो कार्य के लिए संसाधन छोड़ देंगे क्योंकि यह हैnicer
मार्क किर्बी

1
जैसा कि मैं जानता हूं, प्राथमिकता पीआर = 20 + एनआई के रूप में गणना की जाती है। इसलिए एक प्राथमिकता = 20 +0 कार्य। अच्छा मूल्य का अधिकतम मूल्य +19
pl_rock

3
PR = 20 + NI अधिकतम मान 39 हो सकता है। वास्तव में लिनक्स सिस्टम में 139 प्राथमिकता है जिसमें 0 से 99 वास्तविक समय प्राथमिकता है और उपयोगकर्ता के लिए 100 से 139 है। इसलिए, एनआई मान -20 से +19 नक्शे को 100 से 139 के लिए प्राथमिकता देता है। कि आप समायोजित कर सकते हैं। लेकिन फिर भी कर्नेल सुनिश्चित नहीं है कि यदि आप NI मान बदलते हैं तो यह प्राथमिकता बदल देगा, NI मान कर्नेल के लिए एक उचित सुझाव है। कर्नेल कुछ समय इसे अनदेखा करता है
pl_rock

1
तो क्या पीआर और NI वास्तव में बराबर हैं, क्योंकि उनके पास एक अलग ऑफसेट है? फिर हमारे पास दोनों मूल्य क्यों हैं? और आप उस सेटिंग को किसी प्रक्रिया की अच्छाई जोड़ सकते हैं <0 रूट अधिकारों की आवश्यकता है।
बाइट कमांडर

26

प्राथमिकता क्या है और मुझे क्यों ध्यान रखना चाहिए?

जब प्रक्रियाओं की प्राथमिकता के बारे में बात की जाती है, तो प्रोसेसर के समय के प्रबंधन के बारे में सब कुछ होता है। प्रोसेसर या CPU एक ही समय में कई कार्यों के लिए एक मानव बाजीगरी की तरह है। कभी-कभी हमारे पास कई परियोजनाओं को लेने के लिए पर्याप्त जगह हो सकती है। कभी-कभी हम एक समय में केवल एक चीज पर ध्यान केंद्रित कर सकते हैं। अन्य बार कुछ महत्वपूर्ण चबूतरे होते हैं और हम अपनी सारी ऊर्जा उस समस्या को हल करने में समर्पित करना चाहते हैं जबकि पीछे के बर्नर पर कम महत्वपूर्ण कार्य डालते हैं।

लिनक्स में हम सीपीयू के लिए दिशानिर्देश निर्धारित कर सकते हैं कि जब वह सभी कार्यों को देख रहा है, तो उसे करना होगा। इन दिशानिर्देशों को सुंदरता या अच्छा मूल्य कहा जाता है। लिनक्स नेक्सस स्केल -20 से 19 तक चला जाता है। कार्य को जितनी अधिक प्राथमिकता मिलती है उतनी ही कम होती है। यदि निकनेस वैल्यू 19 की तरह उच्च संख्या है तो कार्य सबसे कम प्राथमिकता पर सेट किया जाएगा और जब भी मौका मिलेगा सीपीयू इसे प्रोसेस करेगा। डिफ़ॉल्ट अच्छा मूल्य शून्य है।

इस पैमाने का उपयोग करके हम अपने सीपीयू संसाधनों को अधिक उचित रूप से आवंटित कर सकते हैं। कम प्राथमिकता वाले प्रोग्राम जो महत्वपूर्ण नहीं हैं, उन्हें उच्चतर अच्छे मूल्य पर सेट किया जा सकता है, जबकि सीपीयू के फ़ोकस को अधिक प्राप्त करने के लिए डेमॉन और सेवाओं जैसे उच्च प्राथमिकता वाले कार्यक्रमों को सेट किया जा सकता है। आप किसी विशिष्ट उपयोगकर्ता को उसकी सभी प्रक्रियाओं के लिए कम अच्छा मूल्य दे सकते हैं ताकि आप कंप्यूटर की मुख्य सेवाओं को धीमा करने की उनकी क्षमता को सीमित कर सकें।

स्रोत

के साथ नई प्रक्रियाओं के लिए प्राथमिकता निर्धारित करें nice, जैसे

nice -n 10 firefox

मौजूदा प्रक्रियाओं के लिए

renice 10 -p $(pgrep firefox)

<0आपको जो प्राथमिकता चाहिए sudo, उसे सेट करने के लिए:

renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied

लेकिन प्राथमिकता के लिए नहीं >=0


उदाहरण

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          19   0

% renice 10 -p 2769     # note, we don't need sudo here
2769 (process ID) old priority 0, new priority 10

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox           9  10

% sudo renice -19 -p 2769                    
 2769 (process ID) old priority 10, new priority -19

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          38 -19

अन्य उदाहरण

किसी विशिष्ट उपयोगकर्ता के लिए सभी चल रही प्रक्रियाओं का नाम बदलने के लिए

renice 20 -u user_name

आपके उदाहरण में, renice 10क्या इसके बिना भी काम चल जाएगा sudo? और क्या आप एक विशिष्ट उपयोगकर्ता की सभी प्रक्रियाओं को और अच्छा बनाने के लिए एक उदाहरण जोड़ सकते हैं? यह वास्तव में बहुत उपयोगी होगा अगर किसी और को उसी समय लॉग इन किया जाता है और इसमें कुछ अनावश्यक लेकिन संसाधन-खाने की प्रक्रियाएं होती हैं (जैसे फ़ायरफ़ॉक्स में एक रुके हुए फ़्लैश-गेम की तरह, छोटे भाई ऐसे सामान करते हैं ...: - /)
बाइट कमांडर

@ बाइटकमांडर किया =)
एबी

मैं थोड़ी देर के बाद उस उपयोगकर्ता के पुराने अच्छे मूल्यों को कैसे पुनर्स्थापित करूं? इसे 0 पर सेट करना? इस बात का ध्यान नहीं रखा जाएगा कि कुछ प्रक्रियाओं में पहले एक अलग सुंदरता मूल्य हो सकता है। क्या ऐसा करने की कोई सरल संभावना है?
बाइट कमांडर

@ByteCommander नहीं, यह सरल नहीं है। या तो आप का उपयोग करें 0या ... वहाँ समस्या है;)
एबी

2
रेन -19 के बाद, इसके साथ परिणाम psहै: PRI: 38, NI: -19हालांकि, इसके साथ topऐसा PR:1, NI -19क्यों है?
जगा

14

संक्षिप्त जवाब

पीआर प्राथमिकता स्तर है। पीआर जितना कम होगा, प्रक्रिया की प्राथमिकता उतनी अधिक होगी।

पीआर की गणना निम्नानुसार की जाती है:

  • सामान्य प्रक्रियाओं के लिए: PR = 20 + NI (NI अच्छा है और -20 से 19 तक है)
  • वास्तविक समय प्रक्रियाओं के लिए: PR = - 1 - real_time_priority (real_time_priority 1 से 99 तक होती है)

लंबा जवाब

2 प्रकार की प्रक्रियाएं हैं, सामान्य वाले और वास्तविक समय सामान्य लोगों के लिए (और केवल उन लोगों के लिए), अच्छा इस प्रकार लगाया जाता है:

अच्छा

"निकनेस" स्केल -20 से 19 तक जाता है, जबकि -20 सर्वोच्च प्राथमिकता और 19 सबसे कम प्राथमिकता है। प्राथमिकता स्तर की गणना निम्न प्रकार से की जाती है:

पीआर = 20 + एनआई

जहां NI अच्छा स्तर है और PR प्राथमिकता स्तर है। इसलिए, जैसा कि हम देख सकते हैं, -20 वास्तव में 0 में मैप करते हैं, जबकि 19 मैप्स 39 तक।

डिफ़ॉल्ट रूप से, एक प्रोग्राम अच्छा मान 0 है, लेकिन रूट उपयोगकर्ता के लिए निम्नलिखित प्रोग्राम का उपयोग करके निर्दिष्ट अच्छे मूल्य के साथ प्रोग्राम लॉन्च करना संभव है:

nice -n <nice_value> ./myProgram 

रियल टाइम

हम और भी आगे बढ़ सकते थे। अच्छी प्राथमिकता वास्तव में उपयोगकर्ता कार्यक्रमों के लिए उपयोग की जाती है। जबकि UNIX / LINUX की समग्र प्राथमिकता में 140 मान हैं, अच्छा मूल्य प्रक्रिया को सीमा के अंतिम भाग (100 से 139 तक) में मैप करने में सक्षम बनाता है। यह समीकरण 0 से 99 तक पहुंच से बाहर हो जाता है जो एक नकारात्मक पीआर स्तर (-100 से -1) के अनुरूप होगा। उन मूल्यों तक पहुंचने में सक्षम होने के लिए, प्रक्रिया को "वास्तविक समय" कहा जाना चाहिए।

LINUX वातावरण में 5 शेड्यूलिंग नीतियाँ हैं जिन्हें निम्न आदेश के साथ प्रदर्शित किया जा सकता है:

chrt -m 

जो निम्नलिखित सूची दिखाएगा:

1. SCHED_OTHER   the standard round-robin time-sharing policy
2. SCHED_BATCH   for "batch" style execution of processes
3. SCHED_IDLE    for running very low priority background jobs.
4. SCHED_FIFO    a first-in, first-out policy
5. SCHED_RR      a round-robin policy

शेड्यूलिंग प्रक्रियाओं को 2 समूहों में विभाजित किया जा सकता है, सामान्य समय-निर्धारण नीतियां (1 से 3) और वास्तविक समय निर्धारण नीतियां (4 और 5)। वास्तविक समय प्रक्रियाओं में हमेशा सामान्य प्रक्रियाओं पर प्राथमिकता होगी। निम्न आदेश का उपयोग करके एक वास्तविक समय प्रक्रिया को बुलाया जा सकता है (उदाहरण यह है कि SCHED_RR नीति कैसे घोषित की जाए):

chrt --rr <priority between 1-99> ./myProgram

वास्तविक समय प्रक्रिया के लिए पीआर मान प्राप्त करने के लिए निम्नलिखित समीकरण लागू किया जाता है:

पीआर = -1 - आरटी_पीयर

जहाँ rt_prior 1 और 99 के बीच प्राथमिकता से मेल खाता है। उस कारण से जिस प्रक्रिया में अन्य प्रक्रियाओं की तुलना में उच्च प्राथमिकता होगी, वह नंबर 99 के साथ बुलाया जाएगा।

यह ध्यान रखना महत्वपूर्ण है कि वास्तविक समय प्रक्रियाओं के लिए, अच्छे मूल्य का उपयोग नहीं किया जाता है।

एक प्रक्रिया के वर्तमान "अच्छा" और पीआर मूल्य को देखने के लिए निम्नलिखित कमांड निष्पादित किया जा सकता है:

top

जो निम्न आउटपुट दिखाता है:

यहाँ छवि विवरण दर्ज करें

चित्र में पीआर और एनआई मान प्रदर्शित किए जाते हैं। पीआर मूल्य -51 के साथ प्रक्रिया को नोट करना अच्छा है जो वास्तविक समय मूल्य से मेल खाती है। कुछ प्रक्रियाएँ ऐसी भी हैं जिनका PR मान "rt" कहा जाता है। यह मान वास्तव में -100 के PR मान से मेल खाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.