一种提高虚拟磁盘写入性能的方法及系统的制作方法

文档序号:10654084阅读:224来源:国知局
一种提高虚拟磁盘写入性能的方法及系统的制作方法
【专利摘要】本发明涉及虚拟磁盘领域,尤其涉及一种提高虚拟磁盘写入性能的方法及系统。通过在内存的缓存中创建映射表,可提高数据的写入速度;与传统的虚拟磁盘写入方式相比,本发明的技术方案采用一映射表,其包括节点,并预设缓存的数据总长度缓存数据的总长度,当每次新增缓存时,映射表的缓存的数据总长度都会得到更新,当其长度超过预设的阈值时,会把映射表里的缓存上写入的数据一次性的写入到虚拟磁盘文件中,从而减少游标频繁进行移动更新位置,进而提高虚拟磁盘写入性能。
【专利说明】
-种提高虚拟磁盘写入性能的方法及系统
技术领域
[0001] 本发明设及虚拟磁盘领域,尤其设及一种提高虚拟磁盘写入性能的方法及系统。
【背景技术】
[0002] 在虚拟磁盘中,对虚拟磁盘的读写实际是对本地磁盘文件的读写操作。在应用层 的虚拟磁盘文件只有一个游标指针,每次更新游标指针的位置都会有一定时间的延迟,当 在数据量较大且虚拟磁盘保存的文件数量较多的情况下,记录不同的文件将会使游标指针 在虚拟磁盘文件中做频繁的位置更新,从而影响虚拟磁盘的写入性能。尤其在多线程同时 访问虚拟磁盘时,对虚拟磁盘的读写操作将大大降低虚拟磁盘的写入性能。
[0003] 在现有操作系统的文件系统中,每个文件是都有对应的一个游标指针,应用层访 问文件时,此文件的游标指针是独立的,不会受到其它文件操作的干扰,文件的游标指针可 W按写文件的顺序移动。由于虚拟磁盘是本地硬盘上的一个文件,运个文件里会记录很多 个文件数据,而虚拟磁盘是文件系统中的一个文件,也只有一个游标指针,虚拟磁盘为了实 现与文件系统中的多个文件,必须用一个游标指针模拟多个文件的游标指针,用一个文件 模拟多个文件在虚拟磁盘中的存储。
[0004] 例如:虚拟磁盘多个文件的数据是放在同一个文件的不同位置上,当打开一个文 件进行写入时,虚拟磁盘的游标指针就要移动到运个文件存放的起始位置进行写入。当多 个文件在不同的线程中进行写操作时,每一个线程实际上是对同一个文件(即虚拟磁盘)的 游标指针进行移动,比如线程1从虚拟磁盘的A位置写文件,线程2要从虚拟磁盘的B位置写 文件,当线程1写N个字节时,线程2开始写,运时游标就要从A+N位置移动到B位置,两个线程 争用同一个文件的访问权,运就造成了文件游标指针的频繁移动,进而影响虚拟磁盘的写 入性能。

【发明内容】

[0005] 本发明所要解决的技术问题是:提供一种在文件数量多且数据量大时,能够减少 虚拟磁盘文件的游标频繁进行移动更新位置的提高虚拟磁盘写入性能的方法及系统。
[0006] 为了解决上述技术问题,本发明采用的技术方案为:
[0007] -种提局虚拟磁盘与入性能的方法,包括;
[000引步骤1、在内存的缓存中创建映射表,所述映射表包括节点;预设缓存的数据总长 度;
[0009] 步骤2、写入数据至所述节点,更新缓存的数据总长度;
[0010] 步骤3、当缓存的数据总长度超过预设的阔值时,将写入所述节点的数据一次性写 入至虚拟磁盘文件中。
[0011] 本发明采用的另一技术方案为:
[001。一种提高虚拟磁盘写入性能的系统,包括仓幡模块、更新模块和写入模块;
[0013]所述创建模块,用于在内存的缓存中创建映射表,所述映射表包括节点;预设缓存 的数据总长度;
[0014] 所述更新模块,用于写入数据至所述节点,更新缓存的数据总长度;
[0015] 所述写入模块,用于当缓存的数据总长度超过预设的阔值时,将写入所述节点的 数据一次性写入至虚拟磁盘文件中。
[0016] 传统的虚拟磁盘写入方式:在虚拟磁盘处理多文件时,也就是要对多文件进行多 次的游标移动,游标频繁进行移动更新位置。
[0017] 本发明的有益效果在于:通过在内存的缓存中创建映射表,可提高数据的写入速 度;与传统的虚拟磁盘写入方式相比,本发明的技术方案采用一映射表,其包括节点,并预 设缓存的数据总长度缓存数据的总长度,当每次新增缓存时,映射表的缓存的数据总长度 都会得到更新,当其长度超过预设的阔值时,会把映射表里的缓存上写入的数据一次性的 写入到虚拟磁盘文件中,从而减少游标频繁进行移动更新位置,进而提高虚拟磁盘写入性 能。
【附图说明】
[0018] 图1为本发明的一种提高虚拟磁盘写入性能的方法的步骤流程图;
[0019] 图2为本发明的一种提高虚拟磁盘写入性能的系统的结构框图;
[0020] 图3为本发明的实施例一的提高虚拟磁盘写入性能的方法的流程图;
[0021] 标号说明:
[0022] 1、创建模块;2、更新模块;3、写入模块。
【具体实施方式】
[0023] 为详细说明本发明的技术内容、所实现目的及效果,W下结合实施方式并配合附 图予W说明。
[0024] 本发明最关键的构思在于:采用一映射表,其包括节点,并预设缓存的数据总长 度,当每次新增缓存时,映射表节点的长度与缓存的数据总长度都会得到更新,当其长度超 过预设的阔值时,会把映射表里的缓存一次性的写入到虚拟磁盘文件中,从而减少游标频 繁进行移动更新位置,进而提高虚拟磁盘写入性能。
[0025] 请参照图1,本发明提供的一种提高虚拟磁盘写入性能的方法,包括:
[0026] 步骤1、在内存的缓存中创建映射表,所述映射表包括节点;预设缓存的数据总长 度;
[0027] 步骤2、写入数据至所述节点,更新缓存的数据总长度;
[0028] 步骤3、当缓存的数据总长度超过预设的阔值时,将写入所述节点的数据一次性写 入至虚拟磁盘文件中。
[0029] 从上述描述可知,本发明的有益效果在于:通过在内存的缓存中创建映射表,可提 高数据的写入速度;与传统的虚拟磁盘写入方式相比,本发明的技术方案采用一映射表,其 包括节点,并预设缓存的数据总长度缓存数据的总长度,当每次新增缓存时,映射表的缓存 的数据总长度都会得到更新,当其长度超过预设的阔值时,会把映射表里的缓存上写入的 数据一次性的写入到虚拟磁盘文件中,从而减少游标频繁进行移动更新位置,进而提高虚 拟磁盘写入性能。
[0030]进一步的,所述节点由存储虚拟磁盘文件的写入起始地址、节点的长度和写入的 数据组成。
[0031 ] 进一步的,所述步骤2具体包括步骤21-步骤26:
[0032] 步骤21、查询当前写入地址是否在所述映射表的节点所存储的数据空间范围内; 若是,得到所述当前写入地址对应的第一节点;若否,增加新的节点并插入到先前的节点 后,更新节点的长度与缓存的数据总长度,重新执行步骤21;所述节点包括第一节点;
[0033] 步骤22、判断当前需写入的数据的长度是否超出第一节点中原有的数据长度范 围,若是,进入步骤23;
[0034] 步骤23、计算得到写入的数据所需的数据长度,判断写入数据后的末端地址是否 超出第一节点中的长度数据范围,若是,进入步骤24;若否,进入步骤25;
[0035] 步骤24、将第一节点的下一个节点作为新的第一节点,返回步骤22;
[0036] 步骤25、根据步骤23计算得到写入数据所需的数据长度增加数据空间,将所增加 的数据空间插入第一节点中,更新节点的长度与缓存的数据总长度;
[0037] 步骤26、从步骤21所述的当前写入地址开始写入数据。
[0038] 由上述描述可知,在写入数据前,先查询需要写入的数据地址是否在原有的缓存 空间内,如果不在,则需要增加新的缓存空间(即为增加节点或增加数据空间);如果在原有 的缓存空间内,运时候准备要写入数据,但考虑到原有的缓存空间内存储有部分数据,运是 考虑到对原有数据的覆盖问题,因此需要先判断需要写入的数据与原有数据的覆盖问题, 若当前需写入数据的长度超出第一节点长度范围,则需要再判断写入数据后的末端地址是 否超出下一节点的长度数据范围,若未超出,则覆盖后再追加数据空间并存放;若超出,贝U 需要判断下一个节点。
[0039] 进一步的,所述步骤22还包括:若当前需写入的数据的长度未超出第一节点中原 有的数据长度范围,则从步骤21所述的当前写入地址开始写入数据。
[0040] 由上述描述可知,若当前需写入的数据的长度未超出第一节点数据中原有的数据 长度范围,则可W直接写入数据。
[0041] 请参阅图2,本发明还提供了一种提高虚拟磁盘写入性能的系统,包括创建模块1、 更新模块2和写入模块3;
[0042] 所述创建模块1,用于在内存的缓存中创建映射表,所述映射表包括节点;预设缓 存的数据总长度;
[0043] 所述更新模块2,用于写入数据至所述节点,更新缓存的数据总长度;
[0044] 所述写入模块3,用于当缓存的数据总长度超过预设的阔值时,将写入所述节点的 数据一次性写入至虚拟磁盘文件中。
[0045] 从上述描述可知,本发明的有益效果在于:通过在内存的缓存中创建映射表,可提 高数据的写入速度;与传统的虚拟磁盘写入方式相比,本发明的技术方案采用一映射表,其 包括节点,并预设缓存的数据总长度缓存数据的总长度,当每次新增缓存时,映射表的缓存 的数据总长度都会得到更新,当其长度超过预设的阔值时,会把映射表里的缓存上写入的 数据一次性的写入到虚拟磁盘文件中,从而减少游标频繁进行移动更新位置,进而提高虚 拟磁盘写入性能。
[0046] 进一步的,所述节点由存储虚拟磁盘文件的写入起始地址、节点的长度和写入的 数据组成。
[0047] 进一步的,所述更新模块2包括查询单元、判断单元、计算单元、返回单元、插入单 元和写入单元;
[0048] 所述查询单元,用于查询当前写入地址是否在所述映射表的节点所存储的数据空 间范围内;若是,得到所述当前写入地址对应的第一节点;若否,增加新的节点并插入到先 前的节点后,更新节点的长度与缓存的数据总长度,重新执行查询单元;所述节点数据包括 第一节点;
[0049] 所述判断单元,用于判断当前需写入的数据的长度是否超出第一节点中原有的数 据长度范围,若是,进入计算单元;
[0050] 所述计算单元,用于计算得到写入的数据所需的数据长度,判断写入数据后的末 端地址是否超出第一节点中的长度数据范围,若是,进入返回单元;若否,进入插入单元;
[0051] 所述返回单元,用于将第一节点的下一个节点作为新的第一节点,返回判断单元;
[0052] 所述插入单元,用于根据计算单元计算得到写入数据所需的数据长度增加数据空 间,将所增加的数据空间插入第一节点中,更新节点的长度与缓存的数据总长度;
[0053] 所述写入单元,用于从所述的当前写入地址开始写入数据。
[0054] 由上述描述可知,在写入数据前,先查询需要写入的数据地址是否在原有的缓存 空间内,如果不在,则需要增加新的缓存空间(即为增加节点数据或增加数据空间);如果在 原有的缓存空间内,运时候准备要写入数据,但考虑到原有的缓存空间内存储有部分数据, 运是考虑到对原有数据的覆盖问题,因此需要先判断需要写入的数据与原有数据的覆盖问 题,若当前需写入数据的长度超出第一节点中原有的数据长度范围,则需要再判断写入数 据后的末端地址是否超出下一节点的长度数据范围,若未超出,则覆盖后再追加数据空间 并存放;若超出,则需要判断第一节点长度是否超过下一个节点的长度。
[0055] 进一步的,所述判断单元,还用于若当前需写入的数据的长度未超出第一节点中 原有的数据长度范围,则从所述的当前写入地址开始写入数据。
[0056] 由上述描述可知,若当前需写入数据的长度未超出第一节点数据中原有的数据长 度范围,则可W直接写入数据。
[0057] 请参照图1-3,本发明的实施例一为:
[0058] 本发明提供的一种提高虚拟磁盘写入性能的方法,包括:
[0059] 步骤1、在内存的缓存中创建映射表,所述映射表包括节点;预设缓存的数据总长 度;所述节点由存储虚拟磁盘文件的写入起始地址、节点的长度和写入的数据组成。在虚拟 初始化时,初始化映射表和映射表存储的数据总长度,映射表中的每一个节点保存虚拟磁 盘的文件的开始写入位置和写入数据的长度,由每个节点会映射一个缓存链表中。即每一 个虚拟磁盘的文件对应一个缓存链表。
[0060] 其中写入起始地址为表1中位置1、位置2、……、位置N;
[0061] 其中存储写入数据的长度数据为长度1、长度2、……、长度N;
[0062]
[0063] 巧 i
[0064] 步骤2、写入数据至所述节点,更新节点的长度与缓存的数据总长度;
[0065] 在写入数据前,先查询需要写入的数据地址是否在原有的缓存空间内,如果不在, 则需要增加新的缓存空间(即为增加节点数据或增加数据空间);如果在原有的缓存空间 内,运时候准备要写入数据,但考虑到原有的缓存空间内存储有部分数据,运是考虑到对原 有数据的覆盖问题,因此需要先判断需要写入的数据与原有数据的覆盖问题,若当前需写 入数据的长度超出第一节点中原有的数据长度范围,则需要再判断写入数据后的末端地址 是否超出节点的长度数据范围,若未超出,则覆盖后再追加数据空间并存放;若超出,则需 要判断第一节点的下一个节点。
[0066] 在文件写入之前,会根据文件的位置先在映射表中查询,找到后会返回缓存链表 的指针。运里的查询是指定的文件位置有没有在映射表某个节点所保存的数据空间范围 内。即指定查找的位置是否命中数据区的开始位置与结束位置之间。如果命中已存在的数 据区内,返回找到的映射表节点地址。
[0067] 所述步骤2具体包括步骤21-步骤26:
[0068] 步骤21、查询当前写入地址是否在所述映射表的节点所存储的数据空间范围内; 若是,得到所述当前写入地址对应的第一节点;若否,增加新的节点并插入到先前的节点 后,更新节点的长度与缓存的数据总长度,重新执行步骤21;所述节点包括第一节点;
[0069] 步骤22、判断当前需写入的数据的长度是否超出第一节点中原有的数据长度范 围,若是,进入步骤23;
[0070] 步骤23、计算得到写入的数据所需的数据长度,判断写入数据后的末端地址是否 超出第一节点中的长度数据范围,若是,进入步骤24;若否,进入步骤25;
[0071] 步骤24、将第一节点的下一个节点作为新的第一节点,返回步骤22;
[0072] 步骤25、根据步骤23计算得到写入数据所需的数据长度增加数据空间,将所增加 的数据空间插入第一节点中,更新节点的长度与缓存的数据总长度;
[0073] 步骤26、从步骤21所述的当前写入地址开始写入数据。
[0074] 参阅图3,具体如下:
[0075] 1、如果节点为空就申请新的映射表节点并插入到映射表中。
[0076] 2、再重新计算LENl的值为LENl^ "(P0S1保存的是文件游标开始写入的位置,LENl 表示与POSl对应位置的程序要写入的数据长度值)
[0077] 3、判断LENl f+POSl(当前节点对应的游标位置)值是否超过映射表的下一个节点 位置。
[0078] 4、如果超过,当前映射表节点移动到下一个节点,并执行F;
[0079] 5、如果不超过,POSl位置的节点开始存放的数据超过的部分程序会重新申请空 间,并在写入后插入POSl所在映射表节点的数据链表中;
[0080] 6、如果找到节点地址,再判断要覆盖的数据是否超出原有数据空间;
[0081 ] 7、超过,执行2;
[0082] 8、不超过,则覆盖数据区相对应位置的数据;
[0083] 9、在数据写完后,更新映射表存储的数据的总长度;
[0084] 覆盖数据区相对应位置的数据。例如:要写入的位置是P0S2,在映射表的当前节点 位置是POSl,当P0S2大于等于POSl小于等于P0S1+LEN1时,则写入操作是对数据区内的数据 进行覆盖。(如表2)
[0085]
[00化]表2
[0087] 步骤3、当缓存的数据总长度超过预设的阔值时,将写入节点的数据一次性写入至 虚拟磁盘文件中。
[0088] 综上所述,本发明提供的一种提高虚拟磁盘写入性能的方法及系统,通过在内存 的缓存中创建映射表,可提高数据的写入速度;与传统的虚拟磁盘写入方式相比,本发明的 技术方案采用一映射表,其包括节点,并预设缓存的数据总长度缓存数据的总长度,当每次 新增缓存时,映射表的缓存的数据总长度都会得到更新,当其长度超过预设的阔值时,会把 映射表里的缓存上写入的数据一次性的写入到虚拟磁盘文件中,从而减少游标频繁进行移 动更新位置,进而提高虚拟磁盘写入性能。
[0089] W上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发 明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括 在本发明的专利保护范围内。
【主权项】
1. 一种提高虚拟磁盘写入性能的方法,其特征在于,包括: 步骤1、在内存的缓存中创建映射表,所述映射表包括节点;预设缓存的数据总长度; 步骤2、写入数据至所述节点,更新缓存的数据总长度; 步骤3、当缓存的数据总长度超过预设的阈值时,将写入所述节点的数据一次性写入至 虚拟磁盘文件中。2. 根据权利要求1所述的提高虚拟磁盘写入性能的方法,其特征在于,所述节点由存储 虚拟磁盘文件的写入起始地址、节点的长度和写入的数据组成。3. 根据权利要求2所述的提高虚拟磁盘写入性能的方法,其特征在于,所述步骤2具体 包括步骤21-步骤26: 步骤21、查询当前写入地址是否在所述映射表的节点所存储的数据空间范围内;若是, 得到所述当前写入地址对应的第一节点;若否,增加新的节点并插入到先前的节点后,更新 节点的长度与缓存的数据总长度,重新执行步骤21;所述节点包括第一节点; 步骤22、判断当前需写入的数据的长度是否超出第一节点中原有的数据长度范围,若 是,进入步骤23; 步骤23、计算得到写入的数据所需的数据长度,判断写入数据后的末端地址是否超出 第一节点中的长度数据范围,若是,进入步骤24;若否,进入步骤25; 步骤24、将第一节点的下一个节点作为新的第一节点,返回步骤22; 步骤25、根据步骤23计算得到写入数据所需的数据长度增加数据空间,将所增加的数 据空间插入第一节点中,更新节点的长度与缓存的数据总长度; 步骤26、从步骤21所述的当前写入地址开始写入数据。4. 根据权利要求3所述的提高虚拟磁盘写入性能的方法,其特征在于,所述步骤22还包 括:若当前需写入的数据的长度未超出第一节点中原有的数据长度范围,则从步骤21所述 的当前写入地址开始写入数据。5. -种提高虚拟磁盘写入性能的系统,其特征在于,包括创建模块、更新模块和写入模 块; 所述创建模块,用于在内存的缓存中创建映射表,所述映射表包括节点;预设缓存的数 据总长度; 所述更新模块,用于写入数据至所述节点,更新缓存的数据总长度; 所述写入模块,用于当缓存的数据总长度超过预设的阈值时,将写入所述节点的数据 一次性写入至虚拟磁盘文件中。6. 根据权利要求5所述的提高虚拟磁盘写入性能的系统,其特征在于,所述节点由存储 虚拟磁盘文件的写入起始地址、节点的长度和写入的数据组成。7. 根据权利要求6所述的提高虚拟磁盘写入性能的系统,其特征在于,所述更新模块包 括查询单元、判断单元、计算单元、返回单元、插入单元和写入单元; 所述查询单元,用于查询当前写入地址是否在所述映射表的节点所存储的数据空间范 围内;若是,得到所述当前写入地址对应的第一节点;若否,增加新的节点并插入到先前的 节点后,更新节点的长度与缓存的数据总长度,重新执行查询单元;所述节点数据包括第一 节点; 所述判断单元,用于判断当前需写入的数据的长度是否超出第一节点中原有的数据长 度范围,若是,进入计算单元; 所述计算单元,用于计算得到写入的数据所需的数据长度,判断写入数据后的末端地 址是否超出第一节点中的长度数据范围,若是,进入返回单元;若否,进入插入单元; 所述返回单元,用于将第一节点的下一个节点作为新的第一节点,返回判断单元; 所述插入单元,用于根据计算单元计算得到写入数据所需的数据长度增加数据空间, 将所增加的数据空间插入第一节点中,更新节点的长度与缓存的数据总长度; 所述写入单元,用于从所述的当前写入地址开始写入数据。8.根据权利要求7所述的提高虚拟磁盘写入性能的系统,其特征在于,所述判断单元, 还用于若当前需写入的数据的长度未超出第一节点中原有的数据长度范围,则从所述的当 前写入地址开始写入数据。
【文档编号】G06F3/06GK106020718SQ201610300590
【公开日】2016年10月12日
【申请日】2016年5月9日
【发明人】张维超, 吴卫东, 茅慧君
【申请人】福建联迪商用设备有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1