IO数据的读写方法和装置与流程

文档序号:11773939阅读:401来源:国知局
IO数据的读写方法和装置与流程

本发明涉及数据处理领域,尤其涉及一种io数据的读写方法和装置。



背景技术:

现有技术中,当从上层接收io数据时,将数据保存到硬盘后,发送响应消息。硬盘的响应速度影响了整个进程的速度。



技术实现要素:

本发明的实施例提供了一种io数据的读写方法和装置,本发明能够加快系统的响应速度。

为了实现上述目的,本发明采取了如下技术方案。

一种io数据的读写方法,包括:

系统从上层接收io数据;

将所述io数据保存到第一硬盘中,将所述io数据保存到系统内存中;

给所述上层发送接收到所述io数据的响应消息;

判断是否满足预定条件;

当满足所述预定条件时,将所述系统内存中的io数据同步到第二硬盘中;其中,所述第一硬盘的响应速度大于所述第二硬盘的响应速度;

对从所述系统内存中同步到所述第二硬盘的io数据在所述第一硬盘中进行标记。

一种数据的读写装置,包括:

接收单元,系统从上层接收io数据;

保存单元,将所述io数据保存到第一硬盘中,将所述io数据保存到系统内存中;

发送单元,给所述上层发送接收到所述io数据的响应消息;

判断单元,判断是否满足预定条件;

同步单元,当满足所述预定条件时,将所述系统内存中的io数据同步到第二硬盘中;其中,所述第一硬盘的响应速度大于所述第二硬盘的响应速度;

标记单元,对从所述系统内存中同步到所述第二硬盘的io数据在所述第一硬盘中进行标记。

由上述本发明的实施例提供的技术方案可以看出,本发明实施例中,将第一硬盘作为第二硬盘的缓存,解决传统的第一硬盘性能慢的问题,加快系统的响应速度。

本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种io数据的读写方法的处理流程图;

图2为本发明实施例中第一硬盘的划分示意图;

图3为本发明实施例中元数据块的示意图。

图4a为本发明一实施例中第一元数据区的示意图;

图4b为本发明一实施例中的第一元数据区的示意图;

图4c为本发明一实施例中的第一元数据区的示意图;

图4d为本发明一实施例中的第一元数据区的示意图;

图4e为本发明一实施例中的第一元数据区的示意图;

图5为本发明实施例提供的一种io数据的读写装置的连接示意图。

具体实施方式

下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。

如图1所示,为本发明所述的一种io数据的读写方法,包括:

步骤110,系统从上层接收io数据;

步骤120,将所述io数据保存到第一硬盘中,将所述io数据保存到系统内存中;

步骤130,给所述上层发送接收到所述io数据的响应消息;

步骤140,判断是否满足预定条件;其中,所述预定条件为:是否满足预定时长;或者,所述第一硬盘中的记录的所述io数据的大小超过预定值。

步骤150,当满足所述预定条件时,将所述系统内存中的io数据同步到第二硬盘中;其中,所述第一硬盘的响应速度大于所述第二硬盘的响应速度;

步骤160,对从所述系统内存中同步到所述第二硬盘的io数据在所述第一硬盘中进行标记。

由上述本发明的实施例提供的技术方案可以看出,本发明实施例中,将第一硬盘作为第二硬盘的缓存,解决传统的第一硬盘性能慢的问题,加快系统的响应速度。

可选的,所述方法还包括:

步骤170,当所述系统重启后,根据所述标记,获取所述第一硬盘中的未同步到所述第二硬盘中的io数据;

步骤180,将所述第一硬盘中的未同步到所述第二硬盘中io数据同步到所述第二硬盘中。

其中,所述第一硬盘可以为ssd;所述第二硬盘可以为hdd。当然,也可以为其他硬盘。

其中,步骤12中的将所述io数据保存到系统内存中的步骤包括:

步骤121,将所述第一硬盘分为第一元数据区、第二元数据区和数据存储区;例如,如图2所示。

步骤122,将所述数据存储区分为预定大小的至少一个数据块,所述数据块用于存储所述io数据;

步骤123,将所述第二元数据区分为与所述数据块相同数量的至少一个元数据块,所述元数据块用于存储所述io数据在与所述元数据块序号相同的数据块中的第一位置信息;如图3所示,所述第一位置信息包括:所述io数据所在的数据块的序号、所述io数据在所述数据块中的偏移量以及所述io数据的数据大小。也就是说,一个元数据块对应一个数据块,元数据块记录对应的数据块的位置信息。

步骤124,所述第一元数据区用于存储所述第一位置信息在所述第二元数据区的第二位置信息;如图4a所示,所述第二位置信息包括:当前待存储所述io数据的数据块的当前物理序号cur、当前待存储所述io数据的数据块的当前递增序号seq、每个数据块的递增序号以及对应的指示每个数据块中的io数据是否同步到第二硬盘的标记;所述当前物理序号cur的初始值为0,所述当前递增序号seq的初始值为1;也就是说,第二元数据区保存有数据存储区的元数据;第一元数据区保存有第二元数据区的元数据的元数据。

步骤124,将所述io数据依次保存到各个所述数据块;如图4b所示,当第一数据块存满时,将所述io数据存入第二数据块,并对所述当前物理序号cur进行加一运算;并对所述当前递增序号seq进行加一运算。如图4c所示,当所述第一硬盘的最后一数据块存满时,从所述第一个数据块开始存储所述io数据,进行新的循环;对所述当前物理序号cur初始化,并对所述当前递增序号seq进行加一运算。假设划分了64个数据块,在物理序号为0的数据块在第一次循环时对应的递增序号为1,在第二次循环时对应的递增序号为65。

步骤124,根据所述io数据在所述数据存储区中的数据块的保存信息,生成所述数据块的第一位置信息;

步骤125,将所述数据块的所述第一位置信息保存在与所述数据块对应的所述元数据块中;

步骤126,根据所述第一位置信息在所述第二元数据区的元数据块中的保存信息,生成第二位置信息;

步骤127,将所述第二位置信息保存在所述第一元数据区中。

其中,步骤16包括:

步骤161,获取同步的所述io数据所在的数据块;

步骤162,在所述第二位置信息中,生成对同步的所述io数据所在的数据块的标记。该步骤具体为:将同步的所述io数据所在的数据块的递增序号清零。例如,图4b中,物理序号为1的数据块,对应的递增序号为2,已经被同步,所以对应的标记为0。图4c中,物理序号为65的数据块,对应的递增序号为66,已经被同步,所以对应的标记为0。

步骤18包括:

步骤181,根据所述第二位置信息中的标记,查找出没有同步到所述第二硬盘中的数据块;该步骤181包括:查找递增序号不等于当前递增序号且递增序号不为零的数据块,作为没有同步到所述第二硬盘中的数据块。

步骤182,从递增序号最小的数据块开始,依次将没有同步到所述第二硬盘中的数据块中的所述io数据同步到所述第二硬盘。从递增序号最小的数据块开始同步,保证了数据同步的正确性和完整性。

以下描述本发明的应用场景。

本应用场景中,以第一硬盘为ssd、第二硬盘为hdd为例。hdd为机械硬盘,速度慢、容量大,但价格便宜。ssd为固态硬盘,速度快、容量小,但是价格比hdd贵。本发明在存储系统中,将ssd作为hdd的cache缓存使用,解决了传统的hdd性能慢的问题。

ssd的使用规划(以10g为例):

|元数据区(1g)|数据区(8g)|

元数据区(相当于上述的第一元数据区和第二元数据区)保存需要写入的数据的位置信息,数据区为需要写入的数据。

元数据区:

|元数据使用信息(128m)|元数据块1(8m)|元数据块2(8m)|.......|元数据块64(8m)|。

元数据使用信息(等同于上述的第二位置信息)保存有:当前使用到的数据块的物理序号,递增序号(用来重启时重新写入数据时使用),已用每个数据块的信息(每个数据块的递增序号、数据偏移、已经写入数据数量、需要刷入的hdd的数据数量)。

元数据块中保存:需要写入数据的大小、偏移量、数据在数据块中的偏移、数据校验crc、元数据校验crc。

数据区用于保存需要写入的数据,可以为64个。

数据区:

|数据块1(128m)|数据块2(128m)|......|数据块64(128m)|

需要准备的fd有:ssd的direct(直接)方式fd(文件描述符).

hdd的内存pagecache(页面缓存)方式的fd.

hdd的sync同步方式的fd.

启动一个线程,该线程的功能为:将ssd中的缓存数据每隔一定时间刷新到hdd。

当有数据需要写入时,先写入ssd(ssd的direct方式fd),同时写入hdd内存的pagecache中(hdd的内存pathcache方式的fd),然后返回。

将数据由后台线程同步到hdd上(hdd的sync方式的fd)。

其中,将数据写入ssd的步骤具体包括:

将数据写入数据区,数据区的偏移由第二元数据区的元数据块中的信息记录。

然后,将数据的大小、偏移、数据在数据区的偏移、数据校验crc、元数据校验crc写入到元数据的元数据块中。

当使用一个新的数据块时,将元数据信息中的当前使用的数据块编号记录,递增序号往上增加1,保存到元数据信息中所使用的元数据块的信息中。

其中,后台线程将数据写入hdd的步骤包括:

每隔一段时间。具体为:当ssd中的数据超过一定量,或超过一定时间,将内存pagecache中的数据写入到hdd上。并将已经写入hdd的数据进行标记。这样就有一个问题,如果机器重启或断电,就有一定的数据量没有写入hdd上,仍然在ssd当中,所以,在每次系统启动的时候首先加载ssd中未写入hdd的数据,并写入hdd.

加载时,先遍历每个元数据的数据块信息,从递增序号最小的数据块开始加载。并写入hdd,并且写入hdd完成后,将已写入的数据标记。

如图5所示,为本发明所述的一种数据的读写装置,包括:

接收单元21,系统从上层接收io数据;

保存单元22,将所述io数据保存到第一硬盘中,将所述io数据保存到系统内存中;

发送单元23,给所述上层发送接收到所述io数据的响应消息;

判断单元24,判断是否满足预定条件;

同步单元25,当满足所述预定条件时,将所述系统内存中的io数据同步到第二硬盘中;其中,所述第一硬盘的响应速度大于所述第二硬盘的响应速度;

标记单元26,对从所述系统内存中同步到所述第二硬盘的io数据在所述第一硬盘中进行标记。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1