क्यों एक सामान्य या वास्तविक समय पर एक कम विलंबता कर्नेल चुनें?


105

Ubuntu स्टूडियो 12.04 स्थापित करने के बाद, मैंने पाया कि यह एक कम विलंबता कर्नेल का उपयोग करता है। मैंने खोज की कि क्यों और कैसे एक वास्तविक समय या सामान्य में बदलना है। लेकिन ऐसा लगता है कि लिनक्स के इस हिस्से को इतना कवर नहीं किया गया है।

क्यू: क्यों एक सामान्य या realtime पर एक कम विलंबता कर्नेल चुनें?

पुनश्च: मैंने इस प्रश्न और इस पोस्ट के उत्तर पहले ही पढ़ लिए हैं ।


3
+1 क्योंकि यह एक बहुत अच्छा सवाल होना चाहिए अगर हर कोई स्टम्प्ड हो। मैं कम-विलंबता, सामान्य और वास्तविक समय गुठली के बीच अंतर नहीं जानता। अगर -realtimeरीयलटाइम है, तो क्या है -rt? और -preemptकर्नेल के साथ क्या हो रहा है ? मैं gemue2010 को धन्यवाद दूंगा, उन्होंने इसे समझाने के लिए बहुत अच्छा काम किया, लेकिन यह अभी भी सब कुछ नहीं समझाता है।
हाईटेककंप्यूटरजेक

जवाबों:


61

ये कुछ सरल दिशानिर्देश हैं जो आपको यह समझने में मदद करने के लिए दिए गए हैं कि किस कर्नेल और किस क्रम में, आपको अपने उपयोग के मामले में फिट होने के लिए परीक्षण करना चाहिए।

  • यदि आपको अपने सिस्टम के लिए कम विलंबता की आवश्यकता नहीं है, तो कृपया -generic कर्नेल का उपयोग करें।
  • यदि आपको कम विलंबता प्रणाली (उदाहरण के लिए ऑडियो रिकॉर्ड करने के लिए) की आवश्यकता है, तो कृपया -preempt कर्नेल को पहली पसंद के रूप में उपयोग करें। यह विलंबता को कम करता है लेकिन बिजली की बचत सुविधाओं का त्याग नहीं करता है। यह केवल 64 बिट सिस्टम (जिसे amd64 भी कहा जाता है) के लिए उपलब्ध है।
  • यदि -preempt कर्नेल आपकी आवश्यकताओं के लिए पर्याप्त कम विलंबता प्रदान नहीं करता है (या आपके पास 32 बिट सिस्टम है) तो आपको -llatency कर्नेल की कोशिश करनी चाहिए।
  • यदि -lowlency कर्नेल पर्याप्त नहीं है, तो आपको -rt कर्नेल आज़माना चाहिए
  • यदि .rt कर्नेल आपके लिए पर्याप्त स्थिर नहीं है, तो आपको -realtime कर्नेल आज़माना चाहिए

उबंटू हेल्प सोर्स

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

अधिक विस्तृत रूप से आसान ब्लॉग पोस्ट के लिए, इस लिंक को पढ़ें


1
मैंने आपके द्वारा पोस्ट किया गया पिछला लेख पहले ही पढ़ लिया था। दूसरे के बारे में, वे तथ्य कितने विश्वसनीय हैं?
Starx

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

5
नहीं .. मुझे नहीं लगता कि समस्या हल हो गई है। अगर आपका जवाब कुछ भी करता है, तो इससे मेरी उत्सुकता और अधिक बढ़ जाती है।
Starx

9
क्या 2015 में भी कोई सही है? -preempt, -rt, और -realtimeकर्नेल नहीं अब मौजूद नहीं हैं
naught101

51

मैं ubuntu प्रशंसक द्वारा लिंक किए गए ब्लॉगपोस्ट का लेखक हूं: http://sevencaplysins.wordpress.com/2007/08/10/low-latency-kernel-wtf/

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

लेकिन आजकल प्रोसेसर में कई कोर होते हैं, इसलिए जब कुछ प्रक्रियाओं पर ध्यान देने की आवश्यकता होती है, तो इसे लेने के लिए कोर की प्रतीक्षा करने के बजाय उन्हें आसानी से एक अलग कोर पर आवंटित किया जा सकता है।

(stackexchange को मेरे संदर्भ / व्यक्तिगत अनुभव की आवश्यकता है: मैं एक इलेक्ट्रॉनिक इंजीनियर हूँ, http://www.thzoo.it पर कई गेमवियर्स पर रक्तपात करने वाला noobgamer है )।

इसलिए, अंगूठे के एक नियम के रूप में, मैं कहूंगा: यदि आपका प्रोसेसर एक शक्तिशाली संख्या-क्रंचिंग उच्च-आवृत्ति क्वाड-कोर है और आप आमतौर पर एन्कोडिंग / डिकोडिंग / गेमिंग (हुह) के दौरान टन नहीं खोलते हैं, तो आप कर सकते हैं बस जेनेरिक (या i686, या amd64 का प्रयास करें यदि वे मौजूद हैं) कर्नेल और उच्चतम संभव थ्रूपुट (यानी, कच्चे नंबर-क्रंचिंग प्रोसेसर करने में सक्षम है)। यदि आप समस्याओं का अनुभव करते हैं (उन्हें वास्तव में मामूली होना चाहिए) या आपकी मशीन बाजार के शीर्ष की तुलना में थोड़ी कम शक्तिशाली है, तो इसके लिए जाएं।

यदि आप एक निम्न-अंत मशीन पर हैं जिसमें केवल एक या दो कोर हैं, तो -llatency का प्रयास करें। आप -आर्टटाइम भी कोशिश कर सकते हैं, लेकिन आप पाएंगे कि यह तब तक प्रक्रियाओं को अवरुद्ध करता है जब तक कि "वास्तविक समय" वाले अपना काम खत्म नहीं कर लेते। मेरा मानना ​​है कि रियल टाइम कर्नेल "वेनिला" नहीं है, लेकिन CONFIG_PREEMPT_RT पैच लागू है। मुझे लगता है कि realtime गुठली केवल उन लोगों के लिए है जिन्हें एम्बेडेड सिस्टम पर एक ही एप्लिकेशन का निर्माण करना है, इसलिए सामान्य डेस्कटॉप उपयोगकर्ताओं को वास्तविक लाभ नहीं होना चाहिए क्योंकि वे आमतौर पर एक ही समय में उचित संख्या में एप्लिकेशन चलाते हैं।

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

PREEMPT=y

तथा:

CONFIG_1000_HZ=y

कुछ शक्तियाँ जोड़ने के लिए आप इसे जाँच सकते हैं:

CONFIG_NO_HZ=y

मैंने देखा कि आप सर्वर बनाए रखने का उल्लेख करते हैं, मैं वाल्व स्रोत समर्पित सर्वर (विशेष रूप से सीएसजीओ) के लिए सबसे अच्छा कर्नेल का पता लगाने की कोशिश कर रहा हूं। सबसे अधिक सीएस थ्रेड्स मुझे मिलते हैं जो सुनार से संबंधित हैं जिन्हें 1000 हर्ट्ज कर्नेल की आवश्यकता थी। Srcds के साथ, क्या नीचता खराब है? अगर इससे कोई फर्क नहीं पड़ता है तो मैं सिर्फ नीचता से चिपके रहूंगा क्योंकि अभी मेरे पास यही है (मैं 128 टिक srcds सर्वर के लिए सीपीयू कोर को अलग करता हूं क्योंकि यह वास्तव में वैसे भी मल्टी थ्रेडिंग से लाभ नहीं देता है)।
विंसेंट डी स्मेट

सुझाव जानने के लिए उपयोगी, मैं पूरी तरह से बदल जाएगा preempt। मैं ऐसी जल्दबाजी में नहीं हूं, मैं चाहता हूं कि मेरी कर्नेल यो एक गंदी समुद्री डाकू की तरह हो।
userDepth

4

ऊपर दिए गए दस्तावेज़ से ( http://www.versalogic.com/mediacenter/whitepapers/wp_linux_rt.asp )

  1. एक नरम रीयल-टाइम सिस्टम कम औसत विलंबता देगा, लेकिन गारंटीकृत अधिकतम प्रतिक्रिया समय नहीं।
  2. एक कठिन रीयल-टाइम सिस्टम एक खराब-केस सिस्टम लोड के तहत, हर समय (100 प्रतिशत) वांछित समय सीमा को पूरा करता है।
  3. याघमौर [4] के अनुसार, "वास्तविक समय गारंटियों से संबंधित है, कच्ची गति के साथ नहीं।"

लेख कहता है कि हार्ड रियलटाइम कर्नेल के लिए उत्तरदायी या समयबद्ध सबसे महत्वपूर्ण संपत्ति है इसलिए कभी-कभी वे गैर-महत्वपूर्ण गतिविधि में देरी करते हैं जो देरी का कारण बनती है लेकिन निम्नता या अन्य नरम वास्तविक समय के लिए कर्नेल सामान्य विलंबता को कम करने की कोशिश करता है जो अधिकांश मामलों में मदद करता है। कम विलंबता के कारण प्रणाली तेज प्रतीत होती है। लेख को ध्यान से पढ़ें।


यह सच है, लेकिन हमें यह जानने की जरूरत है कि कौन सा कर्नेल वेरिएंट वास्तविक समय की "कठोरता" से मेल खाता है।
मेलेबियस

0

मेरे पास 1600MHz पर दोहरी AMD A6-4400M के साथ यह पुराना लैपटॉप है, जिसका उपयोग मैं कार्यालय से बाहर होने पर, मुख्य रूप से ईमेल पढ़ने और आकस्मिक वेब साइटों को ब्राउज़ करने के लिए करता हूं। कुछ ऐसा था, जो संभवत: सॉफ़्टवेयर अपडेट से जुड़ा था, जो इसे अनुत्तरदायी बनाता है। पहली बार देखे बिना एक दर्जन पात्रों को टाइप करने जैसा कुछ। अक्सर विजेट पूछ रहा है कि क्या मुझे एक प्रक्रिया को मजबूर करना चाहिए।

बाद sudo apt-get install linux-lowlatencyऔर रिबूट, यह चिकनी और उत्तरदायी बन गया। (अनाम -r 5.0.0-20-न्यूनता।) अद्भुत, मुझे वर्षों पहले स्विच करना चाहिए था। मुझे सात के उत्तर पर जोर देने दें: जब तक आप एक नंबर क्रंचिंग सर्वर से अधिकतम निचोड़ना नहीं चाहते हैं, तब तक -प्रश्न के लिए जाएं !

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