首页> 中国专利> 基于非易失内存设备的数据去冗余方法及系统

基于非易失内存设备的数据去冗余方法及系统

摘要

本发明涉及一种基于非易失内存设备的数据去冗余系统,包括基于NVRAM的新型内核文件系统模块,为一制定文件系统,位于内核的文件系统层次;用户空间文件系统模块,为一个位于用户空间中的特殊进程,可以向其他进程提供与NVRAM进行交互的中间层或者虚拟层;数据去冗余方法及其系统整合方式模块,提供具体的去冗余逻辑给所述的用户空间文件系统。NVRAM的新型内核文件系统模块用于改进传统文件系统对于NVRAM存储介质的性能次优性;用户空间文件系统用于以一种较低代价并友好的方式来接入去冗余功能;数据去冗余方法及其系统整合方式模块将具体的去冗余逻辑加入到了FUSE中,在CPU+NVRAM架构上产生了真正的数据去冗余效果。

著录项

  • 公开/公告号CN106775501A

    专利类型发明专利

  • 公开/公告日2017-05-31

    原文格式PDF

  • 申请/专利权人 华南师范大学;

    申请/专利号CN201710077383.6

  • 发明设计人 李丁丁;唐立杰;田晓甲;汤庸;

    申请日2017-02-14

  • 分类号G06F3/06;

  • 代理机构广州粤高专利商标代理有限公司;

  • 代理人林瑞云

  • 地址 510660 广东省广州市中山大道西55号

  • 入库时间 2023-06-19 02:23:20

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-06-11

    授权

    授权

  • 2017-06-23

    实质审查的生效 IPC(主分类):G06F3/06 申请日:20170214

    实质审查的生效

  • 2017-05-31

    公开

    公开

说明书

技术领域

本发明涉及计算机技术领域,尤其涉及一种基于非易失内存设备的数据去冗余方法及系统。

背景技术

数据去冗余的技术主要是指:在计算机的某一个存储层次,例如是在内存或者外存,通过消除具备相同数据的内存页面或者数据块,从而达到节省存储设备的空间及改善写操作性能下降现象的一种技术。

首先内存去冗余技术。在这里去冗余的对象数据存在于操作系统的内存子系统当中。考虑到当前常见的DRAM(Dynamic Random Access Memory,动态随机访问内存设备)内存设备是挥发的,因此,一般而言,处于内存中的数据是不可靠的,不具备持久性。并且,由于DRAM更加接近CPU,所以在此层次执行去冗余的操作,会较为容易地产生CPU性能敏感型的操作,这些操作容易对应用程序产生干扰。所以,在内存中想要实现去冗余的功能,一般采用离线(off-line)的方式进行。也即,当应用程序往内存中产生了新的内存页面数据后,由独立的系统模块或者例程对其进行检测,查看当前是否系统中存在一个已经包含了相同的内存页面,如果有,则保存相应的元数据信息,真实的数据不必写入一个新的内存页面,因为要写的数据在当前系统中已经存在;如果没有,则执行该内存写入操作。由于该独立模块或例程与应用程序无关,在多核环境下,通过将去冗余的逻辑与应用程序的逻辑分布在不同的CPU核心上,会具有较好的内存去冗余性能。

值得注意的是,在传统的存储体系结构下,由于DRAM保存的一般为进程运行时的动态数据,例如:堆栈、打开的文件表信息等信息,因此,一般位于内存去冗余的技术只针对该类数据进行去冗余,而对于内存中的文件系统的高速页面缓存I/O数据则不予考虑,这是因为在外存中会存在另一数据副本与其对应,其属于外存去冗余技术的范围。

内存去冗余代表技术最为出名的为KSM(Kernel Samepage Merging,Linux相同页面合并机制)。该技术目前运行于基于Linux内核(大于或者等于版本号2.6.32)的操作系统之中,主要去冗余逻辑和程序运行于内核级,并且在扫描潜在的冗余内存页面时,为了减小扫描的开销,需要借助于高级语义的帮助,例如:一个应用程序在分配内存时,发觉它即将写入的内存数据可能会在系统中产生冗余,然后执行系统调用 madvise(),以此来通知内核的KSM模块,告知后者将此被新写入数据的内存页面作为去冗余的扫描的候选对象,以此来达到缩小工作集大小而减轻系统开销的目的。从上述过程可以看出两点:(1)该去除冗余的过程并不需要应用程序进行过多的参与(仅仅需要执行系统调用madvise以通知内核),因此,该技术属于离线去冗余技术的范畴;(2)去冗余的对象仅仅针对应用进程分配的内存相关,与其将读写的文件或者IO数据没有直接联系。

宋莹等人于2014年提出了一种基于KSM改进的一种低开销的高效内存去冗余方法及系统,申请号为201410231580,从该申请文档中可以开出,该方法及系统主要特征和优点是降低了KSM的运行时开销,其所面对的去冗余对象以及去冗余所在的系统层次皆和KSM相同。

外存去冗余技术:和基于DRAM内存相比,在外存设备中存放的数据,例如在硬盘设备(HDD,Hard Disk Drive)及固态盘设备(SSD,Solid State Drive)存放的文件对象,具备稳定可靠的特点。并且,由于DMA(Direct Memory Access, 直接内存访问)存在,可以使得一些CPU敏感性的操作被避免。因此,与内存去冗余技术不同,外存去冗余技术一般采用在线(in-line)的方式执行去除冗余的操作,也即:当应用程序在一块设备之上执行写入操作时,去冗余功能模块可以接管之后的操作。它首先对要进行写入的物理数据进行判定,查看是否外存设备中已经存在一物理数据与其相同,如果有,则直接使用该存在的数据用其代替此次写入的冗余数据,并更新相应的元数据信息以此表明此时发生了物理数据共享的情况。之后,有大于1个的元数据信息指向该共享的数据信息。如果没有,则针对该物理数据执行独立的外存写入操作,并产生相关新的元数据信息。

值得注意的是,在传统的存储体系结构下,外存保存的是进程写入的I/O数据,例如文件。因此,一般位于外存去冗余的技术只针对该类静态数据进行去冗余,而对于内存中的进程所产生的动态数据不予考虑,后者属于内存去冗余技术的范畴。并且,由于目前操作系统在一般环境下所产生的写操作为同步写性质,其所带来的存储开销要远远大于去冗余模块检测冗余数据所产生的开销,因此,在此离线方式下进行的外存去冗余过程所产生的开销仅仅占据整个写入开销的一小部分。

外存去冗余代表技术最为出名的为Dmdedup,它位于Linux的块层(Block-level),处于文件系统之下,因此,它是对不同的应用程序以及文件系统兼容的。其具体流程为:当一个应用程序的写入请求到达了块层之后,Dmdedup随即会对之后的块级写请求进行去冗余处理。首先,先判断即将写入的数据是否在当前的设备上存在一相同的数据块副本:如果是,则共享该原有数据块的数据,此次写入操作可以避免,但是要更新相应的元数据信息,以表明此处发生了数据共享;如果否,则执行此次写入操作,并产生相应的元数据来表明此次新的数据写入。除此之外,Dmdedup可以让去冗余所产生的元数据保存在三个不同的存储设备上,以适应不同的应用场景:(1)内存设备(模拟磁盘);(2)基于顺序表的磁盘设备;(3)基于B+树的磁盘设备。

此外,另外一个比较有名的外存去冗余代表是iDedup,它基于WAFL(Write Anywhere File Layout)技术建立,位于文件系统层次(File System-level),还考虑到了去冗余之后数据读取的顺序性问题。但是iDedup要借助NVRAM(Non-volatile random-access memory)来保存刚被写入到非易失介质的写入数据,以此来缓解写入的开销。严格来说,iDedup是一个离线的去冗余技术,因为其在写入操作到达非易失介质之后再执行去冗余逻辑,并且需要借助新型的存储硬件。

Satori是一个针对虚拟化系统的内存页面去冗余技术。它借助了虚拟I/O块设备和物理I/O块设备之间的转换,加入了去冗余功能。特别的是,Satori监控的不在是虚拟机的写入请求,而是读写请求。每当有虚拟机的读写请求发生时,Satori会在虚拟机管理器层次对读出来的数据进行去冗余检测,如果在一个虚拟机内部或者多个虚拟机之间发生了读出的数据冗余,则表明多个虚拟机之间或者一个虚拟机内部存在数据去冗余的机会。Satori的去冗余位于虚拟机的块层,并且其所监控的对象亦为外存中存在的数据,但是,因为其去冗余的逻辑在虚拟机读取数据过程中发生,因此,该技术应该亦为在线的去冗余技术之一。

现有的数据去冗余技术的最大缺点是:不适用于CPU+NVRAM的新型存储体系结构,因为当前的这些技术都只是在传统的CPU+DRAM+HDD/SSD的存储结构中发挥作用。

上述NVRAM(Non-Volatile Random Access Memory)指代的是非易失内存。随着信息存储领域不断进步和发展,一些新型的内存设备逐渐出现,具备弥补当前内外存子系统之间各项物理属性差异的能力。这些新型存储介质又称为存储级内存(SCM,Storage Class Memory),指的是速度与目前的主流的DRAM内存基本保持一致,但是具备非易失特性,同时容量还可以达到企业存储需求的内存。在这其中,以相变内存(PCM, Phase-Change Memory)为其代表。从2006年开始,IBM和Intel等传统存储研发机构就对SCM技术进行了紧锣密鼓的研究,制造工艺日趋成熟。目前,三星和镁光公司已经开始量产PCM内存。随着 SCM 容量的快速增长和单位价格的不断下降,基于 SCM 的应用将越来越广泛,其必然会改变现有的基于CPU+DRAM+HDD/SSD存储体系结构,带来新型的CPU+NVRAM/SCM的存储架构(以下统称这种新型的内存设备为NVRAM)。

在这种新型的CPU+NVRAM存储体系结构中,由于传统外存的消失,也使得传统意义上的块层次(block-layer)从其存储协议栈中消失,这使得基于块级的数据去冗余方法不能直接适用于此新型结构。并且,由于传统位于内存层次的去冗余方法针对的是进程在运行时所产生的动态数据,并不能对位于NVRAM层次的IO数据(也即和文件相关概念相吻合的非易失数据)进行去冗余操作。

此外,位于文件系统级别的去冗余技术需要嵌入在一个文件系统原型中才能发挥作用。但是,传统适用于HDD/SDD的文件系统如果直接作用在NVRAM之上会带来读写粒度过大、一致性策略重复以及文件系统缓存多余等负面效果,这三点具体体现在:

内存是字节可寻址的,而HDD/SDD则是块寻址,前者读写的最小单位为字节,后者的单位则为千字节。如果在NVRAM使用传统文件系统抽象,并且某个程序的多次写入操作只需要修改NVRAM中的单个字节,那么,此应用程序需要将至少千字节的数据读入其运行时环境,修改,然后再将此千字节的数据写入NVRAM中。可以看出,此过程包含了大量不必要数据的读写操作,耗费了大量CPU资源。

传统文件系统通常使用重做日志来实现系统前后一致性的需求,但是在NVRAM设备上,由于其本身具备非易失特性,与重做日志的部分功能重叠,引起不必要的重复开销。

传统文件系统使用页面高速缓存来缓解内外存之间的速度差异。但是在CPU+NVRAM体系结构下,已经没有该缓存存在的必要性。如果强行在此新型体系结构下使用传统文件系统并且开启该缓存,会消耗大量不必要的CPU以及内存资源去维护该缓存的运行。

综上所述,在新型的CPU+NVRAM的新型存储架构下,传统的基于块级的数据去冗余方法由于块层次的消失不能直接发挥作用,位于文件系统级别的去冗余方法则因为传统文件系统在NVRAM上由于读写粒度较大以及功能重复等原因导致性能次优,而位于内存层次的数据去冗余方法则不能对包含在NVRAM中的I/O数据执行去冗余操作。

发明内容

有鉴于此,本发明将提出一种“基于非易失内存设备的数据去冗余方法及系统”,以弥补上述现有技术在此新型存储体系结构上的不足之处。

本发明的一方面提供一种基于非易失内存设备的数据去冗余系统,包括

基于NVRAM的新型内核文件系统模块,为一制定文件系统,位于内核的文件系统层次,可以改进传统文件系统在NVRAM设备上的性能不足之处和功能冗余,同时向位于用户空间的各类进程提供一套与NVRAM交互、同时兼容现有标准的读写接口;

用户空间文件系统模块,为一个位于用户空间中的特殊进程,可以向其他进程提供与NVRAM进行交互的中间层或者虚拟层;

数据去冗余方法及其系统整合方式模块,提供具体的去冗余逻辑给所述的用户空间文件系统。

其中,所述的基于NVRAM的新型内核文件系统模块可选择基于GPL协议的开源项目中的PMFS实现。

其中,所述的用户空间文件系统模块选择用户文件系统FUSE实现。所述的FUSE进程与某个或者多个特定的CPU物理核绑定,增加了系统组件整合之后的性能及其可用性。

其中,所述的数据去冗余方法及其系统整合方式模块包括:

数据指纹仓库,用于存储块文件数据指纹,所述的数据指纹是指块文件的哈希值;

文件块表,每张文件块表代表着一个文件,每张文件块表存储着该文件所引用的块文件;

文件引用数表,用于存储每个块文件的被引用数;

FUSE标准读写接口,处于FUSE进程中,包含去冗余读写逻辑,与所述的数据指纹仓库、文件块表、文件引用数表和其他模块进行数据交换。

本发明的另一方面提供一种基于非易失内存设备的数据去冗余方法,包括:

S1,将待写入非易失介质的数据分割成若干块文件,所述的块文件具有相同的粒度大小,将所述的块文件存储于数据仓库;

S2,对所述的块文件进行哈希计算,得到数据指纹;

S3,将得到的新的数据指纹与已存在的旧的数据指纹进行对比;

S4,当新的数据指纹与旧的数据指纹相同时,执行去冗余操作,直接对旧的数据指纹所对应的数据进行引用加一;

S5,当新的数据指纹与旧的数据指纹不匹配时,将新的数据指纹保存到数据指纹仓库中。

现有的数据去冗余方法针对的是传统的“CPU+DRAM+DISK/SSD”存储体系结构,不适用于新型的“CPU+NVRAM”存储体系结构。本发明用到的数据去冗余方法,可以较好地适用于该新型存储体系结构,其中:基于NVRAM的新型内核文件系统模块用于改进传统文件系统对于NVRAM存储介质的性能次优性;用户空间文件系统用于以一种较低代价并友好的方式来接入去冗余功能;数据去冗余方法及其系统整合方式模块将具体的去冗余逻辑加入到了FUSE中,在CPU+NVRAM架构上产生了真正的数据去冗余效果。

附图说明

图1. 基于非易失内存设备的数据去冗余系统模块图;

图2. 基于非易失内存设备的数据去冗余系统中数据去冗余方法及其系统整合方式模块示意图;

图3基于非易失内存设备的数据去冗余系统中数据去冗余方法及其系统的写入逻辑。

具体实施方式

下面结合附图,对本发明的基于非易失内存设备的数据去冗余系统及方法做详细说明。

一种基于非易失内存设备的数据去冗余系统,包括基于NVRAM的新型内核文件系统模块,用户空间文件系统模块及数据去冗余方法及其系统整合方式模块。

如图1所示,一种基于非易失内存设备的数据去冗余系统,包括基于NVRAM的新型内核文件系统1;用户空间文件系统2;数据去冗余方法及其系统整合方式3。

基于NVRAM的新型内核文件系统1为一定制的文件系统,其位于内核的文件系统层次,可以改进传统文件系统在NVRAM设备上的性能不足之处和功能冗余,并且向位于用户空间的各类进程提供一套与NVRAM交互、同时兼容现有标准(例如POSIX,Portable Operating System Interface of UNIX )的读写接口,使得在传统文件系统之上运行的进程可以几乎不用修改,就运行在NVRAM之上。

用户空间文件系统2为一位于用户空间中的特殊进程,其功能是向其他进程提供与NVRAM的交互方式的间接层,此处间接层的主要好处是方便加入去冗余逻辑,便于实现和调试。

数据去冗余方法及其系统整合方式3则是加入到用户空间文件系统2的具体去冗余逻辑,以在NVRAM之上实现去冗余的核心功能。

下面从这三个模块分别来说明它们的技术实现路线以及组合方案。

基于NVRAM的新型内核文件系统1:

在CPU+NVRAM存储体系结构下,通过文件系统来访问NVRAM数据,可以做到兼容旧的应用程序。将传统文件系统不加修改地加载在NVRAM上会出现读写粒度过大以及功能冗余(包括重做日志和高速页面缓存)等性能隐患,这些问题也将会对即将整合的数据去冗余技术带来普及门槛。因此,考虑到性能和兼容问题,需要对现有文件系统进行改良,使之能够适应NVRAM内存设备的运行特点。

当前基于NVRAM的文件系统主要有两个,一个是BPFS(Byte-Addressable, Persistent memory File System),另外一个为PMFS(Persistent Memory File System),两者都是基于GPL(GNU General Public License)协议的开源项目。

本实施例可以选择PMFS为其“基于NVRAM的新型内核文件系统”,具体的搭建方式如下步骤所述:

(1)在一台兼容X86-64指令集的计算机上安装基于Linux内核源码的操作系统发行版,例如Ubuntu、CentOS以及ArcLinux等,并且该计算机上装有NVRAM内存设备;

(2)在GitHub上找到PMFS对应的Linux源码包,下载;

(3)PMFS的实现代码包含在此Linux源码包中,编译,然后安装;

(4)在内核启动参数上,加入类似于'memmap=2G$4G'的字段,在此字段中,2G$4G表示PMFS将其控制范围覆盖在2GB~4GB的内存空间范围中(也即此范围为PMFS所控制);

(5)重新启动计算机,进入到上述PMFS所包含的内核源码所对应的OS中;

(6)在重启之后的终端中,敲入类似于“#mount -t pmfs -o physaddr=0x100000000,init=2G none /mnt/pmfs”的命令,以此将从内存地址0x100000000开始的2G内存寻址范围格式化为PMFS文件系统;

(7)PMFS搭建完成。

经过以上步骤,使用了PMFS文件系统抽象的NVRAM(在上述例子中,是从0x100000000开始的2G内存地址范围),不仅可以避免传统文件系统在NVRAM上的读写粒度过大问题,而且还可以消除多余的重做日志以及页面高速缓存功能所带来的读写操作性能负面影响被放大的问题,为基于NVRAM的数据去冗在本系统中,每个块文件以其哈希值(也即数据指纹名)作为其标识号。一名为“文件块表”的表格与另一名为“文件引用数表”的两张表格作为本去冗余系统的元数据。

用户空间文件系统2:

用户空间文件系统在本发明中存在的作用和意义是:在“基于NVRAM的新型内核文件系统”和“用户应用程序”之间实现一个中间件或者虚拟层,以此提供更加灵活和友好的NVRAM数据去冗余逻辑实现路径,以达到缩短系统的开发周期、方便调试、快速开关以及性能调优等目的。

目前最为出名的用户文件系统为FUSE(Filesystem in Userspace,遵循GPL开源协议),本发明以此作为其“用户空间文件系统”模块的实现方式,其具体的安装和实现路线方式如下:

在基于NVRAM的新型内核文件系统结束所呈现的系统中,也即:Linux+PMFS系统中,登录其终端;

在GitHub上找到FUSE的源码,下载,解压;

配置、编译然后安装;

FUSE安装完成。

安装好了FUSE之后,需要将FUSE和PMFS之间的联系建立起来,以便让针对FUSE的读写操作对应到PMFS之上,然后在物理层次形成对NVRAM的操作。具体的技术方案如下所述:

将本发明所包含的“数据去冗余方法及其系统整合方式”系统模块的具体技术流程加入到一后缀名为.c的源码文件当中(此处命名为dedup.c)。

在dedup.c内部,包含<fuse.h>头文件,此头文件在安装了FUSE之后即可引用,以此来提供具备去冗余功能的read和write接口,供其他进程所调用;

以类似“gcc -Wall dedup.c -o run-dedup pkg-config fuse3 --cflags --libs”命令编译dedup.c文件,生成可执行文件run-dedup;

以类似“./ run-dedup /mnt/pmfs –d”命令在终端运行run-dedup程序,其中,“/mnt/pmfs”为NVRAM通过PMFS向上层用户空间导出访问接口的挂载路径。此命令结束后,包含了具体的数据去冗余的逻辑就和PMFS联系在了一起,而PMFS已经将其自身与底层的NVRAM联系起来;

之后,其他应用程序在向/mnt/pmfs路径执行普通的文件读写操作时,不需要任何修改。

数据去冗余方法及其系统整合方式3,如图2所示:

数据指纹仓库,用于存储块文件数据指纹,所述的数据指纹是指块文件的哈希值;

文件块表,每张文件块表代表着一个文件,每张文件块表存储着该文件所引用的块文件;

文件引用数表,用于存储每个块文件的被引用数;

FUSE标准读写接口,处于FUSE进程中,包含去冗余读写逻辑,与所述的数据指纹仓库、文件块表、文件引用数表和其他模块进行数据交换。

去冗余的基本思路是将系统要写入非易失介质(指的是磁盘、固态盘或者非易失内存)的数据分割成为一个个的小块(块文件),这些块文件有指定的粒度大小,下文的解释基于粒度大小为1KB进行(即标准块文件大小为1KB),这些块文件存储在一个特定的位置(下文称为数据仓库),然后再使用一种哈希函数对其进行哈希计算,得到一个名为“数据指纹”的哈希数值。依据如此,去冗余逻辑及系统对马上就要写入的数据进行哈希计算,将得到的新“数据指纹”跟已经存在的旧“数据指纹”进行比对。如果发现了一旧数据指纹与此新数据指纹相同,则表明此两指纹所对应的块文件数据相同,可以执行去冗余操作,此次写入的数据可以不必真正写入,直接对旧“数据指纹”所对应的数据进行引用加一即可。若没有已经存在的旧“数据指纹”与此新“数据指纹”匹配,则表明此次写入的是新数据,需要将其对应的数据指纹保存在系统中的一个名为“数据指纹仓库”的存储位置中,用于之后的去冗余操作。

在本系统中,每个块文件以其哈希值(也即数据指纹名)作为其标识号。一名为“文件块表”的表格与另一名为“文件引用数表”的两张表格作为本去冗余系统的元数据。

其中,“文件块表”有多张同构表格,每张表代表着一个传统意义上的文件(多个块文件组合成一个传统意义上的文件,一个传统意义上的文件对应于一张其所特有的“文件块表”,其中包含的每个“文件块表”条目对应于一个具体的“块文件”)。每个文件块条目都有对应的“数据指纹”信息,也即图2中的“数据指纹仓库”。

“文件引用数表”存储着每个块文件的被引用数(一个块文件可能被多个传统的文件所引用,这里也体现了去冗余之后的效果)。

dedup.c文件中的包含了去冗余逻辑的读写流程,其都是通过修改FUSE进程所导出的标准读写接口来实现的。

读取逻辑:

(1)首先根据普通进程调用的“读”系统调用接口中的“路径”参数以及“具体读取位置”参数,找到其想要打开的文件及其所对应的文件块表;

(2)根据文件块表中的条目以及前面所说的“具体读取位置”参数,找到该文件内部在本次读取操作中所涉及到的块文件,及其文件名和大小;

(3)循环读取涉及到的一个或者多个块文件,直至读取完所有要读取的数据或者是读取到文件尾;

(4)将读取到的数据返回给普通进程,本次读取流程结束。

写入逻辑(如图3所示):

(1)首先根据普通进程调用的“写”系统调用接口中的“路径”参数以及“开始写入位置”参数,找到对应的文件及其所对应的文件块表。

(2)将文件块表读取到内存链表之中,该链表每个节点包含着一个数据指纹、对应的块文件大小和尾部标记。(下文称为文件块链表,该内存链表为文件块表在FUSE进程地址空间中的运行形式,不属于传统非易失数据的范畴,而尾部标记即为标志着该块文件为该文件的文件尾的一个标记)。

(3)根据“开始写入位置”参数计算要写入的块文件所在文件块链表的位置,对这种情况分类处理。

(4)若开始写入的块文件位置在文件链表内,先将目标块文件的数据读取出来,放至一名为A的内存区域中,该区域大小为一个粒度大小(即为1KB),其中A为FUSE进程的地址空间,此后,将要写入的数据写入到A之中(覆盖原有数据),然后计算其哈希值(即得到这组数据的数据指纹),利用哈希值搜索数据指纹仓库,寻找是否有其他块文件具有相同的哈希值,如果有则不用写入,将该哈希值替换掉文件块链表中的目标块文件的哈希值对象;如果没有相同内容的块,则将A写入数据仓库,成为新的临时块文件,并且用数据指纹和文件大小替换掉文件块链表中的目标块文件的对象,逐链表节点进行该操作,若链表不足以存储完则创建新节点继续写入,直至写入完所有要写入的数据。本次写入流程结束。

(5)若要写入的块文件位置超出文件链表,则以‘’字符填充最后一个链表节点对应的块文件至1KB,并创造新节点以扩展链表长度,同样以‘’字符填充新节点对应的块文件,直至写入的位置位于链表内。

(6)先将目标块文件的数据读取出来,放至内存区域中,该区域大小为一个粒度大小,其中该区域为FUSE进程的地址空间,此后,将要写入的数据写入到所述的区域之中覆盖原有数据,然后计算其哈希值得到这组数据的数据指纹,利用哈希值搜索数据指纹仓库,寻找是否有其他块文件具有相同的哈希值,如果有则不用写入,将该哈希值替换掉文件块链表中的目标块文件的哈希值对象;如果没有相同内容的块,则将所述的数据写入数据仓库,成为新的临时块文件,并且用数据指纹和文件大小替换掉文件块链表中的目标块文件的对象,并不断创建新节点以扩展链表,直至写入完所有要写入的数据。

(7)将现在的数据块链表与存储在文件内的数据块表从头相比对,同一个位置,若链表中引用了的而文件内的数据块表未引用的则在引用表上进行更新(即将未引用的文件引用数减一,新引用的文件引用数加一)。

系统性能优化:

本系统由PMFS、FUSE以及“数据去冗余方法”整合起来。

考虑到系统分层叠加的复杂性,和将数据去冗余功能在内核文件系统层次实现起来的方式相比,将会增加一些额外的开销,其体现在了FUSE进程与普通进程之间交互的上下文切换开销(进程上下文),以及FUSE进程与内核文件系统交互,导致系统调用产生过多所带来的开销。

为缓解上述开销,提出一优化方法,增加本专利的实用性。

此方法利用了现在较为普及的多核硬件环境,将用户空间文件系统,也即FUSE进程,通过类似于taskset之类的命令,将其与某个或者多个特定的CPU物理核绑定起来(这里将此CPU核心集合命名为CoreSet)。如此一来,FUSE进程将独享CoreSet物理CPU核心以及相应的CPU缓存,不会被操作系统的进程调度程序所切换出去,避免了上下文切换的开销以及CPU缓存失效带来的性能次优性。

此外,还可以进一步优化,将系统当中,包含了较多的读写操作的普通进程,也加入到了CoreSet当中(通过taskset命令易实现),与FUSE进程一起共享CPU核心。这样的好处是在普通进程与FUSE进程通信的时候,可以将这些通信的数据集中在若干的较热的CPU核心缓存当中,减轻了CPU缓存失效带来的性能负面效果。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号