一种Linux文件系统的数据读写加速方法

文档序号:6363684阅读:1600来源:国知局
专利名称:一种Linux文件系统的数据读写加速方法
技术领域
本发明涉及计算机技术,尤其涉及Linux系统的数据读写(I/O)方法。
背景技术
传统的Linux文件系统的标准I/O接口是基于数据拷贝操作的,即数据读写 (I/o)操作会导致数据在操作系统内核地址空间的缓冲区和应用程序用户层地址空间定义的缓冲区之间进行拷贝(copy)。在这种机制中,磁盘驱动采用DMA方式可以将数据直接从磁盘读到页缓存中,或者将数据从页缓存直接写回到磁盘上,而不能直接在应用程序地址空间和磁盘之间进行数据传输,这样的话,数据在传输过程中需要在应用程序地址空间和页缓存之间进行多次数据拷贝操作。这样做最大的好处是可以减少磁盘I/O的操作,因为如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘I/O操作。但是数据传输过程中的数据拷贝操作却导致了极大的CPU开销,限制了系统进行数据传输的性能。对于这个问题,Linux工作者为应用程序提供标准I/O的接口引入了直接I/O的功能。凡是通过直接I/o方式进行数据传输,数据均直接在用户地址空间的缓冲区和磁盘之间直接进行传输,完全不需要页缓存的支持。这样就降低了应用程序做磁盘I/o时CPU 开销。这种技术在硬件配置性能较高的服务器或个人计算机中能带来显著的效果。但在 CPU配置较低的嵌入式系统中,无法给系统的性能设计带来帮助。而嵌入式系统却广泛使用 Linux系统。嵌入式系统的I/O受限于硬件的配置,又要达到很高的性能,只能把I/O处理模块以内核模块的方式实现,这种方式可以避免应用程序调用系统调用时,操作系统在用户层和内核层做频繁的切换。所以尽管用户层直接I/o的接口虽然已经存在,但在嵌入式的系统中,往往无法被利用。另外例如Linux上NFS server的I/O,也是在内核里实现,就无法使用标准的直接I/O接口。嵌入式系统如果需要提供网络文件系统(NFS)功能,性能就会很差。现有的嵌入式系统中,由于I/O处理模块以内核模块的形式实现,所以尽管在用户层中存在带直接I/o功能的标准I/O接口,但无法利用直接I/O功能。导致嵌入式系统的文件系统效率比较低。尤其是遇到大量连续数据的传输,尤其困难。

发明内容
为了克服背景技术所述的问题,本发明提出了一种Linux文件系统数据读写加速方法。本发明运行于一个嵌入式数据存储设备,所述数据存储设备是基于现场可编程门阵列(FPGA)的Linux数据存储装置,含有虚拟存储模块、内核I/O模块和文件系统构成的小型操作系统,连接SCSI/FC接口和网络接口,虚拟存储模块提供虚拟磁带机、虚拟磁盘服务,存储介质是磁盘。本发明的数据读写方法运行于文件系统中,具体是1)在Linux文件系统标准接口增加一个快速标识指针,作为进行快速模式的判断标识;需要做I/O的内核模块通过标准的filp_0pen()接口,传入快速标识指针和传统的文件标识0_DIRECT参数,打开文件。以页面(page)长度为单位,分配好缓冲区;
2)当内核模块通过filp_write()接口传入缓冲区的指针,开始写入数据时,Linux文件系统判断文件是否以快速标识指针方式打开,如果是,文件系统先锁定内核模块缓冲区,然后使用缓冲区的地址,通过磁盘的驱动写入到磁盘;如果不是,文件系统的写流程将传入的数据拷贝(copy)到文件系统的page cache中;
3)写入以快速标识指针的方式完成后,缓冲区被文件系统所释放。本发明的有益效果是内核模块通过此方法写入文件,就不必通过文件系统page cache copy,降低了 CPU的开销。这样在内核态实现的各种软件程序都能够在做I/O的时候,显著的降低CPU开销,提高整个系统的性能。


图1,本发明的实施例硬件组成结构图2,本发明的流程图3,本发明的数据存储装置的结构框图4,现有技术的一般的数据写入系统的步骤示意图5,本发明的技术的数据写入步骤示意图。
具体实施例方式本实施例是一个地震数据采集存储系统,地震数据是连续不断的采集的地震波信息,具有连续性、大容量的特点,根据现有的地震监测组织的数据格式,往往一组数据的容量要有几百兆,而且传输存储过程中不能有缺损,否则会影响监测的准确性。所以如图1,本实施例采用的一整套数据采集存储系统包括了数据采集服务器1, 和带有文件系统的嵌入式数据采集存储器2,两者通过SCSI、FC、TCP/IP网络连接。监测到的数据首先被数据采集服务器获取,然后通过网络让嵌入式数据采集存储器2存储。在这个系统中,嵌入式数据采集存储器2是基于FPGA的Linux文件系统的数据存储装置,其结构如图2 :含有SCSI/FC接口 3和网络接口 4,作为与网络连接的接口,在FPGA 芯片中含有虚拟存储模块5、内核I/O模块6和Linux文件系统7构成一个小型操作系统, 然后连接磁盘8作为存储媒介。本装置通过文件系统写入采集的数据,通过I/O内核模块实现数据的存储。磁盘是一般的SATA磁盘组成RAIDl。这个嵌入式存储器运行的是Linux 系统,本发明方法所述的数据读写加速方法适用于该系统。如图3所示的流程图,本发明方法的具体步骤是这样的在文件读写开始以后, 首先给文件添加一个快速标识指针,由于一般的Linux文件系统中普通的文件标识是0_ DIRECT,所以本实施例中将这个快速标识指针命名为0_DIRECT_K,作为和一般文件的区别。然后在I/O内核模块中以0_DIRECT_K的方式打开文件,以页面(page)长度为单位, 分配好对写的缓冲区;1/0内核模块通过调用文件系统标准的读写接口 filp_Write()接口传入缓冲区的指针,开始写入数据时,Linux文件系统判断文件是否以快速标识指针方式打开,即是否是以0_DIRECT_K方式打开,如果是,文件系统用get_pages接口先锁定内核模块缓冲区,然后使用缓冲区的地址block写入接口,将缓冲区提交给磁盘驱动,通过磁盘驱动写入到磁盘,写入以快速标识指针的方式完成后,缓冲区被文件系统所释放;如果不是0_DIRECT_K方式打开,文件系统的写流程将传入的数据按照一般的数据读写方法,拷贝 (copy)到文件系统的page cache中。图4、图5是现有技术和本发明方法的数据写入流程对比,图中Y轴是系统模型的多个层,X轴是流程顺序序号。图4所示的现有技术的流程
1)用户层(userspace)应用程序,申请好内存,调用系统调用的写指令;
2)操作系统切换到内核态(kernelspace),把用户层申请的内存用cpu copy到文件系统管理的内存中;
3)驱动将文件系统管理的内存通过dmacopy写入到磁盘中,dma copy不占用cpu资源。图5所示的是本发明技术的流程
1)10模块在内核中申请内存,调用文件系统的写入命令;
2)文件系统把io模块的内存通过get_page锁定;
3)驱动将内存通过dmacopy写入到磁盘中。比较之下,本发明方案下,避免了一次cpu copy,以及操作系统在内核态和用户态之间的切换,降低了 CPU负载,并提高了系统的效率。本发明的方法,增加了新的读写文件模式,Linux文件系统处理读写磁盘时,直接对块设备读写,避免了数据在缓冲区和文件系统的cache之间拷贝,可以节约CPU资源,提高数据传输速度。对于FPGA系统来说,资源尤为宝贵,本发明可以很好的解决资源问题。原有的文件读写方式中,需要反复的缓存读写,并且是在用户层进行操作,本发明的方法是在内核层文件系统中进行操作,效率比较高,速度快。
权利要求
1.一种Linux文件系统数据读写加速方法,运行于嵌入式数据存储设备,所述数据存储设备是基于现场可编程门阵列(FPGA)的Linux数据存储装置,含有虚拟存储模块、内核 I/O模块和文件系统构成的小型操作系统,连接SCSI/FC接口和网络接口,虚拟存储模块提供虚拟磁带机、虚拟磁盘服务,存储介质是磁盘;方法是1)在Linux文件系统标准接口增加一个快速标识指针,作为进行快速模式的判断标识;需要做I/O的内核模块通过标准的filp_0pen()接口,传入快速标识指针和传统的文件标识0_DIRECT参数,打开文件,以页面(page)长度为单位,分配好缓冲区;2)当内核模块通过filp_write()接口传入缓冲区的指针,开始写入数据时,Linux文件系统判断文件是否以快速标识指针方式打开,如果是,文件系统先锁定内核模块缓冲区,然后使用缓冲区的地址,通过磁盘的驱动写入到磁盘;如果不是,文件系统的写流程将传入的数据拷贝(copy)到文件系统的page cache中;3)写入以快速标识指针的方式完成后,缓冲区被文件系统所释放。
全文摘要
一种Linux文件系统的数据读写加速方法,涉及计算机的数据存储技术,具体方法是开始写入数据时,Linux文件系统判断文件是否以快速标识指针方式打开,如果是,文件系统先锁定内核模块缓冲区,然后使用缓冲区的地址,通过磁盘的驱动写入到磁盘;如果不是,文件系统的写流程将传入的数据拷贝(copy)到文件系统的pagecache中;写入以快速标识指针的方式完成后,缓冲区被文件系统所释放。内核模块通过此方法写入文件,就不必通过文件系统pagecachecopy,降低了CPU的开销。这样在内核态实现的各种软件程序都能够在做I/O的时候,显著的降低CPU开销,提高整个系统的性能。
文档编号G06F3/06GK102609486SQ20121001894
公开日2012年7月25日 申请日期2012年1月20日 优先权日2012年1月20日
发明者张庆敏, 张衡, 胡刚, 谢海威 申请人:无锡众志和达存储技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1