Linux NFSD软件架构与代码解析
时间:2023-08-21 10:40:51来源:数据存储张

在Linux操作系统发行版有一个NFS服务端,该服务端由内核态的模块和用户态的守护进程构成。其中内核态模块负责数据处理,而用户态守护进程则负责内核态的配置管理等功能。由于核心功能在内核态实现,因此与Linux中的本地文件系统有很好的兼容性,性能也比较好。


(相关资料图)

由于网络锁和挂载等协议与NFS协议不统一,因此都有独立的服务来处理相关的逻辑,这样整个NFS服务略显繁杂。但是到NFSv4之后,NFS协议将网络锁协议和挂载协议都融入其中,因此具体实现也简洁了很多。

在前面文章中我们已经简要的描述了NFS协议在Linux内核中的层次结构。本节我们再进一步详细的介绍一下服务端的软件架构。NFSD的软件架构其实并不复杂,我们可以进一步细化为如图1所示。

图片

从该图可以看出,当RPC服务收到来自客户端的请求时,它会对请求进行分发,由具体的程序(例如NFS或者NLM)来完成相关请求。其中请求的分发依据是其中的程序ID和例程ID,根据这两个信息就可以找到具体的函数指针。

如果相关请求涉及到文件操作,那么在例程中会直接调用VFS的接口(例如读数据)进行下一步的处理。而VFS则根据导出的目录信息调用本地文件系统(例如Ext4和XFS等)的接口实现具体的操作。

在内核中实现了所有的NFS协议,比如NFS v3、NFS v4、挂载和NLM等。由于从RPC服务到协议程序的流程是一样的,限于篇幅本文并不会对每种协议都做介绍。本节我们主要以NFS v3协议为例,介绍一下从网络收到消息到最终完成协议层处理的整个流程。如果大家熟悉了一个流程,再按照此流程来理解其它流程将非常容易。

1启动流程简析

首先我们分析一下NFSD的启动过程,该过程主要完成函数指针集向RPC服务注册的过程。以处理NFS协议的服务端为例,关键是启动了一个内核线程池。该线程池不断地接收网络消息,然后译码之后调用注册的回调函数进行具体命令的处理。如下代码所示是NFS服务的主函数,函数指针的注册和线程池的创建都在其中实现。

图片

在该函数中,其中nfsd_create_serv完成函数指针的初始化,主要涉及如下函数指针。

图片

上述函数指针中,svc_set_num_threads用于创建线程池,而nfsd则是线程函数,负责数据的接收和处理。我们看一下该函数的主体部分,具体如下:

图片

可以看出该函数主要调用两个函数,svc_recv用于接收消息,svc_process用于处理消息。这两个函数其实都是RPC模块的函数。其中svc_process会解析数据包,然后调用函数指针进行后续的处理。以NFSv3为例,它会调用如下函数指针集中的某个函数。

图片

2写数据流程示例

以写数据流程为例,当RPC服务接收到数据包后,根据协议格式解析出程序ID和例程的ID等信息,然后从注册的函数指针集就可以找到期望的函数指针进行处理。对于写数据而言,就会调用nfsd中的nfsd3_proc_write函数。

nfsd3_proc_write函数的工作其实并不多,更进一步会调到VFS的接口,具体如下图所示。最后,VFS会调用到具体文件系统的接口。如果我们导出的是Ext4的子目录,那么会调用Ext4的接口来处理写数据的请求。

图片

总体来看,NFSD的逻辑是比较清晰的,代码也并不复杂。而且各个接口的逻辑一致,因此理解了一个接口后,再理解其它接口也就容易很多了。

标签:

生活指南
  • 2023年8月20日水杨酸价格最新行情预测

    中国报告大厅2023年8月20日水杨酸价格最新走势监测显示:济南金锦泉经

  • 昆明招商引资硕果满枝 上半年引进省外产业到位资金同比增长19.37% 实际利用外资同比增长91.9%

    今年以来,昆明市认真落实云南省招商引资工作委员会关于招商引资各项决

  • JANE发文否认与洪知秀恋情传闻:完全没有关系

    搜狐娱乐讯8月18日,MOMOLANDJANE发文否认了与洪知秀的恋爱传闻,称和S

  • 穿着贪凉,当心引病上身

    夏日,人们喜欢在有空调的室内办公、学习、生活,许多人为了通风还在空

  • 陈金皓8.17黄金原油单边下跌谨防多头反扑?黄金原油晚间最新行情操作策略分析

    陈金皓黄金原油单边下跌谨防多头反扑?黄金原油晚间最新行情操作策略分

  • 日媒:美日澳计划派出多艘军舰在南海举行联合军演

    消息人士称,美国、日本和澳大利亚军方正在推进一项计划,将同时向菲律

  • 长城脚下是家乡

    天空像一匹没有任何杂色的宝蓝色丝绸,轻轻扣在祁连雪峰与铁灰色的黑山

  • 豆浆和牛奶,营养差异有多大?这么选择更受益→

    在人们的日常饮食中,豆浆和牛奶都是非常重要的营养饮品。那么,两者的

  • 美债收益率创15年新高 全球资产“风声鹤唳”

    “全球资产定价之锚”——10年期美债收益率再飙高,并于北京时间8月17

  • 京东零售CEO辛利军对话小米总裁卢伟冰:消费者是检验产品的最终尺度

    封面新闻记者付文超8月16日,京东零售CEO辛利军与小米集团合伙人、总裁

  • 8月14日欧洲地区对二甲苯收盘价格暂稳

    8月14日欧洲地区对二甲苯市场收盘价格暂稳,收盘价格为1180-1182美元

  • 信达生物(01801):国家药监局批准抗PCSK9单抗信必乐® (托莱西单抗注射液)用于治疗原发性高胆固醇血症和混合型血脂异常的成人患者

    智通财经讯,信达生物(01801)发布公告,国家药品监督管理局已经正式批

  • 延续老传统?《刺客信条:幻景》将支持D加密防篡改

    延续老传统?《刺客信条:幻景》将支持D加密防篡改,游戏,rpg,刺客信条

  • 慧择上半年新单保费同比增长109.2% 年内第二次上调全年利润指引

    南方财经全媒体记者郑嘉意北京报道2023年8月15日,慧择发布2023年第二

  • 铁路等部门全力保障暑运出行高峰

    新华社北京8月16日电(记者樊曦、周圆)暑运以来,各地客流持续走高,

  • 歌词 啷个哩个啷_啷个里格啷歌词

    1、对现实世界讽刺后,用理智的方法获得心灵深处的感知或觉醒!在寂寞

  • 民生
    • 西宁市大通县“8·18”灾后重建安置项目顺利交付

    • 苏丹武装冲突持续 西部一城市陷入战火

    • 《龙珠Z:卡卡罗特》DLC“天下第一武道会”发售宣传片

    • 云南失联女生最新消息 云南22岁失联女孩的同学发声 基本情况讲解