कर्नेल मॉड्यूल का लाभ कर्नेल के अंदर संकलित किया गया?


19

कर्नेल मॉड्यूल को कर्नेल (लोड करने योग्य मॉड्यूल के बजाय) में संकलित करने का क्या लाभ है?


जवाबों:


7

निर्भर करता है। यदि आपके पास थोड़ी मात्रा में मेमोरी है, तो मॉड्यूल का उपयोग फिर से शुरू में सुधार कर सकता है क्योंकि वे हर बार पुनः लोड नहीं किए जाते हैं (मुझे यह 2 गीब की रैम पर महत्वपूर्ण लगता है लेकिन पारंपरिक हार्डड्राइव पर 4 जीईबी पर नहीं)। यह विशेष रूप से सच है जब बैटरी मॉड्यूल में कुछ बग के कारण (संकलित किए जाने पर या मॉड्यूल के रूप में), इसे शुरू करने में बहुत समय लगा (कई मिनट)। यहां तक ​​कि बगैर जेंटू पर बग मैं समय-समय पर ( systemd-analysis33 द्वारा ) रिपोर्ट करने में कामयाब रहा, केवल संकलित कर्नेल से मॉड्यूल में बदलकर - 'आश्चर्यजनक रूप से' कर्नेल की शुरुआत 9 से 1.5 के दशक में बदल गई।

इसके अलावा, जब आप नहीं जानते कि आप किस हार्डवेयर का उपयोग करने जा रहे हैं, तो मॉड्यूल स्पष्ट रूप से फायदेमंद हैं।

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


क्या आप इस जवाब को फिर से ध्यान से पढ़ने का मन बना रहे हैं। मेरे पास होगा, लेकिन मुझे नहीं पता कि आपके कहने का क्या मतलब है, जैसे ... पारंपरिक हार्डड्राइव पर
tshepang

मेरा मतलब था चुंबकीय वाले (मुझे एसएसडी के साथ कोई अनुभव नहीं है)।
मैकीज पीचोटका

मैंने इसे और अधिक पठनीय बनाने की कोशिश की है। क्या आप देख सकते हैं कि मैंने इसे खराब नहीं किया।
tshepang

धन्यवाद। मैंने अभी परीक्षा सत्र समाप्त किया है, इसलिए मेरे पास इसे देखने का समय नहीं था।
मैकीज पाइचोटका

7

जहां तक ​​मुझे पता है, गति में कोई अंतर नहीं है।

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

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


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

4

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

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

यह आपको एक बड़ी छवि प्रदान करने के लिए वास्तुशिल्प रूप से उपयुक्त हो सकता है, यह तर्क देते हुए कि कम स्वतंत्र मॉड्यूल बनाए रखना आसान है और लचीलेपन का नुकसान महत्वपूर्ण नहीं है। शैली और व्यवहार के मामलों में इस तरह के बहुत से कारण उद्यम करते हैं।


2

कभी-कभी यह आवश्यक है। यदि आप एक मॉड्यूल के रूप में कुछ महत्वपूर्ण ड्राइवर (जैसे SCSI ड्राइवर) संकलित करते हैं तो आपका सिस्टम बूट नहीं होगा।

मॉड्यूल के रूप में संकलन नहीं करने के लिए एक और महान उम्मीदवार रूट विभाजन का फाइलसिस्टम प्रकार है। यदि कर्नेल ext3को पढ़ने के लिए समझ में नहीं आता है /lib/modules/तो वह इससे मॉड्यूल कैसे लोड करेगा?

इसके बारे में इस तरह से सोचें: मॉड्यूल का उपयोग करने के लिए कर्नेल मॉड्यूल को पढ़ने और लोड करने के लिए आपके सिस्टम के बारे में पर्याप्त जानने की जरूरत है। उपयोग और परीक्षण और त्रुटि :-)


मैं कुछ प्रदर्शन में सुधार के बारे में सोच रहा हूं ? क्या कोई है?
फुनेहे

1
अतीत में लोग बड़ी लंबाई में चले गए हैं कि केवल जो आवश्यक है उसके साथ सबसे छोटा संभव कर्नेल का उत्पादन करें । आज यह काफी हद तक बदल गया है। वास्तव में, जब भी आप पहली बार किसी मॉड्यूल को लोड करते हैं तो आपको एक छोटे प्रदर्शन हिट का सामना करना पड़ेगा। यह कहने के लिए नहीं है कि आपको कर्नेल में सब कुछ संकलित करना चाहिए :-) यह देखें: articleinput.com/e/a/title/…
nc3b

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

3
सांड। एक सिस्टम एक SCSI ड्राइवर के साथ एक initrd में एक मॉड्यूल के रूप में ठीक बूट होगा। यही वे लिए हैं।
10

हाँ ... इसके लिए मॉड्यूल एक initrd में है जो कर्नेल समझ सकता है ...
Dagelf

2

मैं कर्नेल के अंदर अंतर्निहित हार्डवेयर के लिए हर ड्राइवर को संकलित करता हूं। अपवाद हार्डवेयर होगा जो स्थायी नहीं है (उदाहरण के लिए यूएसबी कनेक्टेड हार्डवेयर)।

जैसे ही मेरा हार्डवेयर कॉन्फ़िगरेशन कभी भी बदलने की संभावना नहीं है, मैं मॉड्यूल से परेशान नहीं हूं।

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