लिनक्स एनएफएस सर्वर कर्नेल में कार्यान्वित क्यों किया गया है क्योंकि उपयोगकर्तास्पेस के विपरीत है?


33

मैं सोच रहा था कि लिनक्स एनएफएस सर्वर कर्नेल में लागू किया गया है क्यों कि एक यूजरस्पेस एप्लिकेशन के विपरीत?

मुझे पता है कि एक उपयोगकर्ता एनएफएस डेमॉन मौजूद है, लेकिन यह एनएफएस सर्वर सेवाएं प्रदान करने के लिए मानक तरीका नहीं है।

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

तो क्या कोई दस्तावेजी कारण है कि इसे जिस तरह से लागू किया गया है? मैंने चारों ओर गुगली करने की कोशिश की, लेकिन कुछ भी नहीं मिला।


ऐसा लगता है कि बहुत भ्रम है, कृपया ध्यान दें कि मैं बढ़ते फाइल सिस्टम के बारे में नहीं पूछ रहा हूं, मैं नेटवर्क फाइल सिस्टम के सर्वर साइड प्रदान करने के बारे में पूछ रहा हूं । बहुत अलग अंतर है। फ़ाइल सिस्टम को स्थानीय रूप से माउंट करने के लिए कर्नेल में फाइल सिस्टम के लिए समर्थन की आवश्यकता होती है, बशर्ते यह नहीं करता (जैसे सांबा या एक्स 3)।


NFS एक फाइल सिस्टम है। उपयोगकर्तास्पेस फाइल सिस्टम ड्राइवरों को FUSE का उपयोग करना पड़ता है, जो आमतौर पर प्रदर्शन के लिए खराब होता है।
jordanm

@ जोर्डनम नो वे नहीं। वास्तव में आप FUSE के माध्यम से नेटवर्क फाइल सिस्टम (NFS, CIFS / सांबा, कोडा, आदि) नहीं चला सकते। FUSE स्थानीय मशीन पर बढ़ते फाइल सिस्टम के लिए है, न कि उनकी सेवा करने के लिए।
पैट्रिक

आप सही हैं, मेरा कथन केवल ग्राहक के लिए लागू होगा।
जोर्डन

@ जोर्डनम दुर्भाग्य से भी नहीं। आप फ़ाइल सिस्टम को FUSE के बिना माउंट कर सकते हैं। FUSE वैसे भी एक अपेक्षाकृत नई तकनीक है, नेटवर्क फाइल सिस्टम का क्लाइंट पक्ष FUSE के :-) होने से बहुत पहले मौजूद था। FUSE सिर्फ कर्नेल द्वारा प्रदान नहीं की गई फाइलसिस्टम का समर्थन करने का एक तरीका प्रदान करता है (मतलब होने की कोशिश नहीं कर रहा है, बस गलतफहमी को दूर करने की उम्मीद कर रहा है: --P)
पैट्रिक

2
@StarNamer आप अभी भी क्लाइंट के बारे में बात कर रहे हैं। मैं सर्वर के बारे में बात कर रहा हूँ। आप unfs3इसके लिए कोई कर्नेल समर्थन के बिना चला सकते हैं (जो कि NFS सर्वर है)।
पैट्रिक

जवाबों:


25

unfs3जहाँ तक मुझे पता है, मर चुका है; गणेश अभी सबसे सक्रिय यूजरस्पेस एनएफएस सर्वर परियोजना है, हालांकि यह पूरी तरह से परिपक्व नहीं है।

यद्यपि यह अलग-अलग प्रोटोकॉल परोसता है, सांबा एक सफल फ़ाइल सर्वर का एक उदाहरण है, जो कि यूजरस्पेस में संचालित होता है।

मैंने हाल की प्रदर्शन तुलना नहीं देखी है।

कुछ अन्य मुद्दे:

  • साधारण अनुप्रयोग पथनाम द्वारा फ़ाइलों को देखते हैं, लेकिन nfsdउन्हें फ़ाइलहैंड द्वारा देखने में सक्षम होने की आवश्यकता होती है। यह मुश्किल है और फाइल सिस्टम से समर्थन की आवश्यकता है (और सभी फाइल सिस्टम इसे समर्थन नहीं कर सकते हैं)। अतीत में यह यूज़रस्पेस से ऐसा करना संभव नहीं था, लेकिन और अधिक हाल के दाने को शामिल किया है name_to_handle_at(2)और open_by_handle_at(2)सिस्टम कॉल।
  • मुझे याद है कि फ़ाइल-लॉकिंग कॉल को एक समस्या होने से रोकने के लिए; मुझे यकीन नहीं है कि इन दिनों उपयोगकर्ता सर्वर कैसे संभालते हैं। (क्या आप लॉक पर प्रतीक्षा कर रहे सर्वर थ्रेड को टाई करते हैं, या आप मतदान करते हैं?)
  • नई फ़ाइल सिस्टम शब्दार्थ (परिवर्तन विशेषताएँ, प्रतिनिधिमंडल, शेयर लॉक) कर्नेल पहले (सिद्धांत रूप में - वे ज्यादातर अभी तक नहीं किए गए हैं) में और अधिक आसानी से लागू किया जा सकता है।
  • आपको हाथ से अनुमति, कोटा आदि की जांच करने की आवश्यकता नहीं है - इसके बजाय आप अपना यूआईडी बदलना चाहते हैं और ऐसा करने के लिए सामान्य कर्नेल vfs कोड पर भरोसा करते हैं। और लिनक्स में एक सिस्टम कॉल ( setfsuid(2)) है जो ऐसा करना चाहिए। जिन कारणों से मैं भूल जाता हूं, मुझे लगता है कि सर्वर में उपयोग करने के लिए यह अधिक जटिल साबित हुआ है जितना कि यह होना चाहिए।

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

लघु संस्करण: अच्छा सवाल!


2
पाठकों को ध्यान देना चाहिए कि ब्रूक्स लिनक्स एनएफएस सर्वर का अनुरक्षक (?) है, इसलिए संभवतः वह जानता है कि वह किस बारे में बात कर रहा है। :)
दान प्रिविट्स

@derfian FYI करें - आप यहाँ इस आशय की टिप्पणी कर सकते हैं कि " unfs3जीवित है और गितुब में जा रहा है" ?
एमएस-एटी

मैंने उपरोक्त टिप्पणी की क्योंकि @derfian, या StackOverflow उपयोगकर्ता ( unix.stackexchange.com/users/23034/derfian ), unfs3 का अनुचर है, और हाल ही में यह मृत घोषित नहीं किया गया था, उदाहरण के लिए इस Github टिप्पणी में
ms-ati

एक एनएफएस अनुचर द्वारा लिखित के लिए, यह उत्तर बहुत अस्पष्ट है।
टॉरस्टेन ब्रॉन्गर

18

ओलाफ किर्च ने मूल रूप से एनएफएस सर्वर के उपयोगकर्ता स्थान और कर्नेल दोनों आधारित संस्करण विकसित किए हैं। अपनी वर्ष 2000 की पुस्तक, "लिनक्स नेटवर्क एडमिनिस्ट्रेशन" में वे कहते हैं:

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

मुझे लगता है कि एक बार एनएफएस सर्वर के प्रदर्शन में सुधार करने के लिए कर्नेल में चले गए, किसी ने भी इसे फिर से बाहर निकालने का कोई कारण नहीं देखा।


8

Starnamer सही है (मैं बीटा परीक्षकों में से एक था)।

इसे कर्नेल में डालकर abysmal प्रदर्शन (मुख्य रूप से PCNFS क्लाइंट्स) को बेहतर बनाने का प्रयास किया गया था और एक बार उस समस्या को हल करने के बाद इसे फिर से देखा गया।

कर्नेल में एनएफएस होने के साथ कई कमियां हैं, जिनमें से कम से कम यह नहीं है कि यह समान फाइलसिस्टम को छूने के साथ किसी भी चीज के साथ अच्छी तरह से नहीं खेलता है (गंभीर भ्रष्टाचार के खतरे हैं) लेकिन फिर (1993-4) हमने ऐसा नहीं किया यह एहसास नहीं है कि यह एक मुद्दा बन जाएगा।

हम छोटे और अधिक मूर्ख आदि थे।

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