CN101221539B - 提高缓存性能的方法及缓存*** - Google Patents
提高缓存性能的方法及缓存*** Download PDFInfo
- Publication number
- CN101221539B CN101221539B CN2008100569905A CN200810056990A CN101221539B CN 101221539 B CN101221539 B CN 101221539B CN 2008100569905 A CN2008100569905 A CN 2008100569905A CN 200810056990 A CN200810056990 A CN 200810056990A CN 101221539 B CN101221539 B CN 101221539B
- Authority
- CN
- China
- Prior art keywords
- request
- sector
- idle condition
- cache
- sectors
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供了一种提高缓存性能的方法,该方法包括:以扇区为基本单位处理访问缓存Cache的输入输出IO请求,其中,所述扇区大小要小于缓存时隙Cache slot大小。相应地,本发明还提供了一种缓存***。利用本发明提供的技术方案,能够减少IO请求响应时间,加快响应速度,提高缓存性能。
Description
技术领域
本发明涉及数据缓存技术,尤其涉及提高缓存性能的方法及缓存***。
背景技术
在数据存储***中,通常包括非易失存储器和高速缓冲存储器(Cache)即缓存两部分。当外部设备发起输入输出(IO)请求访问数据存储***时,首先搜索Cache,如果在Cache中发现需要的数据,则称为缓存命中,从Cache中读取数据;否则称为缓存未命中,从非易失存储器中读取数据。缓存命中可以提高数据存储***的响应速度,缩短IO路径距离。
Cache由多个缓存时隙(Cache slot)组成,每个Cache slot都是一段连续的内存,其大小一般为2K、4K、8K、16K、32K、64K或128K等。Cacheslot是Cache操作的基本单位,在实际操作过程中,不仅一个IO请求可能涉及多个Cache slot,一个Cache slot上也可能发生多个IO请求。在现有的缓存技术中,当一个IO请求涉及到某一个Cache slot时,就会将该Cache slot锁住,用以表示该Cache slot上当前存在IO请求,后续发生在该Cache slot上的其它IO请求必须等待,直到当前IO请求处理完毕才能处理后续IO请求。也就是说,一个Cache slot上一次只能处理一个IO请求,而不能同时处理多个IO请求,这样会延长IO请求的响应时间,减缓响应速度,并最终导致缓存性能的下降。
发明内容
有鉴于此,本发明的目的在于提供一种提高缓存性能的方法及缓存***,以减少IO请求响应时间,加快响应速度,提高缓存性能。
为达到上述目的,本发明提供的技术方案如下:
一种提高缓存性能的方法,该方法以扇区为基本单位处理访问缓存Cache的输入输出IO请求,并为Cache的各个扇区分别设置请求标志位,用以表示各个扇区当前是否处于空闲状态,其中,所述扇区大小要小于缓存时隙Cache slot大小;
所述处理过程包括:接收到访问Cache的IO请求后,根据该IO请求对应的所有扇区的请求标志位判断该IO请求对应的所有扇区当前是否都处于空闲状态,如果是,则处理该IO请求;否则,先将该IO请求挂起,等到该IO请求对应的所有扇区都处于空闲状态时再处理该IO请求;
其中,所述判断该IO请求对应的所有扇区当前是否都处于空闲状态的过程具体包括:
针对所述IO请求对应的各个扇区,分别判断该扇区的请求标志位当前是否处于空闲状态,如果是,则将该扇区的请求标志位置为非空闲状态;否则,标记该扇区发生了冲突;
当所述IO请求对应的所有扇区都执行完毕上述判断操作之后,判断是否存在发生了冲突的扇区,如果不存在,则确定该IO请求对应的所有扇区当前都处于空闲状态;
且,所述处理过程在发生了冲突的扇区恢复为空闲状态之后将发生了冲突的扇区的请求标志位置为非空闲状态,在所述IO请求处理完毕之后将该IO请求对应的所有扇区的请求标志位都置为空闲状态。
所述Cache slot大小为扇区大小的整数倍。
一种缓存***,该***包括:用于缓存数据的缓存模块以及对缓存模块进行控制的缓存控制模块;
所述缓存控制模块,用于接收访问缓存模块的IO请求,并以扇区为基本单位处理访问缓存模块的IO请求,以及,为缓存模块的各个扇区分别设置请求标志位,用以表示各个扇区当前是否处于空闲状态,其中,所述扇区大小要小于缓存时隙Cache slot大小;
所述缓存控制模块接收到访问缓存模块的IO请求后,根据所述IO请求对应的所有扇区的请求标志位判断该IO请求对应的所有扇区当前是否都处于空闲状态,如果是,则处理该IO请求;否则,先将该IO请求挂起,等到该IO请求对应的所有扇区都处于空闲状态时再处理该IO请求;
其中,为了判断该IO请求对应的所有扇区当前是否都处于空闲状态,所述缓存控制模块针对所述IO请求对应的各个扇区,分别判断该扇区的请求标志位当前是否处于空闲状态,如果是,则将该扇区的请求标志位置为非空闲状态;否则,标记该扇区发生了冲突;当所述IO请求对应的所有扇区都执行完毕上述判断操作之后,判断是否存在发生了冲突的扇区,如果不存在,则确定该IO请求对应的所有扇区当前都处于空闲状态;
所述缓存控制模块还在发生了冲突的扇区恢复为空闲状态之后,将发生了冲突的扇区的请求标志位置为非空闲状态;并在所述IO请求处理完毕之后,将该IO请求对应的所有扇区的请求标志位都置为空闲状态。
所述Cache slot大小为扇区大小的整数倍。
由此可见,采用以扇区为Cache操作的基本单位的方案后,对于发生在同一个Cache slot上的多个IO请求,只要它们所涉及到的扇区不一样,那么就可以同时得到处理,而无需进行等待,从而避免了现有技术中一个Cacheslot上一次只能处理一个IO请求而不能同时处理多个IO请求的情况,有效减少了IO请求的响应时间,加快了响应速度,提高了缓存性能。
附图说明
图1为本发明实施例中提高缓存性能的方法流程图;
图2为本发明实施例中的IO请求处理过程示意图;
图3为本发明实施例中的缓存***结构示意图。
具体实施方式
为了克服现有技术中的问题,本发明提供一种解决方案,其基本思想是:以扇区(sector)为基本单位处理访问Cache的IO请求。其中,扇区是Cacheslot的进一步划分,每个扇区的大小一般为512字节或1K,要小于一个Cacheslot的大小,一个Cache slot可以分为多个扇区,Cache slot大小是扇区大小的整数倍。
为使本发明的目的、技术方案及优点更加清楚明白,下面参照附图并举实施例,对本发明作进一步详细说明。
图1示出了本发明提供的提高缓存性能方法的流程图,包括如下步骤:
步骤101:接收到访问Cache的IO请求后,判断该IO请求对应的所有扇区当前是否都处于空闲状态,如果是,则执行步骤102;否则,执行步骤103。
步骤102:处理该IO请求,并结束本流程的处理。
步骤103:先将该IO请求挂起,等到该IO请求对应的所有扇区都处于空闲状态时,再处理该IO请求。
由于发生在同一个Cache slot上的多个IO请求所涉及的扇区可能是不同的,因此,以扇区为Cache操作的基本单位,而不以Cache slot为Cache操作的基本单位,能够缩小IO请求的冲突范围。
为了实现本发明,可以对现有的Cache slot数据结构进行修改。比如,参见表1所示的示例性Cache slot数据结构,地址(Address)、时隙指针(Cacheslot pointer)和状态(Status)是现有的数据位,而sectors cmd是新增的扇区请求标志位。其中,Address表示Cache slot所在的逻辑单元号(LUN)和起始逻辑块地址(LBA)信息;Cache slot pointer指向数据缓存区域;Status表示Cache slot的数据状态;sectors cmd为新增的扇区请求标志位,用于指示Cache slot中的各个扇区当前是否处于空闲状态。其中,扇区处于空闲状态是指该扇区上当前不存在正在处理的IO请求;扇区处于非空闲状态是指该扇区上当前存在正在处理的IO请求。也就是说,当Cache slot中的某个扇区上当前存在正在处理的IO请求时,需要将该扇区的请求标志位置为非空闲状态,如置为1;当该IO请求处理完毕后,需要将该扇区的请求标志位恢复成空闲状态,如置为0。
Address | Cache slot pointer | Status | sectors cmd | ...... |
表1
图2示出了本发明实施例中的IO请求处理过程示意图,该过程包括以下步骤:
步骤201:接收到访问Cache的IO请求后,确定该IO请求对应的各个Cache slot,并将该IO请求涉及到的Cache slot个数记为N。
步骤202:从N个Cache slot中选取一个Cache slot,确定所述IO请求在该Cache slot上对应的所有sector,并将所述IO请求在该Cache slot上涉及到的sector个数记为M。
由于IO请求中一般都会携带LBA信息,故根据LBA信息便可确定IO请求所对应的sector。
步骤203:从M个sector中选取一个sector,并查看该sector的请求标志位,如果该sector的请求标志位为0,则说明该sector当前处于空闲状态,没有正在处理的IO请求,执行步骤204;如果该sector的请求标志位为1,则说明该sector当前处于非空闲状态,存在正在处理的IO请求,执行步骤205。
步骤204:将该sector的请求标志位置为非空闲状态即置为1,然后执行步骤206。
步骤205:标记该sector发生了冲突,然后执行步骤206。
步骤206:令M=M-1,并判断更新后的M值是否大于0,如果大于0,则返回执行步骤203;如果小于等于0,则执行步骤207。
也就是说,重复执行步骤203,直到M个sector都被处理完毕为止。
步骤207:令N=N-1,并判断更新后的N值是否大于0,如果大于0,则返回执行步骤202;如果小于等于0,则执行步骤208。
也就是说,重复执行步骤202,直到N个Cache slot都被处理完毕为止。
步骤208:判断接收到的IO请求对应的所有sector中是否存在发生了冲突的sector,如果存在,则说明该IO请求对应的所有sector并非当前都处于空闲状态,执行步骤209;如果不存在,则说明该IO请求对应的所有sector当前都处于空闲状态,执行步骤210。
步骤209:将该IO请求挂起,等到发生冲突的sector上的其它IO请求处理完毕,发生冲突的sector恢复成空闲状态时,再处理该IO请求,并将所述发生冲突的sector的请求标志位置为非空闲状态即置为1,然后执行步骤211。
步骤210:处理该IO请求,如向发起该IO请求的主机返回相关数据。
步骤211:该IO请求处理完毕后,将该IO请求对应的所有sector的请求标志位都恢复成空闲状态,即置为0。
可见,图1所示流程是以sector为Cache操作的基本单位,而不是以Cache slot为基本单位。对于一个sector,无论其所在的Cache slot上当前是否存在正在处理的IO请求,只要该sector上当前不存在正在处理的IO请求,那么后续发生在该sector上的IO请求就可以及时得到处理,而无需被挂起等待。
也就是说,采用以sector为Cache操作的基本单位的方案后,对于发生在同一个Cache slot上的多个IO请求,只要它们所涉及到的sector不一样,那么就可以同时得到处理,而无需进行等待,从而避免了现有技术中一个Cache slot上一次只能处理一个IO请求而不能同时处理多个IO请求的情况,有效减少了IO请求的响应时间,加快了响应速度,提高了缓存性能。
相应地,本发明还提供了一种缓存***,其结构如图3所示,主要包括:用于缓存数据的缓存模块以及对缓存模块进行控制的缓存控制模块,其中,所述缓存控制模块,用于接收访问缓存模块的IO请求,并以扇区为基本单位处理访问缓存模块的IO请求。其中,所述扇区大小要小于Cache slot大小,且Cache slot大小一般为扇区大小的整数倍。
其中,缓存控制模块处理IO请求的具体过程如下:缓存控制模块接收到访问缓存模块的IO请求后,判断该IO请求对应的所有扇区当前是否都处于空闲状态,如果是,则处理该IO请求;否则,先将该IO请求挂起,等到该IO请求对应的所有扇区都处于空闲状态时再处理该IO请求。
缓存控制模块可进一步为缓存模块的各个扇区分别设置请求标志位,用以表示各个扇区当前是否处于空闲状态,然后根据所述IO请求对应的所有扇区的请求标志位判断所述IO请求对应的所有扇区当前是否都处于空闲状态。具体操作过程如下:缓存控制模块针对所述IO请求对应的各个扇区,分别判断该扇区的请求标志位当前是否处于空闲状态,如果是,则将该扇区的请求标志位置为非空闲状态;否则,标记该扇区发生了冲突;当所述IO请求对应的所有扇区都执行完毕上述判断操作之后,判断是否存在发生了冲突的扇区,如果不存在,则确定该IO请求对应的所有扇区当前都处于空闲状态。
缓存控制模块进一步在发生了冲突的扇区恢复为空闲状态之后,将发生了冲突的扇区的请求标志位置为非空闲状态;并在所述IO请求处理完毕之后,将该IO请求对应的所有扇区的请求标志位都置为空闲状态。
以上所述对本发明的目的、技术方案和有益效果进行了进一步的详细说明,所应理解的是,以上所述并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种提高缓存性能的方法,其特征在于,该方法以扇区为基本单位处理访问缓存Cache的输入输出IO请求,并为Cache的各个扇区分别设置请求标志位,用以表示各个扇区当前是否处于空闲状态,其中,所述扇区大小要小于缓存时隙Cache slot大小;
所述处理过程包括:接收到访问Cache的IO请求后,根据该IO请求对应的所有扇区的请求标志位判断该IO请求对应的所有扇区当前是否都处于空闲状态,如果是,则处理该IO请求;否则,先将该IO请求挂起,等到该IO请求对应的所有扇区都处于空闲状态时再处理该IO请求;
其中,所述判断该IO请求对应的所有扇区当前是否都处于空闲状态的过程具体包括:
针对所述IO请求对应的各个扇区,分别判断该扇区的请求标志位当前是否处于空闲状态,如果是,则将该扇区的请求标志位置为非空闲状态;否则,标记该扇区发生了冲突;
当所述IO请求对应的所有扇区都执行完毕上述判断操作之后,判断是否存在发生了冲突的扇区,如果不存在,则确定该IO请求对应的所有扇区当前都处于空闲状态;
且,所述处理过程在发生了冲突的扇区恢复为空闲状态之后将发生了冲突的扇区的请求标志位置为非空闲状态,在所述IO请求处理完毕之后将该IO请求对应的所有扇区的请求标志位都置为空闲状态。
2.根据权利要求1所述的方法,其特征在于,所述Cache slot大小为扇区大小的整数倍。
3.一种缓存***,其特征在于,该***包括:用于缓存数据的缓存模块以及对缓存模块进行控制的缓存控制模块,其中,
所述缓存控制模块,用于接收访问缓存模块的IO请求,并以扇区为基本单位处理访问缓存模块的IO请求,以及,为缓存模块的各个扇区分别设置请求标志位,用以表示各个扇区当前是否处于空闲状态,其中,所述扇区大小要小于缓存时隙Cache slot大小;
所述缓存控制模块接收到访问缓存模块的IO请求后,根据所述IO请求对应的所有扇区的请求标志位判断该IO请求对应的所有扇区当前是否都处于空闲状态,如果是,则处理该IO请求;否则,先将该IO请求挂起,等到该IO请求对应的所有扇区都处于空闲状态时再处理该IO请求;
其中,为了判断该IO请求对应的所有扇区当前是否都处于空闲状态,所述缓存控制模块针对所述IO请求对应的各个扇区,分别判断该扇区的请求标志位当前是否处于空闲状态,如果是,则将该扇区的请求标志位置为非空闲状态;否则,标记该扇区发生了冲突;当所述IO请求对应的所有扇区都执行完毕上述判断操作之后,判断是否存在发生了冲突的扇区,如果不存在,则确定该IO请求对应的所有扇区当前都处于空闲状态;
所述缓存控制模块还在发生了冲突的扇区恢复为空闲状态之后,将发生了冲突的扇区的请求标志位置为非空闲状态;并在所述IO请求处理完毕之后,将该IO请求对应的所有扇区的请求标志位都置为空闲状态。
4.根据权利要求3所述的***,其特征在于,所述Cache slot大小为扇区大小的整数倍。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100569905A CN101221539B (zh) | 2008-01-28 | 2008-01-28 | 提高缓存性能的方法及缓存*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008100569905A CN101221539B (zh) | 2008-01-28 | 2008-01-28 | 提高缓存性能的方法及缓存*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101221539A CN101221539A (zh) | 2008-07-16 |
CN101221539B true CN101221539B (zh) | 2011-04-20 |
Family
ID=39631390
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008100569905A Active CN101221539B (zh) | 2008-01-28 | 2008-01-28 | 提高缓存性能的方法及缓存*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101221539B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103166845A (zh) * | 2013-03-01 | 2013-06-19 | 华为技术有限公司 | 数据处理方法和装置 |
CN107291404B (zh) * | 2017-08-02 | 2020-08-21 | 苏州浪潮智能科技有限公司 | 一种缓存下刷方法及*** |
CN109640036B (zh) * | 2018-11-14 | 2021-03-23 | 视联动力信息技术股份有限公司 | 配置修改方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6115794A (en) * | 1997-04-14 | 2000-09-05 | International Business Machines Corporation | Method and system of providing a pseudo-precise inclusivity scheme in a sectored cache memory for maintaining cache coherency within a data-processing system |
US6339813B1 (en) * | 2000-01-07 | 2002-01-15 | International Business Machines Corporation | Memory system for permitting simultaneous processor access to a cache line and sub-cache line sectors fill and writeback to a system memory |
US7254681B2 (en) * | 2003-02-13 | 2007-08-07 | Intel Corporation | Cache victim sector tag buffer |
-
2008
- 2008-01-28 CN CN2008100569905A patent/CN101221539B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6115794A (en) * | 1997-04-14 | 2000-09-05 | International Business Machines Corporation | Method and system of providing a pseudo-precise inclusivity scheme in a sectored cache memory for maintaining cache coherency within a data-processing system |
US6339813B1 (en) * | 2000-01-07 | 2002-01-15 | International Business Machines Corporation | Memory system for permitting simultaneous processor access to a cache line and sub-cache line sectors fill and writeback to a system memory |
US7254681B2 (en) * | 2003-02-13 | 2007-08-07 | Intel Corporation | Cache victim sector tag buffer |
Also Published As
Publication number | Publication date |
---|---|
CN101221539A (zh) | 2008-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102789427B (zh) | 数据储存装置与其操作方法 | |
US9361236B2 (en) | Handling write requests for a data array | |
CN103678169B (zh) | 一种高效利用固态盘缓存的方法和*** | |
US20070005904A1 (en) | Read ahead method for data retrieval and computer system | |
CN105095116A (zh) | 缓存替换的方法、缓存控制器和处理器 | |
JP2012064158A (ja) | メモリ管理装置及びメモリ管理方法 | |
US8583873B2 (en) | Multiport data cache apparatus and method of controlling the same | |
US11372779B2 (en) | Memory controller and memory page management method | |
CN107423229B (zh) | 一种面向页级ftl的缓冲区改进方法 | |
CN101645043A (zh) | 写数据的方法、读数据的方法及存储设备 | |
CN113641596B (zh) | 缓存管理方法、缓存管理装置、处理器 | |
CN103942161A (zh) | 只读缓存的去冗余***及方法以及缓存的去冗余方法 | |
US8924652B2 (en) | Simultaneous eviction and cleaning operations in a cache | |
CN101221539B (zh) | 提高缓存性能的方法及缓存*** | |
CN105302493A (zh) | 一种混合存储阵列中ssd缓存的换入换出控制方法及*** | |
US20080016282A1 (en) | Cache memory system | |
JP2009015509A (ja) | キャッシュメモリ装置 | |
CN102521161B (zh) | 一种数据的缓存方法、装置和服务器 | |
US11256630B2 (en) | Cache address mapping method and related device | |
CN106201918A (zh) | 一种基于大数据量和大规模缓存快速释放的方法和*** | |
CN103019963A (zh) | 一种高速缓存的映射方法及存储设备 | |
JP2013222434A (ja) | キャッシュ制御装置、キャッシュ制御方法、及びそのプログラム | |
JP6100927B2 (ja) | 情報処理装置 | |
JP7010922B2 (ja) | フォワーディングエントリアクセス | |
JP6112193B2 (ja) | アクセス制御プログラム、ディスク装置及びアクセス制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No. Patentee after: Xinhua three Technology Co., Ltd. Address before: 310053 Hangzhou hi tech Industrial Development Zone, Zhejiang province science and Technology Industrial Park, No. 310 and No. six road, HUAWEI, Hangzhou production base Patentee before: Huasan Communication Technology Co., Ltd. |