डेस्कटॉप संदर्भ में सिस्टम शेड्यूलिंग-संबंधित विकल्पों का उपयोग करना और समझना


14

Systemd सेवा फ़ाइलों में, कोई भी systemd.execव्यक्ति से संबंधित शेड्यूलिंग संबंधित विकल्प सेट कर सकता है ( यदि मैं गलत हूं तो मुझे सही करें):

अच्छा निष्पादित प्रक्रियाओं के लिए डिफ़ॉल्ट अच्छा स्तर (समयबद्धन प्राथमिकता) निर्धारित करता है। -20 (उच्चतम प्राथमिकता) और 19 (सबसे कम प्राथमिकता) के बीच पूर्णांक लेता है। देखें setpriority (2) जानकारी के लिए।

जो परिचित अच्छा स्तर है। ऐसा लगता है कि इसका प्रभाव हाल के लियोन की गुठली के 'ऑटोग्रुप' फीचर के कारण कुछ हद तक 'विकृत' है। तो नीचे दिए गए विकल्प हो सकते हैं कि मैं वास्तव में अपने डेस्कटॉप अनुभव के लिए अच्छी तरह से व्यवहार करने वाली प्रक्रियाओं को रखना चाहता हूं।

CPUSchedulingPolicy निष्पादित प्रक्रियाओं के लिए CPU शेड्यूलिंग नीति सेट करता है। अन्य, बैच, निष्क्रिय, फीफो या आरआर में से एक लेता है। देखें sched_setscheduler (2) जानकारी के लिए।

CPUSchedulingPriority निष्पादित प्रक्रियाओं के लिए CPU शेड्यूलिंग प्राथमिकता निर्धारित करता है। उपलब्ध प्राथमिकता सीमा चयनित CPU शेड्यूलिंग नीति (ऊपर देखें) पर निर्भर करती है। वास्तविक समय निर्धारण नीतियों के लिए 1 (सबसे कम प्राथमिकता) और 99 (सर्वोच्च प्राथमिकता) के बीच पूर्णांक का उपयोग किया जा सकता है। देखें sched_setscheduler (2) जानकारी के लिए।

CPUSchedulingResetOnFork एक बूलियन तर्क लेता है। यदि सही, उन्नत CPU शेड्यूलिंग प्राथमिकताओं और नीतियों को रीसेट किया जाएगा, जब निष्पादित प्रक्रियाएं कांटा जाती हैं, और इसलिए बच्चे की प्रक्रियाओं में रिसाव नहीं हो सकता है। देखें sched_setscheduler (2) जानकारी के लिए। झूठे की अवहेलना करता है।

मैं आखिरी विकल्प समझता हूं। मैं पहले दो के स्पष्टीकरण से इकट्ठा करता हूं कि मैं एक शेड्यूलिंग नीति चुन सकता हूं और फिर, उस नीति को प्राथमिकता देते हुए। यह मेरे लिए पूरी तरह से स्पष्ट नहीं है कि मुझे किस तरह के कार्यों के लिए चुनना चाहिए। उदाहरण के लिए, क्या बैकअप कार्यों के लिए 'निष्क्रिय' चुनना सुरक्षित है (अपेक्षाकृत सीपीयू गहन, क्योंकि डुप्लिकेटिंग), या एक और बेहतर विकल्प है?

सामान्य तौर पर, प्रत्येक प्राथमिकता के साथ प्रत्येक नीति की एक समझ रखने योग्य अवलोकन प्राप्त करना, और विशिष्ट उद्देश्यों के लिए उपयुक्तता वह है जो मैं देख रहा हूं। इसके अलावा अच्छे स्तर के साथ बातचीत ब्याज की है।

CPU शेड्यूलिंग के आगे, IO शेड्यूलिंग है। मुझे लगता है कि यह मेल खाती है ionice(अगर मैं गलत हूं तो मुझे सुधारो)।

IOSchedulingClass निष्पादित प्रक्रियाओं के लिए I / O शेड्यूलिंग वर्ग सेट करता है। 0 और 3 या स्ट्रिंग्स में से कोई भी एक, वास्तविक समय, सर्वश्रेष्ठ-प्रयास या निष्क्रिय के बीच पूर्णांक लेता है। देखें ioprio_set (2) जानकारी के लिए।

IOScheduledPriority निष्पादित प्रक्रियाओं के लिए I / O शेड्यूलिंग प्राथमिकता निर्धारित करता है। 0 (उच्चतम प्राथमिकता) और 7 (सबसे कम प्राथमिकता) के बीच पूर्णांक बनाता है। उपलब्ध प्राथमिकताएं चयनित I / O शेड्यूलिंग क्लास (ऊपर देखें) पर निर्भर करती हैं। देखें ioprio_set (2) जानकारी के लिए।

हम यहां CPU शेड्यूलिंग के समान संरचना देखते हैं। मैं उसी तरह की जानकारी के लिए भी देख रहा हूँ।

सभी 'शेड्यूलिंग' विकल्पों के लिए, संदर्भित मैन पेज मेरे लिए पर्याप्त रूप से स्पष्ट नहीं हैं, ज्यादातर चीजों को कुछ हद तक तकनीकी रूप से इच्छुक डेस्कटॉप उपयोगकर्ता के दृष्टिकोण में अनुवाद करने में।


2
आप किस विशेष प्रदर्शन समस्या को हल करने की कोशिश कर रहे हैं? क्या कुछ बहुत धीरे-धीरे चल रहा है या आपके लिए बहुत ज्यादा अंतराल है? मैं डेस्कटॉप के रूप में सिस्टमैड के साथ Ubuntu 16.04 का उपयोग करता हूं, बैकग्राउंड में बैकअप के साथ और रिश्तेदार प्राथमिकता से संबंधित कोई प्रदर्शन समस्या नहीं है।
मार्क स्टोसबर्ग

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

प्रलेखन के प्रत्येक बिट एक आदमी पृष्ठ का संदर्भ देता है जहां आप अधिक दस्तावेज पा सकते हैं यदि आप रुचि रखते हैं। क्या ioprio_set (2) और schedule_setscheduler (2) के लिए संदर्भित मैन पेज पढ़ना आपके सवालों के जवाब देने में मदद करता है?
मार्क स्टोसबर्ग 14

@MarkStosberg नहीं, जैसा कि मेरे प्रश्न में संकेत दिया गया है। मैन पेज बुरे नहीं हैं, लेकिन जरूरी नहीं कि मुझे यह तय करने में मदद करें कि (आजकल क्या करने के लिए सुरक्षित / सही बात अच्छे मूल्यों को समायोजित करना है?)। इन विकल्पों के अनुभवी उपयोगकर्ताओं के जवाब जो ठोस उदाहरण दे सकते हैं और ऐसे ठोस मामलों में ऑटोग्रुप के प्रभाव को जान सकते हैं, जिनसे मैं उम्मीद कर रहा हूं।
equaeghe

मैं बस इन निर्देशों पर बहुत अधिक उसी संदर्भ में ठोकर खाई (पृष्ठभूमि बैकअप अंतराल के कारण)। मैंने पाया कि मैन शेड्यूल (7) में अन्य दो मैन पेजों का अधिक व्यापक वर्णन है। (इसमें niceमूल्य लागू होने पर उल्लेख भी है )।
विस्परविंड जूल

जवाबों:


5

CPUScheduling {नीति | प्राथमिकता}

लिंक आपको बताता है कि CPUSchedulingPriorityकेवल के लिए सेट किया जाना चाहिए fifoया rr( "वास्तविक समय") कार्यों। आप सेवाओं पर वास्तविक समय-निर्धारण को बाध्य नहीं करना चाहते हैं।

CPUSchedulingPolicy=other डिफ़ॉल्ट है।

यही कारण है कि पत्तियों batchऔर idle। यदि आपके पास एक ही समय में सीपीयू का उपयोग करने के लिए कई निष्क्रिय-प्राथमिकता वाले कार्य हैं, तो उनके बीच का अंतर केवल प्रासंगिक है। सिद्धांत batchमें उच्चतर थ्रूपुट (लंबे समय तक विलंब के बदले) देता है। लेकिन यह एक बड़ी जीत नहीं है, इसलिए यह वास्तव में इस मामले में प्रासंगिक नहीं है।

idleशाब्दिक रूप से अगर कोई और चीज सीपीयू चाहता है तो वह भूखा रह जाता है। एक ही कोर के साथ पुराने यूनिक्स सिस्टम के लिए सीपीयू प्राथमिकता कम महत्वपूर्ण है, जैसा कि पहले हुआ करती थी। मैं खुशी से शुरू करूँगा nice, उदाहरण के लिए अच्छा स्तर 10 या 14, जिसका सहारा लेने से पहले idle। अगला भाग देखें

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

क्या कर्नेल 'ऑटोग्रुप' सुविधा द्वारा अच्छा स्तर 'विकृत' है?

हाँ।

ऑटोग्रुपिंग थोड़ा अजीब है। लेखक को systemdपसंद नहीं था, यहां तक ​​कि डेस्कटॉप के लिए भी। यदि आप अक्षम करने वाले ऑटोग्रुपिंग का परीक्षण करना चाहते हैं, तो आप sysctl kernel.sched_autogroup_enabled को सेट कर सकते हैं 0। मुझे लगता है कि यह स्थायी कॉन्फ़िगरेशन और रिबूटिंग में sysctl को सेट करके परीक्षण करने के लिए सबसे अच्छा है, यह सुनिश्चित करने के लिए कि आप सभी ऑटोकड्रुप से छुटकारा पाएं।

फिर आपको बिना किसी समस्या के अपनी सेवाओं के लिए अच्छे स्तर पर सक्षम होना चाहिए। सिस्टमड के वर्तमान संस्करणों में कम से कम - अगला भाग देखें।

उदा। अच्छा स्तर 10 लिनक्स सीपीयू अनुसूचक में प्रत्येक थ्रेड के वजन को 10% तक कम कर देगा। अच्छा स्तर 14 5% से कम है। (लिंक: पूर्ण सूत्र )

परिशिष्ट: प्रणालीगत cgroups द्वारा अच्छा स्तर 'विकृत' है?

वर्तमान DefaultCPUAccounting= सेटिंग डिफॉल्ट को बंद कर देती है, जब तक कि इसे प्रति-सेवा के आधार पर सीपीयू नियंत्रण को सक्षम किए बिना भी सक्षम नहीं किया जा सकता है। तो यह ठीक होना चाहिए। आप इसे अपने वर्तमान दस्तावेज़ में देख सकते हैं:man systemd-system.conf

ध्यान रखें कि जब कोई भी सेवा CPUAccounting / CPUWeight / StartupCPUWeight / CPUShares / StartupCPUShares सेट करती है तो प्रति-सेवा CPU नियंत्रण भी सक्षम हो जाएगा ।

निम्नलिखित ब्लॉग का अर्क पुराना है (लेकिन अभी भी ऑनलाइन है)। डिफ़ॉल्ट व्यवहार के बाद से बदल गया है, और संदर्भ प्रलेखन तदनुसार अद्यतन किया गया है।

एक अच्छा डिफ़ॉल्ट के रूप में, यदि सीपीयू नियंत्रक कर्नेल में सक्षम है, तो सिस्टमड इसे शुरू करते समय प्रत्येक सेवा के लिए एक cgroup बनाएगा। आगे किसी भी विन्यास के बिना इसका पहले से ही एक अच्छा प्रभाव है: एक systemd सिस्टम पर हर सिस्टम सेवा को CPU की एक समान राशि मिलेगी, चाहे वह कितनी भी प्रक्रिया से दूर हो। या दूसरे शब्दों में: आपके वेब सर्वर पर MySQL को अपाचे के रूप में सीपीयू की लगभग उतनी ही राशि मिलेगी, भले ही उत्तरार्द्ध में 1000 सीजीआई स्क्रिप्ट प्रक्रिया हो, लेकिन पूर्व में केवल कुछ कार्यकर्ता कार्य हैं। (यह व्यवहार बंद किया जा सकता है, DefaultControllers = in /etc/systemd/system.conf पर देखें।)

इस डिफ़ॉल्ट के शीर्ष पर, सीपीयू शेयरों को सीपीयूशर = सेटिंग के साथ एक सेवा को स्पष्ट रूप से कॉन्फ़िगर करना संभव है। डिफ़ॉल्ट मान 1024 है, यदि आप इस संख्या को बढ़ाते हैं, तो आप 1024 से कम पर एक अनलेडेड सेवा की तुलना में अधिक सीपीयू प्रदान करेंगे, यदि आप इसे घटाते हैं, तो कम।

http://0pointer.de/blog/projects/resources.html


-3

क्लासिक प्रदर्शन ट्यूनिंग सलाह "डोन्ट ऑप्टिमाइज़, बेंचमार्क" नहीं है।

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

आधुनिक डेस्कटॉप अक्सर बिना किसी ट्यूनिंग के काम करने के लिए बहुत तेज़ होते हैं।


3
क्षमा करें, लेकिन यह प्रश्न का उत्तर नहीं है। पूरे बिंदु यह है कि चीजों को आज़माना मुश्किल है अगर कोई वास्तव में प्रभावों को नहीं समझता है। और यह सवाल एक आधुनिक डेस्कटॉप पर प्रदर्शन के मुद्दों (लेकिन इसके बारे में नहीं है!) द्वारा इंगित किया गया था।
बराबर

1
किसी भी विकल्प को आज़माने में कुछ ही मिनट लगते हैं। यदि आपके पास एक बेसलाइन बेंचमार्क और एक प्रदर्शन लक्ष्य है, तो आप आसानी से जांच सकते हैं कि आपके द्वारा चुना गया विकल्प आपको उस दिशा में ले जाता है जो आप चाहते हैं।
मार्क स्टोसबर्ग

@equaeghe, बिना सोचे-समझे, बिना किसी समस्या के हल करने वाले बेतरतीब घुंघरुओं को फैंकना।
वॉनब्रांड

पर्याप्त सलाह, लेकिन जवाब नहीं। यह बल्कि एक टिप्पणी होनी चाहिए। कभी-कभी "यह बहुत धीमी है" की भावना महसूस होती है, जो कार्रवाई के संकेत देने के लिए पर्याप्त है। उदाहरण के लिए का उपयोग कर systemd-analyzeके साथ blameऔर plotमैं नीचे एक मिनट से अधिक द्वारा एक पुराने आरपीआई पर बूट समय में कटौती करने में सक्षम था। निश्चित रूप से, जब मुद्दे का विश्लेषण करने की बात आती है, तो समय से पहले "अनुकूलन" शुरू करने के बजाय इसे मापना आवश्यक है।
0xC0000022L
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.