2013-07-23 13 views
5

हैलो मैंने लिनक्स कर्नेल को आरटी-पैच के साथ पैच किया और साइक्लिंटेस्ट के साथ इसका परीक्षण किया जो विलंबता पर नज़र रखता है। कर्नेल अच्छा नहीं कर रहा है और वेनिला कर्नेल से बेहतर नहीं है। https://rt.wiki.kernel.org/index.php/Cyclictestआरटी पैच लिनक्स कर्नेल

मैं आर टी के लिए uname है, जो ठीक लग रहा है की जाँच की।

तो मैं cyclinctest के लिए आवश्यकताओं की जाँच की और यह कहा गया मुझे यकीन है कि निम्नलिखित कर्नेल config भीतर कॉन्फ़िगर किया गया है करने के लिए है कि:

CONFIG_PREEMPT_RT=y 
CONFIG_WAKEUP_TIMING=y 
CONFIG_LATENCY_TRACE=y 
CONFIG_CRITICAL_PREEMPT_TIMING=y 
CONFIG_CRITICAL_IRQSOFF_TIMING=y 

समस्या अब उत्पन्न होने वाली है कि config शामिल नहीं करता है ऐसी प्रविष्टियां शायद पुराने हैं और उनका नाम नए पैच संस्करणों (3.8.14) में बदला जा सकता है?

मैंने पाया जैसे विकल्प:

CONFIG_PREEMPT_RT_FULL=y 
CONFIG_PREEMPT=y 
CONFIG_PREEMPT_RT_BASE=y 
CONFIG_HIGH_RES_TIMERS=y 

3.x गिरी ऊपर से आवश्यक प्रदान करने के लिए है कि enought है? कोई भी संकेत है?

उत्तर

7

PREEMPT_RT के तहत कठिन रीयलटाइम प्रदर्शन प्राप्त करने के लिए बहुत कुछ किया जाना चाहिए। यहां उन चीजें हैं जिन्हें मैं जानता हूं। एक तारांकन के साथ चिह्नित प्रविष्टियां आपकी वर्तमान स्थिति पर लागू होती हैं।

  • PREEMPT_RT साथ गिरी (आप पहले से ही किया था) पैच, और CONFIG_PREEMPT_RT_FULL (जो, CONFIG_PREEMPT_RT के नाम से जाना के रूप में आप सही ढंग से व्युत्पन्न इस्तेमाल किया) सक्षम करें।
  • प्रोसेसर आवृत्ति स्केलिंग अक्षम करें (या तो इसे कर्नेल कॉन्फ़िगरेशन से हटाकर या गवर्नर या इसकी सेटिंग्स को बदलकर)। (*)
    • तर्क: कोर की आवृत्ति को बदलने में कुछ समय लगता है, जिसके दौरान कोर कोई उपयोगी काम नहीं करता है। यह उच्च विलंबता का कारण बनता है।
    • इसे हटाने के लिए, कर्नेल सेटिंग्स में एसीपीआई विकल्पों के अंतर्गत देखें।
    • यदि आप कर्नेल से इस क्षमता को हटाना नहीं चाहते हैं, तो आप इसे cpufreq गवर्नर को "प्रदर्शन" पर सेट कर सकते हैं ताकि इसे उच्चतम आवृत्ति में लॉक कर सकें।
  • अक्षम गहरी सीपीयू नींद में कहा गया है
    • तर्क: आवृत्तियों स्विचन, एक गहरी नींद से जाग सीपीयू कुछ समय लग सकता की तरह।
    • Cyclictest यह आपके लिए करता है (यह देखने के लिए/dev/cpu_dma_latency देखें कि यह आपके एप्लिकेशन में कैसे करें)।
    • वैकल्पिक रूप से, आप कर्नेल में "cpuidle" आधारभूत संरचना को कभी भी होने से रोकने के लिए अक्षम कर सकते हैं।
  • वास्तविक समय धागा लिए एक उच्च प्राथमिकता सेट, 50 (अधिमानतः 99) (*) से ऊपर
    • तर्क: आप कर्नेल के बहुमत के ऊपर अपनी प्राथमिकता जगह की जरूरत है - एक PREEMPT_RT कर्नेल की ज्यादा (आईआरक्यू सहित) 50 की प्राथमिकता पर चलता है।
    • साइकिल चालक के लिए, आप इसे "-p #" विकल्प के साथ कर सकते हैं, उदाहरण के लिए "-p99"।
  • आपके एप्लिकेशन की मेमोरी लॉक होनी चाहिए।(*)
    • तर्क: यदि आपके एप्लिकेशन की मेमोरी लॉक नहीं है, तो कर्नेल को उच्च विलंबता को ट्रिगर करने के दौरान निष्पादन के दौरान आपके कुछ एप्लिकेशन की पता स्थान को दोबारा मैप करने की आवश्यकता हो सकती है।
    • cyclictest के लिए, यह "मी" विकल्प के साथ किया जा सकता है।
    • अपने खुद के आवेदन में ऐसा करने के लिए, the RT_PREEMPT howto देखते हैं।
  • आप NVIDIA, नोव्यू, और i915 मॉड्यूल उतारना चाहिए अगर वे लोड किए गए हैं (या उन्हें पहली जगह में निर्माण नहीं) (*)
    • तर्क: इन उच्च सुप्तावस्था पैदा करने के लिए जाना जाता है। उम्मीद है कि आप उन्हें एक वास्तविक समय प्रणाली पर की जरूरत नहीं है: पी
  • आपका वास्तविक कार्य वास्तविक समय
    • उदाहरण के लिए होने के लिए कोडित किया जाना चाहिए, आप malloc के माध्यम से फ़ाइल का उपयोग या गतिशील स्मृति आवंटन नहीं कर सकते()। कई सिस्टम कॉल ऑफ-सीमाएं हैं (यह पता लगाना मुश्किल है कि कौन से स्वीकार्य हैं, आईएमओ)।
    • cyclictest ज्यादातर पहले से ही, वास्तविक समय ऑपरेशन के लिए कोडित है के रूप में कई वास्तविक समय ऑडियो अनुप्रयोग हैं। आपको इसे "-n" ध्वज के साथ चलाने की आवश्यकता है, हालांकि, या यह रीयलटाइम-सुरक्षित नींद कॉल का उपयोग नहीं करेगा।

cyclictest की वास्तविक निष्पादन कम से कम मानकों के निम्नलिखित सेट होना चाहिए:

sudo cyclictest -p99 -m -n 
+0

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

+0

बहुत अच्छा लग रहा है, भले ही मुझे लगता है कि मैं लगभग उन सभी बिंदुओं पर विचार करता हूं और कुछ लागू नहीं होते हैं क्योंकि मैं एक एम्बेडेड प्लेटफॉर्म पर हूं। मैंने कुछ देखा है कि चक्रीय-पी के चक्र के साथ chrt -p pr 0 दिखाता है और दूसरे को शेड्यूल करता है, सुनिश्चित नहीं है कि यह सही है – eactor

+1

यह ठीक है। रीयलटाइम प्राथमिकता पर चक्रीय स्पॉन्स थ्रेड - मुख्य धागे की प्राथमिकता अभी भी 0 है। यदि आप रीयलटाइम थ्रेड के टीआईडी ​​को पास करते हैं (मैंने इसे "ps am -o cmd, tid, pri" पहचानने के लिए उपयोग किया है), यह इसकी पहचान करेगा प्राथमिकता 99 धागा के रूप में। – crosstalk

संबंधित मुद्दे