固态硬盘的数据读取方法以及固态硬盘与流程

文档序号:16324624发布日期:2018-12-19 05:51阅读:4822来源:国知局
固态硬盘的数据读取方法以及固态硬盘与流程

本申请涉及计算机技术领域,特别涉及一种固态硬盘的数据读取方法以及该固态硬盘。

背景技术

随着互联网、云计算、物联网等技术的发展,固态硬盘作为新的一代存储设备广泛被大众应用。读性能是固态硬盘(solidstatedisk,ssd)的一个非常重要的指标。

目前固态硬盘读取数据的一种方法是,固态硬盘在接收到主机发送的读请求后,会向双倍速率同步动态随机存储器(doubledataratesynchronousdynamicrandomaccessmemory,ddrsdram)申请读锁,固态硬盘在获取到ddrsdram授权的读锁之后,开始从ddrsdram中读取l2p表,最后,固态硬盘释放ddrsdram中的读锁。

然而,由于固态硬盘在每次从ddrsdram读取完l2p表之后,都需要再次访问ddrsdram才可以从ddrsdram中释放读锁,而每次访问ddrsdram都需要消耗500纳秒(ns)的时间,导致每次固态硬盘的数据的输入输出的操作都会相应发生500ns的延时,导致读性能降低。



技术实现要素:

本申请实施例提供了固态硬盘的数据读取方法以及固态硬盘,能够在固态硬盘没有未完成的写请求时使用不带读锁的方式读取数据,提升了固态硬盘的读性能。

本申请实施例提供了一种固态硬盘的数据读取方法,包括:

固态硬盘用第一计数器记录第一写请求个数,所述第一写请求个数为所述固态硬盘接收到的主机发送的写请求个数;

所述固态硬盘用第二计数器记录第二写请求个数,所述第二写请求个数为所述固态硬盘完成写操作的写请求个数;

所述固态硬盘接收所述主机发送的读请求;

所述固态硬盘判断第一写请求个数与第二写请求个数是否相等;

若是,则所述固态硬盘使用不带读锁的方式读取双倍速率同步动态随机存储器ddrsdram中的逻辑到物理地址转换l2p表。

可选地,在所述固态硬盘判断第一写请求个数与第二写请求个数是否相等之后,所述方法还包括:

若否,则所述固态硬盘使用带读锁的方式读取所述l2p表。

可选地,所述固态硬盘使用带读锁的方式读取所述l2p表包括:

所述固态硬盘向所述ddrsdram申请读锁;

所述固态硬盘获取所述ddrsdram授权的所述读锁;

所述固态硬盘使用带读锁的方式读取所述l2p表。

可选地,在所述固态硬盘使用带读锁的方式读取所述l2p表之后,所述方法还包括:

所述固态硬盘释放所述ddrsdram中的读锁。

本申请实施例提供了一种固态硬盘,其特征在于,包括:

第一记录单元,用于用第一计数器记录第一写请求个数,所述第一写请求个数为所述固态硬盘接收到的主机发送的写请求个数;

第二记录单元,用于用第二计数器记录第二写请求个数,所述第二写请求个数为所述固态硬盘完成写操作的写请求个数;

接收单元,用于接收所述主机发送的读请求;

判断单元,用于判断第一写请求个数与第二写请求个数是否相等;

第一读取单元,用于当确定第一写请求个数与第二写请求个数相等时,则使用不带读锁的方式读取双倍速率同步动态随机存储器ddrsdram中的逻辑到物理地址转换l2p表。

可选地,所述固态硬盘还包括:

第二读取单元,用于当确定第一写请求个数与第二写请求个数不相等时,则使用带读锁的方式读取所述l2p表。

可选地,所述第二读取单元具体包括向所述ddrsdram申请读锁;获取所述ddrsdram授权的所述读锁;使用带读锁的方式读取所述l2p表。

可选地,所述固态硬盘还包括:

释放单元,用于释放所述ddrsdram中的读锁。

本申请实施例提供了一种固态硬盘,该固态硬盘具有实现上述固态硬盘的数据读取方法中固态硬盘行为的功能。该功能可以通过硬件实现,也可以通过执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。

本申请实施例提供了一种计算机存储介质,该计算机存储介质用于储存上述固态硬盘所用的计算机软件指令,其包括用于执行为固态硬盘所设计的程序。

本申请实施例提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,该计算机软件指令可通过处理器进行加载来实现上述数据读取方法的流程。

从以上技术方案可以看出,本申请实施例具有以下优点:由于固态硬盘可以用第一计数器记录第一写请求个数,该第一写请求个数为固态硬盘接收到的主机发送的写请求个数,并用第二计数器记录第二写请求个数,该第二写请求个数为固态硬盘完成写操作的写请求个数,然后接收主机发送的读请求,在确定第一写请求个数与第二写请求个数相等时,固态硬盘使用不带读锁的方式读取ddrsdram中的l2p表,由此可知,在没有未完成的写请求的情况下,固态硬盘使用了不带读锁的方式读取l2p表,因此无需在读取完l2p表之后,再次访问ddrsdram释放读锁,这样就可以减少固态硬盘访问ddrsdram的次数,节省访问ddrsdram的时间,减少了固态硬盘的数据输入输出的延时,从而提升了固态硬盘的读性能。

附图说明

图1为本申请实施例中固态硬盘的数据读取方法的一个实施例示意图;

图2为本申请实施例中固态硬盘的数据读取方法的另一个实施例示意图;

图3为本申请实施例中固态硬盘的一个实施例示意图;

图4为本申请实施例中固态硬盘的另一个实施例示意图。

具体实施方式

本申请实施例提供了固态硬盘的数据读取方法以及固态硬盘,用于在固态硬盘没有未完成的写请求时使用不带读锁的方式读取数据,提升了固态硬盘的读性能。

请参阅图1,图1为本申请实施例中固态硬盘的数据读取方法的一个实施例。

本申请实施例中固态硬盘的数据读取方法的一个实施例包括:

101、固态硬盘用第一计数器记录第一写请求个数;

本实施例中,固态硬盘在其自身内部预设了第一计数器,当主机向固态硬盘发送写请求时,固态硬盘可以通过该第一计数器对主机发送的写请求个数进行记录,而第一写请求个数即是固态硬盘接收到的主机发送的写请求个数。也就是说,固态硬盘用第一计数器对第一写请求个数进行记录。

102、固态硬盘用第二计数器记录第二写请求个数;

本实施例中,固态硬盘在其自身内部还预设了第二计数器,该第二计数器用来记录第二写请求个数,而该第二写请求个数为固态硬盘完成写操作的写请求个数。

需要说明的是,步骤101和102没有执行的先后顺序,可以先执行步骤101,再执行步骤102,也可以先执行步骤102,再执行步骤101,具体此处不做限定。

103、固态硬盘接收主机发送的读请求;

固态硬盘在运行过程中,可以接收主机发送的读请求,该读请求用于固态硬盘读取ddrsdram中的数据,其中包括l2p表。

需要说明的是,步骤103和步骤101、102没有执行的先后顺序,可以先执行步骤101、102,再执行步骤103,也可以先执行步骤101,再执行步骤102、103,还可以先执行步骤102,再执行步骤101、103,具体此处不做限定。

104、固态硬盘判断第一写请求个数与第二写请求个数是否相等;

本实施例中,固态硬盘在接收到主机发送的读请求后,可以判断第一写请求个数与第二写请求个数是否相等,也就是说,固态硬盘需要判断固态硬盘接收到的来自主机的写请求个数是否等于固态硬盘完成写操作的写请求个数,若是,则执行步骤105。

105、固态硬盘使用不带读锁的方式读取ddrsdram中的l2p表;

本实施例中,如果固态硬盘确定第一写请求个数与第二写请求个数相等,则表明固态硬盘中没有未完成的写请求,这就意味着没有新的写操作对ddrsdram中的l2p表进行更新,因此即使固态硬盘此时使用不带读锁的方式读取l2p表,也不会发生读取旧数据的错误,该旧数据指的是上一个写操作时所更新的l2p表。因此在固态硬盘确定接收到的主机发送的写请求个数与固态硬盘完成写操作的写请求个数的情况下,固态硬盘可以使用不带读锁的方式读取ddrsdram中的l2p表。

如果固态硬盘使用带锁的方式读取ddrsdram中的l2p表,则随后固态硬盘需要再次访问ddrsdram,从而释放ddrsdram中的读锁。由于固态硬盘使用不带锁的方式读取ddrsdram中的l2p表,因此无需在读取完l2p表之后,再次访问ddrsdram释放读锁,这样就减少了访问ddrsdram的次数,缩减了访问ddrsdram的时间。

在本申请实施例中,由于固态硬盘在确定固态硬盘接收到的主机发送的写请求个数与固态硬盘完成写操作的写请求个数相等的情况下,也就是说,当固态硬盘在确定没有未完成的写请求的情况下,固态硬盘可以使用不带读锁的方式读取ddrsdram中的l2p表,因此无需在读取完l2p表之后,再次访问ddrsdram释放读锁,这样可以减少固态硬盘访问ddrsdram的次数,节省访问ddrsdram的时间,减少了固态硬盘的数据输入输出的延时,从而提升了固态硬盘的读性能。

以上对本申请实施例中固态硬盘的数据读取方法的一个实施例进行了详细描述,下面对本申请实施例中固态硬盘的数据读取方法的另一个实施例进行描述。参见图2,本申请实施例中固态硬盘的数据读取方法的另一个实施例包括:

201、固态硬盘用第一计数器记录第一写请求个数;

202、固态硬盘用第二计数器记录第二写请求个数;

203、固态硬盘接收主机发送的读请求;

204、固态硬盘判断第一写请求个数与第二写请求个数是否相等;

本实施例中,固态硬盘可以判断第一写请求个数与第二写请求个数是否相等,也就是说,固态硬盘需要判断固态硬盘接收到的来自主机的写请求个数是否等于固态硬盘完成写操作的写请求个数,若是,则执行步骤202;若否,则执行步骤206。

205、固态硬盘使用不带读锁的方式读取ddrsdram中的l2p表;

需要说明的是,图2所示的实施例中的步骤201至步骤205与图1所示的实施例中的步骤101至步骤105类似,具体此处不再赘述。

206、固态硬盘使用带读锁的方式读取ddrsdram的l2p表;

本实施例中,如果固态硬盘确定第一写请求个数与第二写请求个数不相等,则表明固态硬盘中还有未完成的写请求,这就意味着还有新的写操作会对ddrsdram中的l2p表进行更新,因此如果使用不带读锁的方式读取l2p表,则有可能发生固态硬盘读取旧数据的错误,该旧数据指的是上一个已完成的写操作所更新的l2p表。此种情况下,固态硬盘需要使用带读锁的方式读取ddrsdram的l2p表,这样就确保了固态硬盘能够读取到正确的最新更新的l2p表。

进一步地,固态硬盘使用读锁的方式读取ddrsdram的l2p表的具体方式是,首先,固态硬盘向ddrsdram申请读锁,当ddrsdram接收到固态硬盘申请读锁的请求后,会将读锁授权给固态硬盘,这样,固态硬盘就可以获取ddrsdram授权的读锁;然后,固态硬盘可以使用带读锁的方式读取ddrsdram中的l2p表。

207、固态硬盘释放ddrsdram中的读锁。

固态硬盘在使用带读锁的方式读取完ddrsdram中的l2p表之后,为了确保随后主机不断发送的读请求能够申请到读锁,还需要再访问一次ddrsdram,释放ddrsdram中的读锁。

具体地,固态硬盘释放ddrsdram中的读锁的方法是,更新ddrsdram中与该读锁对应的锁比特(lockbit),固态硬盘可以将该锁比特从“1”置换为“0”,此时,锁比特为“1”表示ddrsdram向固态硬盘授权了读锁,锁比特为“0”则表示ddrsdram清除了锁比特的“1”,并置换为“0”,这样就表明固态硬盘释放了读锁。

在本申请实施例中,由于固态硬盘在确定接收到的主机发送的写请求个数与固态硬盘完成写操作的写请求个数相等时,也就是说,固态硬盘在确定没有未完成的写请求的情况下,固态硬盘无需从ddrsdram获取读锁就可以直接读取ddrsdram中的数据,减少了固态硬盘访问ddrsdram的访问次数,减少了固态硬盘的数据输入输出的延时,提升了固态硬盘的读性能;而在固态硬盘确定接收到的主机发送的写请求个数与固态硬盘完成写操作的写请求个数不相等时,也就是说,固态硬盘在确定存在未完成的写请求的情况下,固态硬盘可以从ddrsdram获取读锁,使用带读锁的方式读取ddrsdram中的数据,其中包括l2p表,因此得以使固态硬盘有所选择是否带读锁的方式读取,进一步提升了本申请实施例的灵活性和实用性。

上面对本申请实施例中的数据读取方法进行了描述,下面对本申请实施例中的固态硬盘进行描述,请参阅图3,图3是本申请实施例中固态硬盘的一个实施方式。

本申请实施例中固态硬盘的一个实施例包括:

第一记录单元301,用于用第一计数器记录第一写请求个数,所述第一写请求个数为所述固态硬盘接收到的主机发送的写请求个数;

第二记录单元302,用于用第二计数器记录第二写请求个数,所述第二写请求个数为所述固态硬盘完成写操作的写请求个数;

接收单元303,用于接收所述主机发送的读请求;

判断单元304,用于判断第一写请求个数与第二写请求个数是否相等;

第一读取单元305,用于当确定第一写请求个数与第二写请求个数相等时,则使用不带读锁的方式读取双倍速率同步动态随机存储器ddrsdram中的逻辑到物理地址转换l2p表。

本实施例中,固态硬盘还包括:

第二读取单元306,用于当确定第一写请求个数与第二写请求个数不相等时,则使用带读锁的方式读取所述l2p表。

本实施例中,第二读取单元306具体用于向所述ddrsdram申请读锁;获取所述ddrsdram授权的所述读锁;使用带读锁的方式读取所述l2p表。

本实施例中,固态硬盘还包括:

释放单元307,用于释放所述ddrsdram中的读锁。

在本申请实施例中,由于接收单元303在接收到主机发送的读请求后,可以利用判断单元304第一记录单元301中记录的第一写请求个数与第二记录单元302中记录的第二写请求个数是否相同,如果判断单元304确定第一写请求个数与第二写请求个数相同,则表明固态硬盘中没有未完成的写请求,此种情况下,第一读取单元305可以使用不带锁的方式读取ddrsdram中的数据,其中包括l2p数据,这样就可以不使用第二读取单元306读取ddrsdram中的数据,减少了访问ddrsdram的次数,节省访问ddrsdram的时间,减少了固态硬盘的数据输入输出的延时,从而提升了固态硬盘的读性能。

以上是对本申请实施例中固态硬盘的一个实施方式的描述,以下对本申请实施例中固态硬盘的另一个实施方式进行描述。

参见图4,图4为本申请实施例中固态硬盘的另一个实施例示意图。

该固态硬盘400可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上控制器(centralprocessingunits,cpu)401(例如,一个或一个以上处理器)和存储器405,该存储器405中存储有一个或一个以上的应用程序或数据。

其中,存储器405可以是易失性存储或持久存储。存储在存储器405的程序可以包括一个或一个以上模块,每个模块可以包括对服务器中的一系列指令操作。更进一步地,控制器401可以设置为与存储器405通信,在固态硬盘400上执行存储器405中的一系列指令操作。

固态硬盘400还可以包括一个或一个以上电源402,一个或一个以上有线或无线网络接口403,一个或一个以上输入输出接口404,和/或,一个或一个以上操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。

需要说明的是,本实施例中的存储器405可以使用sata接口的存储硬盘,具体此处不做限定。此外,本实施例中的固态硬盘400可以不设置掉电保护装置,且可以只设置一个控制器401,具体此处不做限定。

本实施例中固态硬盘400中的控制器401所执行的流程与前述图2所示的实施例中描述的方法流程类似,此处不再赘述。

本实施例的有益效果是由于在控制器401确定没有未完成的写请求的情况下,使用了不带读所述的方式读取l2p表,因此控制器401无需在读取完l2p表之后,再次访问ddrsdram释放读锁,这样就可以减少控制器401访问ddrsdram的次数,节省了访问ddrsdram的时间,减少了输入输出接口404输入输出数据的延时,从而提升了固态硬盘的读性能。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

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