लिनक्स कर्नेल में पूर्ण सबसिस्टम को कैसे निष्क्रिय करें?


15

मैं कुछ बेंचमार्क चला रहा हूं। मेरा बेंचमार्क धावक प्रयोगों के बीच dmesg बफर पर नज़र रखता है, जो किसी भी चीज़ की तलाश कर सकता है जो प्रदर्शन को प्रभावित कर सकता है। आज इसने इसे फेंक दिया:

[२०१५-०20-१ d १०:२०:१४ चेतावनी] शत्रुता बदली हुई लगती है! इस प्रकार है:
--- 2015-08-17 09:55:00
+++ 2015-08-17 10:20:14
@@ -825,3 +825,4 @@
 [3.802206] [drm] RC6 राज्यों को सक्षम करना: RC6 on, RC6p off, RC6pp बंद
 [7.900533] r8169 0000: 06: 00.0 eth0: लिंक अप
 [7.900541] IPv6: ADDRCONF (NETDEV_CHANGE): eth0: लिंक तैयार हो गया
+ [२३६ too३२.२२१ ९ ३]] पूर्ण व्यवधान को बहुत लंबा (२५०४> २५००) लिया गया, कर्नेल को कम किया गया।

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

फिर से खोज, मुझे पता है कि sysctl perf_cpu_time_max_percentमदद कर सकता है। यहाँ कोई इसे 0 पर सेट करके अक्षम करने का सुझाव देता है। कुछ और यहाँ पढ़ना :

perf_cpu_time_max_percent:

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

कुछ पूर्ण नमूने NMI में होते हैं। यदि इन नमूनों को अप्रत्याशित रूप से निष्पादित करने में बहुत लंबा समय लगता है, तो एनएमआई एक दूसरे के बगल में ढेर हो सकते हैं ताकि कुछ और निष्पादित करने की अनुमति न हो।

0: तंत्र को अक्षम करें। सीपीयू को कितना समय लगता है, इस बात की कोई निगरानी या नमूना सही न करें।

1-100: सीपीयू के इस प्रतिशत के लिए इत्र की नमूना दर को थ्रॉटल करने का प्रयास। नोट: कर्नेल प्रत्येक नमूना घटना की "अपेक्षित" लंबाई की गणना करता है। यहां 100 का मतलब है कि अपेक्षित लंबाई का 100%। यहां तक ​​कि अगर यह 100 पर सेट है, तो आप इस लंबाई से अधिक होने पर भी नमूना थ्रॉटलिंग देख सकते हैं। 0 पर सेट करें यदि आप वास्तव में परवाह नहीं करते हैं कि सीपीयू कितना खपत है।

यह मुझे लगता है जैसे 0 का मतलब है कि प्रोफाइलिंग नमूना दर की जाँच नहीं की जाती है, लेकिन फ़्रीक सबसिस्टम चल रहा है (?)।

क्या कोई फ्रीक के साथ कर्नेल प्रोफाइलिंग को पूरी तरह से अक्षम करने के बारे में प्रकाश डाल सकता है?

संपादित करें: किसी ने सुझाव दिया कि मैं बिना कर्नेल के निर्माण की कोशिश करता हूं, लेकिन मुझे नहीं लगता कि यह संभव भी है। विकल्प नहीं दिखता है:

menuconfig

EDIT2: अधिक पढ़ने के बाद, मैंने फैसला किया कि मैं kernel.perf_event_max_sample_rateशून्य पर सेट करने में सक्षम हो सकता हूं । यानी प्रति सेकंड कोई नमूना नहीं। हालाँकि, आप ऐसा नहीं कर सकते ( स्रोत ):

प्रतिबद्ध 02f98e3e36da106338b7c732fed516420fb20e2a
लेखक: नट पीटर्सन 
दिनांक: बुध सिपाही २५ 14:29:37 2013 +0200

perf: perf_event_max_sample_rate के लिए निचली सीमा के रूप में 1 लागू करें

EDIT 3: FWIW, perf_cpu_time_max_percent25 पर सेट है, जिसका अर्थ है कि कर्नेल 25% से अधिक समय खर्च कर रहा था हार्डवेयर रजिस्टरों का नमूना। यह एक बेंचमार्किंग मशीन के लिए अस्वीकार्य है।

मैं अब निश्चित हूं कि perf_cpu_time_max_percentशून्य पर सेट करना केवल स्थिति को खराब करेगा, क्योंकि कर्नेल हार्डवेयर रजिस्टरों को पढ़ने के 25% से अधिक का उपयोग करना जारी रखेगा । त्रुटि नमूना दर को समायोजित करने के लिए फायर करती है, इस प्रकार यह सुनिश्चित करने की कोशिश कर रही है कि कर्नेल का उपयोग करने के अपने कोटा को पूरा करता है <25% का समय पूरा हो गया है। 25% अभी भी बहुत अधिक IMHO है।

अगर मैं वास्तव में perf को निष्क्रिय नहीं कर सकता, तो शायद सबसे अच्छा समझौता perf_event_max_sample_rate1 पर सेट होगा ।

EDIT4: एक मित्र ने सुझाव दिया कि मैंने इसका गलत अर्थ निकाला हो सकता है perf_cpu_time_max_percent, इसलिए उपरोक्त कथन गलत हो सकते हैं। 25 का मान इंगित करता है कि कर्नेल ने कुछ मनमाना लंबाई का 25% से अधिक का उपयोग किया था जिसे उसने पूर्ण अंतराफलक की सर्विसिंग के लिए आरक्षित किया था।

EDIT5:

जैसा कि टिप्पणियों में बताया गया है, पूर्ण -*-विकल्प के खिलाफ यह सुझाव देता है कि यह सुविधा किसी अन्य सक्षम सुविधा द्वारा मजबूर है। अगर मैं अंदर देखता हूं help, तो यह कहता है कि ये कौन सी विशेषताएं हैं:

मदद

मुझे नहीं लगता कि मैं यहां जीत सकता हूं। बुलियन सूत्र selected byकहता है

यदि आप X86 को लक्षित कर रहे हैं, या ...

मैंने अभी-अभी चेक किया है कि X86_64 को लक्षित करना वास्तव में सक्षम करता है CONFIG_X86। तो ऐसा लगता है कि जैसे ही आप X86 या X86_64 को लक्ष्य करते हैं, आप पूर्ण हो जाते हैं।

इसलिए मैं अपने प्रश्न को थोड़ा बदलना चाहूंगा:

कर्नेल द्वारा परफेक्ट दिनचर्या में बिताए गए समय को कम करने के लिए मैं कौन सी संपूर्ण सेटिंग्स का उपयोग कर सकता हूं?

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


1
आपको पिछली स्क्रीन पर perf को निष्क्रिय करने में सक्षम होना चाहिए।
माइकल हैम्पटन

1
क्या आपका मतलब है "प्रोफाइलिंग सपोर्ट"? यदि मैं इसे अक्षम करता हूं, तो मैं अभी भी ऊपर चित्रित विकल्प को अनचेक नहीं कर सकता। इसके अलावा, अगर मैं जांच करता हूं .config, मेरे पास है CONFIG_HAVE_PERF_EVENTS=yऔर CONFIG_PERF_EVENTS=y। मुझे नहीं लगता कि यह अक्षम पूर्ण है।
एड्ड बैरेट

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

1
प्रतीक -*-का मतलब है कि कुछ सबसिस्टम परफेक्ट मॉड्यूल पर निर्भर करता है। Helpनिर्भरता के पेड़ को दिखाता है जिसे आपको विकल्प बदलने के लिए अक्षम करने की आवश्यकता है [*]या [M]
रफो एल मगूफो

4
मैंने इसे ध्यान में रखते हुए प्रश्न को संशोधित किया है। संक्षेप में, X86_64 पर perf अनिवार्य प्रतीत होता है।
एड्ड बैरेट

जवाबों:


2

[HAVE_PERF_EVENTS] कर्नेल विकल्प को अक्षम करें और लिनक्स कर्नेल को फिर से खोलें।

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