मैं कुछ बेंचमार्क चला रहा हूं। मेरा बेंचमार्क धावक प्रयोगों के बीच 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 का मतलब है कि प्रोफाइलिंग नमूना दर की जाँच नहीं की जाती है, लेकिन फ़्रीक सबसिस्टम चल रहा है (?)।
क्या कोई फ्रीक के साथ कर्नेल प्रोफाइलिंग को पूरी तरह से अक्षम करने के बारे में प्रकाश डाल सकता है?
संपादित करें: किसी ने सुझाव दिया कि मैं बिना कर्नेल के निर्माण की कोशिश करता हूं, लेकिन मुझे नहीं लगता कि यह संभव भी है। विकल्प नहीं दिखता है:
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_percent
25 पर सेट है, जिसका अर्थ है कि कर्नेल 25% से अधिक समय खर्च कर रहा था हार्डवेयर रजिस्टरों का नमूना। यह एक बेंचमार्किंग मशीन के लिए अस्वीकार्य है।
मैं अब निश्चित हूं कि perf_cpu_time_max_percent
शून्य पर सेट करना केवल स्थिति को खराब करेगा, क्योंकि कर्नेल हार्डवेयर रजिस्टरों को पढ़ने के 25% से अधिक का उपयोग करना जारी रखेगा । त्रुटि नमूना दर को समायोजित करने के लिए फायर करती है, इस प्रकार यह सुनिश्चित करने की कोशिश कर रही है कि कर्नेल का उपयोग करने के अपने कोटा को पूरा करता है <25% का समय पूरा हो गया है। 25% अभी भी बहुत अधिक IMHO है।
अगर मैं वास्तव में perf को निष्क्रिय नहीं कर सकता, तो शायद सबसे अच्छा समझौता perf_event_max_sample_rate
1 पर सेट होगा ।
EDIT4: एक मित्र ने सुझाव दिया कि मैंने इसका गलत अर्थ निकाला हो सकता है perf_cpu_time_max_percent
, इसलिए उपरोक्त कथन गलत हो सकते हैं। 25 का मान इंगित करता है कि कर्नेल ने कुछ मनमाना लंबाई का 25% से अधिक का उपयोग किया था जिसे उसने पूर्ण अंतराफलक की सर्विसिंग के लिए आरक्षित किया था।
EDIT5:
जैसा कि टिप्पणियों में बताया गया है, पूर्ण -*-
विकल्प के खिलाफ यह सुझाव देता है कि यह सुविधा किसी अन्य सक्षम सुविधा द्वारा मजबूर है। अगर मैं अंदर देखता हूं help
, तो यह कहता है कि ये कौन सी विशेषताएं हैं:
मुझे नहीं लगता कि मैं यहां जीत सकता हूं। बुलियन सूत्र selected by
कहता है
यदि आप X86 को लक्षित कर रहे हैं, या ...
मैंने अभी-अभी चेक किया है कि X86_64 को लक्षित करना वास्तव में सक्षम करता है CONFIG_X86
। तो ऐसा लगता है कि जैसे ही आप X86 या X86_64 को लक्ष्य करते हैं, आप पूर्ण हो जाते हैं।
इसलिए मैं अपने प्रश्न को थोड़ा बदलना चाहूंगा:
कर्नेल द्वारा परफेक्ट दिनचर्या में बिताए गए समय को कम करने के लिए मैं कौन सी संपूर्ण सेटिंग्स का उपयोग कर सकता हूं?
ध्यान रखें कि संपूर्ण उद्देश्य बेंचमार्किंग के लिए यादृच्छिक भिन्नता के स्रोतों को नियंत्रित करना है। यदि मैं पूर्ण अक्षम नहीं कर सकता, तो मैं इसे कैसे कम कर सकता हूं कि यह बेंचमार्क पर प्रभाव डाल सकता है?
CONFIG_HAVE_PERF_EVENTS=y
और CONFIG_PERF_EVENTS=y
। मुझे नहीं लगता कि यह अक्षम पूर्ण है।
-*-
का मतलब है कि कुछ सबसिस्टम परफेक्ट मॉड्यूल पर निर्भर करता है। Help
निर्भरता के पेड़ को दिखाता है जिसे आपको विकल्प बदलने के लिए अक्षम करने की आवश्यकता है [*]
या [M]
।