linux 内核 nfs,为什么Linux NFS服务器在内核中实现而不是用户空间?

我只是想知道为什么Linux NFS服务器在内核中实现而不是用户空间应用程序?

我知道userspace NFS daemon存在,但它不是提供NFS服务器服务的标准方法.

我认为将NFS服务器作为用户空间应用程序运行将是首选方法,因为它可以提供额外的安全性,在用户空间而不是内核中运行守护进程.它也适合普通的Linux主体做一件事并做得很好(并且守护进程不应该是内核的工作).

事实上,我能想到的在内核中运行的唯一好处是上下文切换带来的性能提升(这是一个值得商榷的原因).

那么有没有任何记录的原因,为什么它的实现方式呢?我试着用谷歌搜索但找不到任何东西.

似乎有很多混乱,请注意我不是在询问有关挂载文件系统的问题,我在询问是否提供了网络文件系统的服务器端.有一个非常明显的区别.在本地挂载文件系统需要支持内核中的文件系统,前提是它不支持(例如samba或unfs3).

解决方法:

据我所知,unfs3已经死了; Ganesha是目前最活跃的用户空间NFS服务器项目,虽然还不完全成熟.

虽然它提供不同的协议,但Samba是一个成功的例子

在用户空间中运行的文件服务器.

我没有看到最近的性能比较.

其他一些问题:

>普通应用程序按路径名查找文件,但nfsd需要能够

通过filehandle查找它们.这很棘手,需要得到支持

文件系统(并非所有文件系统都可以支持它).在过去它不是

可以从用户空间执行此操作,但已添加了更新的内核

name_to_handle_at(2)和open_by_handle_at(2)系统调用.

>我似乎记得阻止文件锁定调用是一个问题;我不确定

这些天用户空间服务器如何处理它们. (你绑定一个服务器线程

等待锁定,还是你的民意调查?)

>较新的文件系统语义(更改属性,委托,共享锁)

可以实施

在内核中更容易(理论上 – 它们大部分还没有).

>您不希望手动检查权限,配额等

你想改变你的uid并依赖普通的内核vfs代码来做

那. Linux有一个系统调用(setfsuid(2))应该这样做.对于

我忘记的原因,我认为在服务器中使用它更加复杂

比应该的.

通常,内核服务器的优势是与vfs和导出的文件系统更紧密地集成.我们可以通过提供更多内核接口(例如文件句柄系统调用)来弥补这一点,但这并不容易.另一方面,现在人们想要导出的一些文件系统(如gluster)实际上主要存在于用户空间中.这些可以由内核nfsd使用FUSE导出 – 但是对于较新的功能可能还需要对FUSE接口进行扩展,并且可能存在性能问题.

简短版:好问题!

标签:linux,kernel,nfs

来源: https://codeday.me/bug/20190808/1623303.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值