Чому Linux NFS-сервер реалізований в ядрі на відміну від простору користувачів?


33

Мені було просто цікаво, чому сервер Linux NFS реалізований у ядрі, на відміну від додатка простору користувачів?

Я знаю, що демон NFS у просторі користувачів існує, але це не стандартний метод надання сервера NFS.

Я думаю, що найкращим підходом буде запуск сервера NFS як програми для користувальницького простору, оскільки він може забезпечити додаткову безпеку, що має демоновий запуск у просторі користувачів замість ядра. Він також підходив би до загального директора Linux, який займався однією справою і робив це добре (і що демони не повинні бути роботою для ядра).
Насправді єдина користь, яку я можу подумати про запуск у ядрі, - це підвищення продуктивності від переключення контексту (і це є дискусійною причиною).

То чи є якась документально підтверджена причина, чому вона реалізується такою, якою вона є? Я спробував гугнути навколо, але нічого не зміг знайти.


Здається, виникає велика плутанина. Зверніть увагу, я не питаю про встановлення файлових систем, я про питання надання серверній частині мережевої файлової системи . Є дуже чітка різниця. Місцеве встановлення файлової системи вимагає підтримки файлової системи в ядрі, якщо її немає (наприклад, samba або unfs3).


NFS - файлова система. Драйвери файлової системи користувачів повинні використовувати FUSE, який, як правило, погано працює.
Йорданм

@jordanm ні, ні. Насправді ви не можете запустити мережеві файлові системи (NFS, CIFS / samba, coda тощо) через FUSE. FUSE призначений для встановлення файлових систем на локальній машині, а не для їх обслуговування.
Патрік

ви праві, моє твердження стосуватиметься лише клієнта.
Йорданм

@jordanm навіть не так, на жаль. Ви можете монтувати файлові системи без ПЗУМКА. Так чи інакше, FUSE - це відносно нова технологія, клієнтська мережа файлових систем мережі існувала задовго до того, як FUSE зробив :-). FUSE просто забезпечує спосіб підтримки файлових систем, не наданих ядром (не намагаючись бути злим, просто сподіваючись вияснити помилки :-P)
Патрік,

2
@StarNamer Ви все ще говорите про клієнта. Я говорю про сервер. Ви можете запустити unfs3(який є сервером NFS) без будь-якої підтримки ядра.
Патрік

Відповіді:


25

unfs3наскільки я знаю, мертвий; Ганеша - це найактивніший проект сервера NFS на даний момент, хоча він не повністю зрілий.

Хоча він обслуговує різні протоколи, Samba є прикладом успішного файлового сервера, який працює в просторі користувачів.

Я не бачив останніх порівнянь ефективності.

Деякі інші проблеми:

  • Звичайні програми шукають файли за назвою шляху, але nfsdпотрібно мати можливість їх шукати за допомогою файлових файлів . Це складно і вимагає підтримки файлової системи (і не всі файлові системи можуть її підтримувати). Раніше цього не можна було зробити з простору користувачів, але новіші ядра додали name_to_handle_at(2)і open_by_handle_at(2)системні виклики.
  • Здається, я пам'ятаю, що блокування дзвінків із блокуванням файлів є проблемою; Я не впевнений, як сервери простору користувачів обробляють їх сьогодні. (Ви пов’язуєте серверну нитку, яка чекає на замок, або ви опитуєте?)
  • Новіша семантика файлової системи (зміни атрибутів, делегування, блокування обміну) може бути запроваджена спочатку в ядрі (теоретично - вони здебільшого ще не були).
  • Вам не потрібно вручну перевіряти дозволи, квоти тощо - замість цього ви хочете змінити свій uid і покластися на загальний код vfs ядра для цього. І в Linux є системний виклик ( setfsuid(2)), який повинен це робити. З причин, які я забуваю, я думаю, що це виявилося складніше використовувати на серверах, ніж це повинно бути.

Взагалі сильні сторони сервера ядра - тісніша інтеграція з vfs та експортованою файловою системою. Ми можемо це компенсувати, надаючи більше інтерфейсів ядра (наприклад, системні дзвінки файлових файлів), але це непросто. З іншого боку, деякі файлові системи, які люди хочуть експортувати в наші дні (як-от глюстер), насправді живуть переважно в просторі користувачів. Вони можуть бути експортовані ядром nfsd за допомогою FUSE, але знову-таки розширення на інтерфейси FUSE можуть знадобитися для нових функцій, і можуть виникнути проблеми з продуктивністю.

Коротка версія: гарне запитання!


2
Читачі повинні зауважити, що Брюс є (a? The?) Підтримувачем сервера Linux NFS, тому, імовірно, він знає, про що йде мова. :)
Dan Pritts

@derfian FYI - ви можете тут прокоментувати, що " unfs3живе і рухається до Github" ?
ms-ati

Я прокоментував це вище, тому що @derfian, або користувач StackOverflow ( unix.stackexchange.com/users/23034/derfian ), є підтримувачем unfs3, і нещодавно оголосив, що він не мертвий, наприклад, у цьому коментарі Github
ms-ati

Відповідно до написаного інструктором NFS, ця відповідь є досить невиразною.
Торстен Бронгер

18

Олаф Кірх спочатку розробив як користувацький простір, так і версію сервера NFS на основі ядра. У своїй книзі про 2000 рік "Управління мережею Linux" він говорить:

Ядро 2.2.0 підтримує експериментальний сервер NFS на основі ядра, розроблений Олафом Кірхом та далі розроблений HJ Lu, G. Allan Morris та Trond Myklebust. Підтримка NFS на основі ядра забезпечує значне підвищення продуктивності сервера.

Я думаю, що як тільки сервер NFS перемістився в ядро ​​для підвищення продуктивності, ніхто не бачив причин знову його виводити.


8

Starnamer вірно (я був одним з бета-тестерів).

Поміщення його в ядро ​​було спробою поліпшити бездоганну продуктивність (головним чином для клієнтів PCNFS), і як тільки ця проблема була вирішена, ніхто більше не переглядав її.

Існує низка недоліків із наявністю NFS в ядрі, не менш важливим з яких є те, що воно не грає добре, якщо нічого іншого не торкається тієї самої файлової системи (є серйозні неприємні корупційні ризики), але тоді (1993-4) ми цього не робили Я не розумію, що це виявиться проблемою.

Ми були молодші і дурніші і т. Д. І т.д.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.