一种基于异步回调机制的NFS服务端设计与实现
2013-05-17刘荣胜
刘荣胜
(湖南铁道职业技术学院 信息工程系,湖南 株洲 412001)
网络文件系统(network file system,NFS)最初由sun公司于20世纪50年代设计,是一个典型的网络的文件系统.其中最常用的有NFS2、NFS3和NFS4等版本,其中NFS4是最新的版本.NFS支持Unix、Linux和DOS等系统,提供在网络内各设备对于共享文件操作的方式,如某一文件系统物理上是存放在其他设备上的,用户都可以不加区别地对本地和非本地文件进行操作.NFS向下支持各种本地文件系统,如FAT、EAT、NTFS和HPFS等.
NFS的设计主要是基于在网络中普通的服务端/客户端的结构.每个提供文件共享的设备都可以认为是服务端,而每个需要操作远程文件的设备都认为是客户端.对于不同的文件操作,某一具体的设备可以同时担任服务器和客户功能.通过服务端的程序管理文件系统中文件和目录的输出,就可以为其他设备使用;通过客户端的程序管理文件和目录的挂载,也可以为本地系统使用.通过一系列操作,非本地的文件目录挂载在本地设备上.在实现文件系统挂载后,依据NFS协议,本地设备也可对其中的文件进行操作.当然,NFS中还包括通信协议,使服务端和客户端能够在网络中正确地交换信息.
1 NFS服务器端工作原理与流程
1.1 NFSD与其他RPC模块交互
NFSD是NFS的服务器端,既可以使用固定的端口号与客户端通信,也可以使用动态端口与客户端通信.在NFS的工作过程中除了NFSD模块外,还有PORTMAP和MOUNTD的RPC服务程序,并发挥了重要作用,其各模块的交互时序如图1所示.
首先,启动PORTMAP服务.PORTMAP采用知名端口1 1 1进行通讯,N F S D、MOUNTD等服务启动后,会将自己的程序、版本、过程和端口向PORTMAP注册,PORTMAP维护一张程序与端口号的映射表.当客户端需要访问NFSD模块时,需先向PORTMAP访问MOUNTD所使用的端口号,客户端获取MOUNTD端口号后,调用MOUNTD挂在服务端的文件目录.文件目录挂载成功后,客户端向PORTMAP询问NFSD模块的端口号,然后客户端通过从PORTMAP获取的端口号向NFSD发送XDR数据.NFSD接收到客户端的请求之后,调用相应的处理过程进行处理,然后将处理结果返回给客户端.
图1 NFS时序图
1.2 NFSD模块内部处理流程
NFSD接收到消息之后,首先要对接收到的客户端XDR数据进行解析,然后根据解析的参数调用底层文件系统进行处理,最后将处理结构编码成XDR数据发送给客户端,其具体的程序处理流程如图2所示.
图2 NFSD内部处理流程
2 基于异步回调机制的改造
2.1 Linux系统中NFSD模块的分析
从图2中分析看,Linux中自带的NFSD模块,当nfsd处理程序调用下层vfs系统对文件进行操作时,需要层层调用,然后等待下层文件系统返回处理的结果,程序才能够往下走,如果需要处理的文件操作需要较长时间才能处理完成,系统就无法处理后续的客户请求.会导致整个系统请求的平均等待时间过长.
2.2 基于异步回调机制的NFSD设计
基于异步回调机制实现的NFSD由主调和回调两个模块组成,NFSD主调流程图如图3所示,NFSD回调流程图如图4所示.当客户端向服务器端发起文件请求,服务器端启动主调处理流程,先将介绍的数据进行解析、认证和鉴权等操作,然后指派给相应的处理过程进行,如果是合法、有效的请求,主调程序将处理请求提交下层文件系统进行处理,本次主调流程结束.继续处理其他用户的请求,而不用等待下层文件系统处理结果,这样可以减少等待时间,提高系统效率.
当下层文件系统接收到主调模块提交的请求,会对用户请求在本地文件系统中进行处理,处理完毕后,下层文件系统调用回调模块将处理结果发送给请求的客户.首先dvfs主动调用本地文件系统进行处理,当本地文件系统处理完成后,会回调dvfs文件系统的回调接口,dvfs进一步回调nfsd的回调接口,层层回调,直到将处理结果发送给客户端.
2.3 基于异步回调机制的NFSD实现
采用异步回调机制实现的NFSD模块,在同一进程中响应不同客户发送过来的请求.这样可以避免在不同进程间切换,减少消耗内存和CPU资源.为了保障不同客户端发送的请求不被丢失,以一个上下文环境队列保存客户发送来的请求.同时,为了防止处理客户端对同一请求发送多次而导致重复多次处理同意请求,在向队列中添加请求时,先要检验是否为已处理的请求.
3 结论
在计算机和网络技术飞速发展的今天,信息的通讯量和存储量都有了几何级的增长,使用传统的阵列存储技术由于受地域和空间等条件的限制,已经无法满足各种应用对存储的要求.本研究开发了一种基于异步回调机制的网络并发存储技术,该技术基于网络,磁盘可以不受空间的限制,大大提高存储空间;同时,本研究的实现基于回调实现,可以减少进程和线程之间的上下文环境切换,可有效地提高网络存储系统的并发访问速度.
[1]孔华锋. 基于主动网络技术的存储网络关键技术的研究[D]. 武汉:华中科技大学,2004.
[2]徐明. 网络存储技术的研究现状与发展[J]. 电脑知识与技术,2011,30 (7):7 397-7 398.
[3]罗 宁,闫光星,白英彩. SAN与NAS融合技术研究[J]. 计算机应用与软件,2004,21(10):70-72.
[4]王坤,王锦. 基于NFSV4协议的关系型数据库部署[J]. 计算机工程,2011,31(1):72-74.
[5]蒋博雅,张江陵. 提高附网存储(NAS)可靠性的研究[J]. 计算机工程与科学,2006,28(1):34-36.
[6]程延锋. 基于Linux的NAS系统设计[D]. 西安:西安电子科技大学,2009.