CN117312240A - 哈希表重构方法、装置、计算机设备和介质 - Google Patents

哈希表重构方法、装置、计算机设备和介质 Download PDF

Info

Publication number
CN117312240A
CN117312240A CN202311348552.7A CN202311348552A CN117312240A CN 117312240 A CN117312240 A CN 117312240A CN 202311348552 A CN202311348552 A CN 202311348552A CN 117312240 A CN117312240 A CN 117312240A
Authority
CN
China
Prior art keywords
cache
hash table
hash
state data
reading
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.)
Pending
Application number
CN202311348552.7A
Other languages
English (en)
Inventor
巨新刚
闫鑫
陈静静
李幸远
王江
李树青
孙华锦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Suzhou Metabrain Intelligent Technology Co Ltd
Original Assignee
Suzhou Metabrain Intelligent Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Suzhou Metabrain Intelligent Technology Co Ltd filed Critical Suzhou Metabrain Intelligent Technology Co Ltd
Priority to CN202311348552.7A priority Critical patent/CN117312240A/zh
Publication of CN117312240A publication Critical patent/CN117312240A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • G06F16/137Hash-based
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本申请涉及一种哈希表重构方法、装置、计算机设备和介质。方法应用于磁盘阵列控制器,磁盘阵列控制器与主机连接,磁盘阵列控制器包括Cache,方法包括:在磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取Cache的状态数据;当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表;根据新的哈希表响应主机的输入输出命令。采用本方法能够在磁盘阵列控制器异常掉电后再重启时,也能快速响应主机。

Description

哈希表重构方法、装置、计算机设备和介质
技术领域
本申请涉及数据存储技术领域,特别是涉及一种哈希表重构方法、装置、计算机设备和介质。
背景技术
随着数据存储技术的发展,NVMe(Non-Volatile Memory express,非易失性内存阵列)设备的使用场景已经越来越广泛,越来越多的用户采用以PCIe(peripheralcomponent interconnect express,高速串行计算机扩展总线标准)加NVMe的方式,实现高速、安全的存储。基于NVMe协议,处理主机命令的流程中,需要磁盘阵列控制器执行命令。
在磁盘阵列控制器执行命令的过程中,当磁盘阵列控制器发生异常掉电后系统重新上电时,传统的实现方案中需要完成以下操作后,才能响应主机命令:根据Hash(哈希)表信息,将Cache(存储器)中的数据写到磁盘,做Cache Flush(刷新)操作;执行Hash表清零操作,RAID(Redundant Arrays of Independent Disks,磁盘阵列)Cache重新管理Hash表。
然而,以磁盘阵列控制器下挂5个磁盘、4KB IO(输入输出)数据为例,每个盘为200个IOPS(Input/Output Operations Per Second,每秒的读写次数),RAID Cache管理8GB数据,则Cache Flush的时间预估为30多分钟。传统的这种通过Cache Flush的方式极大影响磁盘阵列控制器上电准备时间,进而影响对主机命令的响应和执行。因为系统上电后,磁盘阵列控制器响应主机IO命令的时间是有约束的,通常为几秒到十几秒。
发明内容
基于此,有必要针对上述技术问题,提供一种哈希表重构方法、装置、计算机设备和介质。
一种哈希表重构方法,上述的方法应用于磁盘阵列控制器,上述的磁盘阵列控制器与主机连接,上述的磁盘阵列控制器包括Cache,上述的方法包括:
在磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取Cache的状态数据;
当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表;
根据新的哈希表响应主机的输入输出命令。
在其中一个实施例中,上述的哈希表包括多个表项,上述的状态数据包括多个表项对应的状态数据,上述的方法还包括:
获取预先设置的配置信息,配置信息中包括哈希表的大小、表项的大小以及读哈希表的总线特性;
根据哈希表的大小、表项的大小以及读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数;
上述的从预先构建的哈希表中读取Cache的状态数据,包括:
根据每次读取任务的表项个数以及读取任务的总次数从哈希表中读取Cache的状态数据。
在其中一个实施例中,上述的读哈希表的总线特性包括总线位宽和总线支持的传输长度,根据哈希表的大小、表项的大小以及读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数,包括:
确定哈希表的大小与第一乘积的比值,得到读取任务的总次数,第一乘积为读哈希表的总线特性中总线位宽和总线支持的传输长度的乘积;
确定第一乘积与表项的大小的比值,得到每次读取任务对应的表项个数。
在其中一个实施例中,上述的磁盘阵列控制器包括哈希表项原始缓存,上述的根据每次读取的表项个数以及读取的总次数从哈希表中读取Cache的状态数据,包括:
判断各次读取任务是否完成;
当存在读取任务未完成时,根据每次读取任务的表项个数发起一次读取任务;
将读取的表项对应的状态数据写入哈希表项原始缓存;
返回判断各次读取任务是否完成的步骤,直至各次读取任务都完成。
在其中一个实施例中,上述的磁盘阵列控制器包括哈希表项重构缓存,上述的方法还包括:
从哈希表项原始缓存中读取当前表项的状态数据;
上述的当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表,包括:
当当前表项的状态数据指示Cache被锁定,且未执行完Cache的操作时,对当前表项的状态数据进行重置,得到新的表项;
将新的表项写入哈希表项重构缓存;
从哈希表项重构缓存中读取各新的表项,写入哈希表以重构哈希表,得到新的哈希表。
在其中一个实施例中,各上述的表项的状态数据中包括多个状态信息位以及各状态信息位的取值,上述的状态信息位包括写Cache操作锁定以及磁盘数据是否在Cache中,上述的Cache的操作包括写Cache操作,当当前表项的状态数据指示Cache被锁定,且未执行完Cache的操作时,对当前表项的状态数据进行重置,得到新的表项,包括:
当写Cache操作锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,写Cache操作锁定的取值为有效,且未执行完写Cache时,将写Cache操作锁定的取值重置为无效,得到新的表项。
在其中一个实施例中,上述的方法还包括:
当当前表项中的状态数据指示磁盘数据不在Cache中,写Cache操作锁定的取值为有效,且未执行完写Cache时,将当前表项的全部状态信息位的取值重置为无效,得到新的表项。
在其中一个实施例中,上述的状态信息位还包括读Cache操作锁定,上述的Cache的操作包括读Cache操作,上述的方法还包括:
当读Cache操作锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,读Cache操作锁定的取值为有效,且未执行完读Cache时,将读Cache操作锁定的取值重置为无效,得到新的表项。
在其中一个实施例中,上述的状态信息位还包括落盘锁定,上述的Cache的操作包括落盘操作,上述的方法还包括:
当落盘锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,落盘锁定的取值为有效,且未执行完落盘操作时,将落盘锁定的取值重置为无效,得到新的表项。
在其中一个实施例中,上述的配置信息中还包括异常事件处理模式的配置信息,上述的方法还包括:
当当前表项中的状态数据指示异常状态,且异常事件处理模式的配置信息为按照异常状态执行时,生成异常事件,并对异常事件进行上报;
当当前表项中的状态数据指示异常状态,且异常事件处理模式的配置信息为按照正常状态执行时,将当前表项中各状态信息位的取值都重置为无效。
在其中一个实施例中,上述的方法还包括:
当当前表项中各状态信息位的取值都为无效时,不执行对当前表项的状态数据进行重置,得到新的表项的步骤。
在其中一个实施例中,上述的从哈希表项重构缓存中读取各新的表项,写入哈希表,得到新的哈希表,包括:
根据配置信息确定写入哈希表的总次数以及各次写入的表项个数;
判断从哈希表项重构缓存中读取各新的表项,写入哈希表的任务是否完成;
当哈希表项重构缓存中存在表项未写入哈希表时,根据各次写入的表项个数发起一次写任务;
返回判断从哈希表项重构缓存中读取各新的表项,写入哈希表的任务是否完成的步骤,直至各哈希表项重构缓存中的表项均写入哈希表。
在其中一个实施例中,上述的配置信息还包括写哈希表的总线特性,上述的写哈希表的总线特性包括总线位宽和总线支持的传输长度,上述的根据配置信息确定写入哈希表的总次数以及各次写入的表项个数,包括:
确定哈希表的大小与第二乘积的比值,得到写入哈希表的总次数,第二乘积为写哈希表的总线特性中总线位宽和总线支持的传输长度的乘积;
确定第二乘积与表项的大小的比值,得到各次写入的表项个数。
在其中一个实施例中,上述的磁盘阵列控制器与非易失存储器连接,上述的方法还包括:
当磁盘阵列控制器发生异常掉电时,将哈希表写到非易失存储器;
当重新上电时,从非易失存储器中获取哈希表。
在其中一个实施例中,上述的根据新的哈希表响应主机的输入输出命令,包括:
根据预设的哈希算法确定输入输出命令对应的哈希地址;
从新的哈希表中读取哈希地址对应的表项;
根据哈希地址对应的表项的状态数据执行Cache的查找操作;
当哈希地址对应的表项中的状态数据指示磁盘数据在Cache中时,确定查找操作的结果为输入输出命令对应的数据在Cache中;
当输入输出命令为读命令时,从Cache中读取读命令对应的数据,并生成输入输出命令的执行结果;
向主机反馈输入输出命令的执行结果。
在其中一个实施例中,上述的方法还包括:
当输入输出命令为写命令时,将写命令对应的数据写入Cache中,并生成对应的执行结果反馈至主机;
当输入输出命令为落盘命令时,将落盘命令对应的数据写回磁盘,并生成对应的执行结果反馈至主机。
在其中一个实施例中,上述的将写命令对应的数据写入Cache中之前,上述的方法还包括:
将哈希地址对应的表项中的写Cache锁定的取值置为有效;
将写命令对应的数据写入Cache中之后,方法还包括:
将哈希地址对应的表项中的写Cache锁定的取值置为无效。
一种磁盘阵列Cache哈希表重构系统,上述的系统包括磁盘阵列控制器和主机,上述的磁盘阵列控制器与主机连接,上述的磁盘阵列控制器包括哈希表重构装置,其中,
上述的哈希表重构装置用于当磁盘阵列控制器重新上电时,从预先构建的哈希表中读取Cache的状态数据,当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表;
上述的磁盘阵列控制器用于根据新的哈希表响应主机的输入输出命令。
在其中一个实施例中,上述的状态数据包括多个表项的状态数据,哈希表重构装置包括哈希表重构单元、哈希表项原始缓存、哈希表项重构缓存以及寄存器,哈希表项原始缓存、哈希表项重构缓存以及寄存器分别与哈希表重构单元连接,其中,
上述的哈希表重构单元用于根据寄存器中的配置信息,确定每次读取的表项的个数以及读取的次数,根据每次读取的表项的个数以及读取的次数从哈希表中读取各表项的状态数据,写入哈希表项原始缓存,从哈希表项原始缓存中读取各表项,根据各表项的状态数据,对各表项的状态数据进行重置,重新构建新的表项,将新的表项写入哈希表项重构缓存,从哈希表项重构缓存中读取各新的表项,写入哈希表,得到新的哈希表;
上述的哈希表项原始缓存用于保存从哈希表中读取的各表项的状态数据;
上述的哈希表项重构缓存用于保存各新的表项;
上述的寄存器用于存储配置信息。
一种磁盘阵列Cache哈希表重构装置,上述的装置应用于磁盘阵列控制器,上述的磁盘阵列控制器与主机连接,上述的磁盘阵列控制器包括Cache,上述的装置包括:
读取模块,用于在磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取Cache的状态数据;
重构模块,用于当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表;
响应模块,用于根据新的哈希表响应主机的输入输出命令。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
在磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取Cache的状态数据;
当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表;
根据新的哈希表响应主机的输入输出命令。
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
在磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取Cache的状态数据;
当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表;
根据新的哈希表响应主机的输入输出命令。
上述哈希表重构方法、装置、计算机设备和介质,通过在磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取Cache的状态数据,根据状态数据所指示的信息对哈希表进行重构,在完成Hash表重构后,即可响应主机命令,无需将RAID Cache中的数据Flush到磁盘,由于Hash表重构时间相比Cache Flush操作时间大大减少,因此,本申请能够在磁盘阵列控制器断电后重启时,缩短磁盘阵列控制器对主机命令的响应时间,实现在异常掉电时,也能快速响应主机,加快磁盘阵列控制器与主机的响应速度和数据处理速度。
附图说明
图1为一个实施例中哈希表重构方法的应用环境图;
图2为一个实施例中哈希表重构方法的流程示意图;
图3为一个实施例中读Hash表的流程示意图;
图4为一个实施例重构Hash表的流程示意图;
图5为一个实施例中写Hash表的流程示意图;
图6为一个实施例中磁盘阵列Cache哈希表重构系统的结构框图;
图7为另一个实施例中哈希表重构装置的内部结构示意图;
图8为一个实施例中磁盘阵列Cache哈希表重构装置的结构框图;
图9为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
请参考图1,图1为本申请一示例性实施例提供的一种哈希表重构方法的应用环境示意图。如图1所示,该应用环境中包括主机100以及磁盘阵列控制器101。主机100和磁盘阵列控制器101之间基于NVMe协议进行数据交互,以实现本申请的哈希表重构方法。
主机100用于写主机输入输出命令到SQ(Submission Queue,提交队列),写SQ DB(相当于图1中的写提交队列寄存器)通知磁盘阵列控制器取上述的输入输出命令,其中,DB为Doorbell寄存器。
磁盘阵列控制器101用于收到通知后,从SQ队列取出上述的输入输出命令并执行命令,在磁盘阵列控制器101执行命令过程中,在磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取Cache的状态数据,当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表,根据新的哈希表响应主机的输入输出命令,命令执行完成后,向CQ(Completion Queue,完成队列)中写入命令执行结果,发中断通知主机查看CQ中命令执行结果。
主机100还用于收到中断后,到CQ中查看命令完成状态,处理完CQ中命令执行结果,更新CQ Head BD(相当于图1中的第二寄存器),写CQ DB寄存器(相当于图1中的写完成队列寄存器)回复磁盘阵列控制器101。
在一个实施例中,如图2所示,提供了一种哈希表重构方法,该方法应用于图1中的磁盘阵列控制器,磁盘阵列控制器与主机连接,磁盘阵列控制器包括Cache,上述的哈希表重构方法包括以下步骤:
S11、在磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取Cache的状态数据。
其中,上述的磁盘阵列控制器可以为RAID Controller。上述的Cache为RAIDController上的用于存放少量,且需要被快速访问的临时数据的一种存储器。本申请中RAID Controller使用Cache来存储写入RAID阵列的数据,从而避免频繁地访问磁盘,提高系统的性能。当RAID Controller接收到写入请求时,它会将数据存储在Cache中,然后定期将数据写入磁盘中。在这个过程中,RAID Controller使用Hash(哈希)表来管理Cache数据结构。
具体地,Hash表是一种特殊的数据结构,它可以根据关键字(K)和Hash算法获取一个位置(P),然后将数据存储在P对应的Hash表项中。当需要查询、插入或删除Cache数据时,RAID Controller会根据关键字和Hash算法获取对应的位置,然后读取或修改P对应的Hash表项,实现Cache的插入、查询和删除等操作。通过使用Hash表,RAID Controller可以快速地访问Cache数据,从而提高系统的性能。
上述的Cache的状态数据是指磁盘阵列控制器上的缓存的状态数据。具体而言,这里的状态数据可以包括Cache的可用性、是否已经被分配以及是否已经被锁定等信息。这些状态信息可以帮助磁盘阵列控制器更好地管理Cache,提高Cache的性能和可靠性。
在实际应用场景中,上述的磁盘阵列控制器在执行主机命令的过程中可能发生异常掉电,当发现异常掉电时,磁盘阵列控制器从哈希表中获取Cache的状态数据,对Cache的状态数据进行分析并处理。
具体地,上述的哈希表中存储了Cache的状态数据。这里的Cache的状态数据可以为RAID Cache的状态,也表示RAID Cache所支持的Cache操作类型,如读操作以及写操作等。这里哈希表的具体存储位置可以根据实际需求,或者实际应用场景进行设定,在此不做具体限定。
请继续参考图1,基于NVMe协议,处理主机命令的典型流程包括如下步骤:
(1)主机命令写到SQ;
(2)主机写SQ DB寄存器到SQ Tail Doorbell(相当于图1中的第一寄存器)通知RAID Controller取命令,其中,图1中的提交队列寄存器为SQ DB寄存器;
(3)NVMe RAID Controller收到通知后,从SQ队列取命令;
(4)RAID Controller执行命令:
当支持RAID Cache时,主机IO数据写到Cache,或从Cache中读取数据。同时,固件发起命令,将Cache数据写到磁盘,即执行落盘操作,当不支持RAID Cache时,执行访问磁盘的操作。
(5)命令执行完成后,RAID Controller向CQ中写入命令执行结果;
(6)RAID Controller发中断通知主机查看CQ中命令执行结果;
(7)主机收到中断后,到CQ中查看命令完成状态;
(8)主机处理完CQ中命令执行结果,更新CQ Head BD(相当于图1中的第二寄存器),写CQ DB寄存器回复RAID Controller,其中,图1中的完成队列寄存器为CQ DB寄存器。
本申请的一种哈希表重构方法具体应用于上述的步骤(4)中。根据NVMe协议,对于RAID Controller来说,在第(5)步:RAID Controller完成对主机写CQ的操作,即认为RAID Controller完成主机IO命令。否则,没有完成主机IO命令。
需要说明的是,本申请的一种哈希表重构方法不限于NVMe协议,也可用于其它如SATA、SAS等Cache的操作,只要Cache操作完成,再给主机反馈response,均可实现Hash表的重构。
S12、当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表。
其中,上述的状态数据具备指示作用,其具体内容可以指示Cache的状态或者Cache操作的状态。上述的Cache被锁定,且未执行完Cache的操作具体可以为,例如,Cache被锁定了写操作,但是未完成写Cache操作。
上述的对状态数据进行重置是指对状态数据进行重新置于新的数据内容。通过对状态数据的重置实现上述的重构哈希表,得到新的哈希表。
S13、根据新的哈希表响应主机的输入输出命令。
其中,上述的输入输出命令可以为读命令或者写命令等。上述的根据新的哈希表响应主机的输入输出命令,是指根据新的哈希表中的数据内容执行主机的输入输出命令。
上述的磁盘控制器在执行主机的输入输出命令的过程中,当支持RAID Cache时,主机IO((Input/Output,输入/输出)数据写到Cache,或从Cache中读取数据。同时,固件发起命令,将Cache数据写到磁盘,即执行落盘操作。当不支持RAID Cache时,执行访问磁盘的操作。
具体而言,对于写Cache,主机IO数据写到Cache就完成当前IO写操作,即可向主机反馈CQ,而不用等到数据写到磁盘后向主机反馈CQ。对于读Cache,如果读取的数据在Cache命中,则将Cache中的数据写到主机,向主机反馈CQ,而不用从磁盘读取数据写到主机后再反馈CQ,从而大大降低对磁盘的访问次数和访问时间,同时也降低主机命令的执行时间。其中,RAID Cache(相当于上述的Cache)是以哈希表的方式管理Cache数据结构。在磁盘控制器执行主机的输入输出命令过程中,需要根据哈希表中所维护的Cache数据的状态响应主机的输入输出命令。
在传统的方式中,当RAID Controller发生异常掉电后重新上电时,需要完成以下操作后,才能响应主机命令:
根据Hash表信息,将Cache中的数据写到磁盘,做Cache Flush操作。
执行Hash表清零操作,RAID Cache重新管理Hash表。
然而,这种通过Cache Flush的方式极大影响RAID Controller上电准备时间,进而影响对主机命令的响应和执行。同时,当系统正常关机时,如果执行Cache Flush操作,也将极大影响系统关机时间。即使通过备电电容,将RAID Cache管理的Hash表和Cache数据写到非易失存储器进行数据保护。在系统重新上电时,也会影响RAID Controller上电准备时间。
因此,本申请中的哈希表重构方法,通过对Hash表信息进行重构,在系统上电后,无需作Cache Flush操作,在完成Hash表重构后,即可响应主机的输入输出命令,大大提高了RAID Controller对主机命令的响应时间。
在其中一个实施例中,上述的哈希表可以包括多个表项,上述的状态数据可以包括多个表项对应的状态数据,上述的方法还可以包括:
获取预先设置的配置信息,配置信息中包括哈希表的大小、表项的大小以及读哈希表的总线特性;
根据哈希表的大小、表项的大小以及读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数;
从预先构建的哈希表中读取Cache的状态数据,包括:
根据每次读取任务的表项个数以及读取任务的总次数从哈希表中读取Cache的状态数据。
本申请中,上述的哈希表包括多个表项,各个表项包括对应的状态数据。上述的配置信息存储于寄存器文件。上述的寄存器是指设于磁盘阵列控制器中的寄存器。上述的配置信息包括但不限于Hash表起始地址、Hash表大小、Hash表项大小信息以及总线传输特性(相当于上述的读哈希表的总线特性)。其中,这里的Hash表的大小指的是Hash表中包含的Hash表项的数量,这里的Hash表项大小指的是每个Hash表项占用的字节数,这里的总线传输特性指的是总线传输的数据大小和传输速度等参数。
上述的根据哈希表的大小、表项的大小以及读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数,包括:
根据配置信息中的Hash表大小以及总线特性,确定上述的读取任务的总次数;
根据上述的配置信息中Hash表大小、表项的大小以及读取任务的次数,确定上述的每次读取任务对应的表项个数。
本申请中,磁盘阵列控制器根据Hash表的大小和总线传输特性,可以计算出需要将读Hash表任务拆分为多少次总线读任务,以便能够在总线传输特性的限制下,读取整个Hash表。例如,如果Hash表的大小为1000个Hash表项,总线传输特性为每次传输100个Hash表项,那么需要将读Hash表任务拆分为10次总线读任务,每次读取100个Hash表项,才能读取整个Hash表。
本申请中,上述的状态数据以多个表项的形式存在。上述的从预先构建的哈希表中读取Cache的状态数据的步骤,将读取任务进行拆分,拆分为k次读取任务,每次读取任务对应读取m个表项内的状态数据。其中,k和m根据配置信息进行计算得到,以便能够在总线传输特性的限制下,读取整个Hash表,提高状态数据的读取效率。
在其中一个实施例中,上述的读哈希表的总线特性包括总线位宽和总线支持的传输长度,根据哈希表的大小、表项的大小以及读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数,包括:
确定哈希表的大小与第一乘积的比值,得到读取任务的总次数,第一乘积为读哈希表的总线特性中总线位宽和总线支持的传输长度的乘积;
确定第一乘积与表项的大小的比值,得到每次读取任务对应的表项个数。
本申请中,上述的总线支持的传输长度可以为总线支持的burst大小。示例性地,假设上述的总线位宽和总线支持的传输长度分别为C和D。哈希表大小为A,表项大小为B。上述的读取任务的总次数为k。每次读取任务对应的表项个数为k1。其中,C、D、k以及k1的单位均为字节。那么可以通过以下计算公式计算上述的k以及k1:
k=A/(C*D)
k1=(C*D)/B
其中,C*D是B的整数倍。本申请通过该实施方式能够实现在总线传输特性的限制下读取哈希表项。
在其中一个实施例中,上述的磁盘阵列控制器包括哈希表项原始缓存,根据每次读取的表项个数以及读取的总次数从哈希表中读取Cache的状态数据,包括:
判断各次读取任务是否完成;
当存在读取任务未完成时,根据每次读取任务的表项个数发起一次读取任务;
将读取的表项对应的状态数据写入哈希表项原始缓存;
返回判断各次读取任务是否完成的步骤,直至各次读取任务都完成。
本申请中,上述的Hash表项原始缓存用于保存读取的原始Hash表信息。将每次读取的表项写入哈希表项原始缓存。上述的根据上述的配置信息以及读取任务的次数,确定上述的每次读取任务对应的表项个数,具体可以包括:
根据哈希表项原始缓存的资源大小、配置信息以及读取任务的次数,确定上述的每次读取任务对应的表项个数。
本申请通过该实施方式可以分批读取哈希表中的各表项,并写入Hash表项原始缓存。
在其中一个实施例中,上述的磁盘阵列控制器包括哈希表项重构缓存,上述的方法还可以包括:
从哈希表项原始缓存中读取当前表项的状态数据;
上述的当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表,可以包括:
当当前表项的状态数据指示Cache被锁定,且未执行完Cache的操作时,对当前表项的状态数据进行重置,得到新的表项;
将新的表项写入哈希表项重构缓存;
从哈希表项重构缓存中读取各新的表项,写入哈希表以重构哈希表,得到新的哈希表。
本申请中,上述的Hash表项重构缓存用于保存重新构建的新Hash表项。将各个表项从上述的哈希表项原始缓存中读取后,需要根据各表项的状态数据判断各表项是否需要重置,当表项中状态数据指示Cache被锁定,且未执行完Cache的操作时,确定需要对状态数据进行重置,以得到新的表项。
本申请根据该实施方式可以实现依次将各个表项的状态数据进行重置,以最终实现重构整个哈希表。
在其中一个实施例中,各上述的表项的状态数据中包括多个状态信息位以及各状态信息位的取值,上述的状态信息位包括写Cache操作锁定以及磁盘数据是否在Cache中,上述的Cache的操作包括写Cache操作,上述的当当前表项的状态数据指示Cache被锁定,且未执行完Cache的操作时,对当前表项的状态数据进行重置,得到新的表项,可以包括:
当写Cache操作锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,写Cache操作锁定的取值为有效,且未执行完写Cache时,将写Cache操作锁定的取值重置为无效,得到新的表项。
其中,上述的各表项对应的状态信息位可以包括V以及W_L。上述的各状态信息位的取值可以包括0和1,其中0表示取值为无效,1表示取值为有效。其中,各状态信息位定义如下:
1)V:Valid,dev_lba数据是否在Cache,高(相当于取值为1)有效,表示磁盘数据在Cache中。dev_lba表示:Hash表项维护的磁盘的LBA(Logical Block Address,逻辑区块地址)地址。
2)W_L:Write Lock(写Cache操作锁定),dev_lba数据在写Cache时是否被锁定。高有效,表示Hash表项在写Cache操作时被锁定,将要执行写Cache操作。
各字段说明如下:
Hash表项中,当V = 1、其它状态信息位为0时,说明dev_lba的数据(相当于上述的磁盘数据)在cache中,Cache操作已完成。
Hash表项中,当V = 1、W_L=1(相当于上述的写Cache操作锁定的取值为有效),其它状态信息位为0时,说明dev_lba的数据在Cache中,写Cache操作被锁定,但未完成写Cache操作。
上述的将写Cache操作锁定的取值重置为无效,可以包括:将写Cache操作锁定的取值重置为0。即重构表项时,将W_L=0,其他状态信息位保持不变。本申请中对于状态信息位的无效和有效的取值可以根据实际需求进行设定,在此不做具体限定。
本申请通过该实施方式可以实现在写Cache操作被锁定,且未完成写Cache操作时,可以通过对写Cache操作锁定这个状态信息位的取值进行重置,以重构哈希表,实现以新的哈希表响应主机命令,RAID Cache中的数据无需Flush到磁盘,提高RAID Controller对主机命令的响应时间。
在其中一个实施例中,上述的方法还可以包括:
当当前表项中的状态数据指示磁盘数据不在Cache中,写Cache操作锁定的取值为有效,且未执行完写Cache时,将当前表项的全部状态信息位的取值重置为无效,得到新的表项。
其中,当Hash表项中,W_L=1,其它状态信息位为0时,说明dev_lba的数据不在Cache中,写Cache操作被锁定,但未完成写Cache操作。此情况需要将表项中的全部状态信息位的取值均置为无效,即均重置为0,得到新的表项。
在其中一个实施例中,上述的状态信息位还可以包括读Cache操作锁定,Cache的操作包括读Cache操作,方法还包括:
当读Cache操作锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,读Cache操作锁定的取值为有效,且未执行完读Cache时,将读Cache操作锁定的取值重置为无效,得到新的表项。
其中,上述的状态信息位读Cache操作锁定被表示为R_L(Read Lock),表示dev_lba数据在读Cache时是否被锁定。高有效,表示Hash表项在读Cache操作时被锁定,将要执行读Cache操作。
具体地,Hash表项中,当V = 1、R_L=1,其它状态信息位为0时,说明dev_lba的数据在Cache中,读Cache操作被锁定,但未完成读Cache操作。重构表项时,将R_L=0(相当于上述的将读Cache操作锁定的取值重置为无效),其他状态信息位保持不变。
本申请通过该实施方式可以实现在读Cache操作被锁定,且未完成读Cache操作时,可以通过对读Cache操作锁定这个状态信息位的取值进行重置,其他状态信息位的取值保持不变,以重构哈希表,实现以新的哈希表响应主机命令,RAID Cache中的数据无需Flush到磁盘,提高RAID Controller对主机命令的响应时间。
在其中一个实施例中,上述的状态信息位还包括落盘锁定,上述的Cache的操作包括落盘操作,上述的方法还可以包括:
当落盘锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,落盘锁定的取值为有效,且未执行完落盘操作时,将落盘锁定的取值重置为无效,得到新的表项。
其中,上述的状态信息位落盘锁定被表示为D_L:Destage Lock,代表磁盘数据在落盘时是否被锁定。高有效,表示Hash表项在落盘操作时被锁定,将要执行落盘操作。
具体地,Hash表项中,当V = 1、D_L=1,其它状态信息位为0时,说明dev_lba的数据在Cache中。落盘Cache操作被锁定,但未完成落盘Cache操作。重构表项时,将D_L=0(相当于上述的将落盘锁定的取值重置为无效),表项中的其他状态信息位的取值保持不变,得到新的表项。
本申请通过对各个表项进行重构,实现哈希表的重构,具体通过对各个表项中各个状态信息位进行解析即分析,根据解析结果对各个状态信息位的取值进行重置,实现对各个表现的重构,进而实现哈希表的重构。
在其中一个实施例中,上述的配置信息中还包括异常事件处理模式的配置信息,上述的方法还可以包括:
当当前表项中的状态数据指示异常状态,且异常事件处理模式的配置信息为按照异常状态执行时,生成异常事件,并对异常事件进行上报;
当当前表项中的状态数据指示异常状态,且异常事件处理模式的配置信息为按照正常状态执行时,将当前表项中各状态信息位的取值都重置为无效。
其中,上述的异常事件处理模式的配置信息可以包括按照异常状态执行以及按照正常状态执行。这里的异常事件是指表项中的状态信息位的取值为异常的情况。具体地,表项中除了以下情况以外,都属于异常事件:
1,Hash表项中,当每个状态信息位为0时,说明为空闲的Hash表项。
2,Hash表项中,当V = 1、其它状态信息位为0时,说明dev_lba的数据在cache中,Cache操作已完成。
3,Hash表项中,当V = 1、W_L=1,其它状态信息位为0时,说明dev_lba的数据在Cache中,写Cache操作被锁定,但未完成写Cache操作。
4,Hash表项中,当W_L=1,其它状态信息位为0时,说明dev_lba的数据不在Cache中,写Cache操作被锁定,但未完成写Cache操作。
5,Hash表项中,当V = 1、R_L=1,其它状态信息位为0时,说明dev_lba的数据在Cache中,读Cache操作被锁定,但未完成读Cache操作。
6,Hash表项中,当V = 1、D_L=1,其它状态信息位为0时,说明dev_lba的数据在Cache中。落盘Cache操作被锁定,但未完成落盘Cache操作。
Hash表项中,当状态信息位为其它状态时,说明为异常状态,即除了上述的6中情况以外,其他情况下Hash表项为异常状态,当检测到Hash表项中的状态信息位为以上6种情况以外的情况,即确定Hash表项为异常常态。
具体地,在读取哈希表中的状态数据时,在启动总线读任务前,查询是否有异常事件,如果有,跳至清空Hash表项原始缓存。完成后,Hash表读任务结束。
在进行Hash表项重构时,需要执行以下步骤:
从Hash表项原始缓存中读取、解析Hash表项。如果Hash表项为正常状态,重构Hash表项,重构完成后写入Hash表项重构缓存。
如果Hash表项为正常状态,根据寄存器配置信息中的异常事件处理模式,如果配置为“按正常状态执行”,则重构Hash表项,重构完成后写入Hash表项重构缓存,如果配置为“按异常状态执行”,则产生异常事件,Hash表重构任务完成后,上报异常事件。根据寄存器配置信息:异常事件处理模式,如果配置为“按异常状态执行”,则产生异常事件,待完成Hash表读任务和完成Hash表写任务后,Hash表重构任务结束,上报异常事件。
本申请通过该实施方式,能够实现Hash表项中,当状态信息位表示为异常状态时,支持软件可配置处理。当软件配置为异常状态时,产生异常事件,通知软件,能够对异常情况进行上报,实现异常情况下的处理。
在其中一个实施例中,上述的方法还可以包括:
当当前表项中各状态信息位的取值都为无效时,不执行对当前表项的状态数据进行重置,得到新的表项的步骤。
本申请中,当Hash表项中,当每个状态信息位为0时,说明为空闲的Hash表项。当为空闲的Hash表项时,不执行重构哈希表项的操作。
在其中一个实施例中,上述的从哈希表项重构缓存中读取各新的表项,写入哈希表,得到新的哈希表,可以包括:
根据配置信息确定写入哈希表的总次数以及各次写入的表项个数;
判断从哈希表项重构缓存中读取各新的表项,写入哈希表的任务是否完成;
当哈希表项重构缓存中存在表项未写入哈希表时,根据各次写入的表项个数发起一次写任务;
返回判断从哈希表项重构缓存中读取各新的表项,写入哈希表的任务是否完成的步骤,直至各哈希表项重构缓存中的表项均写入哈希表。
本申请中,磁盘阵列控制器可以根据Hash表的大小、Hash表项大小和总线传输特性,计算出需要将写Hash表任务拆分为多少次总线写任务,以便能够在总线传输特性的限制下,写入整个Hash表。
本申请通过该实施方式,实现哈希的写入,通过哈希表的读取,重构以及写入共同实现本申请的哈希表重构方法。
在其中一个实施例中,上述的配置信息还包括写哈希表的总线特性,写哈希表的总线特性包括总线位宽和总线支持的传输长度,根据配置信息确定写入哈希表的总次数以及各次写入的表项个数,包括:
确定哈希表的大小与第二乘积的比值,得到写入所述哈希表的总次数,第二乘积为写哈希表的总线特性中总线位宽和总线支持的传输长度的乘积;
确定第二乘积与表项的大小的比值,得到各次写入的表项个数。
本申请中,上述的配置数据中还可以包括写哈希表的总线特性。这里的写哈希表的总线特性可以与上述的读哈希表的总线特性相同或者不同。
上述的总线支持的传输长度可以为总线支持的burst大小。示例性地,假设上述的总线位宽和总线支持的传输长度分别为E和F。哈希表大小为A,表项大小为B。上述的写入所述哈希表的总次数为n。各次写入的表项个数为n1。其中,C、D、n以及n1的单位均为字节。那么可以通过以下计算公式计算上述的n以及n1:
n=A/(E*F)
n1=(E*F)/B
其中,E*F是B的整数倍。这里的E和F可以分别与上述的C和D相同或者不同。本申请通过该实施方式能够实现在总线传输特性的限制下写取哈希表项。
在其中一个实施例中,上述的磁盘阵列控制器与非易失存储器连接,上述的方法还可以包括:
当磁盘阵列控制器发生异常掉电时,将哈希表写到非易失存储器;
当重新上电时,从非易失存储器中获取哈希表。
本申请中,当RAID Controller发生异常掉电时,通过备电电容,将RAID Cache管理的Hash表和Cache数据写到非易失存储器进行数据保护。当系统重新上电时,将外部非易失存储器中Hash表信息及Cache数据写到RAID Controller。本申请通过该实施方式实现数据保护。
在其中一个实施例中,上述的根据新的哈希表响应主机的输入输出命令,可以包括:
根据预设的哈希算法确定输入输出命令对应的哈希地址;
从新的哈希表中读取哈希地址对应的表项;
根据哈希地址对应的表项的状态数据执行Cache的查找操作;
当哈希地址对应的表项中的状态数据指示磁盘数据在Cache中时,确定查找操作的结果为输入输出命令对应的数据在Cache中;
当输入输出命令为读命令时,从Cache中读取读命令对应的数据,并生成输入输出命令的执行结果;
向主机反馈输入输出命令的执行结果。
其中,上述的哈希地址为对输入输出命令做Hash后得到的哈希值。从该哈希值指定的存放位置获取表项。解析获取到的表项中的状态数据,根据解析结果,执行Cache的查找操作。
其中,当获取到的表项中的状态数据指示磁盘数据在Cache中时,确定查找操作的结果为输入输出命令对应的数据在Cache命中。
进一步地,上述的表项中还可以包括pageIndex,该pageIndex表示dev_lba数据保存在Cache中的起始地址。上述的从Cache中读取读命令对应的数据,可以包括:
将pageIndex指定空间的输入写回主机。
在其中一个实施例中,上述的方法还可以包括:
当输入输出命令为写命令时,将写命令对应的数据写入Cache中,并生成对应的执行结果反馈至主机;
当输入输出命令为落盘命令时,将落盘命令对应的数据写回磁盘,并生成对应的执行结果反馈至主机。
具体地,RAID Controller根据查找结果,将主机写命令的数据写到pageIndex指定的空间。
具体地,RAID Controller根据查找结果,将pageIndex指定空间的数据写回磁盘。
在其中一个实施例中,上述的将写命令对应的数据写入Cache中之前,方法还包括:
将哈希地址对应的表项中的写Cache锁定的取值置为有效;
将写命令对应的数据写入Cache中之后,方法还包括:
将哈希地址对应的表项中的写Cache锁定的取值置为无效。
本申请中,在写Cache之前需要将对应表项中的写Cache锁定状态信息位的取值置为有效,以对写Cache操作进行锁定,当执行完写Cache操作后,将写Cache锁定状态信息位的取值置为无效,以对写Cache操作进行解锁,以此来更新哈希表。
在其中一个实施例中,本申请读Hash表流程如图3所示。在图3中,读Hash表流程可以包括:
S0:读Hash表前的准备工作。Hash表重构单元解析寄存器配置信息,将读Hash表任务拆分为k(k≥1)次总线读任务。寄存器配置信息包括但不限于Hash表起始地址,Hash表大小、总线传输特性。完成后跳至S1。
S1:启动总线读任务。在启动总线读任务前,查询是否有异常事件,如果有,跳至S3。否则,判读Hash表读任务是否完成,如果完成,Hash表读任务结束;否则,跳至S2。
S2:发起一次总线读任务,将读取的Hash表项写入Hash表项原始缓存。根据Hash表项原始缓存资源大小、寄存器配置信息以及读取任务的次数,计算总线访问的接口特性,发起一次总线读任务。将读取Hash表项写入Hash表项原始缓存,完成后跳至S1。
S3:清空Hash表项原始缓存。完成后,Hash表读任务结束。
在其中一个实施例中,本申请重构Hash表项的流程如图4所示。在图4中,重构Hash表项的流程可以包括:
S0:启动Hash表项重任务。Hash表重构单元解析寄存器配置信息,启动Hash表重构任务。寄存器配置信息包括但不限于Hash表大小、异常事件处理模式。启动Hash表重构任务前,查询Hash表是否重构完成,如果完成,Hash表重构任务结束。否则,查询Hash表项原始缓存是否有Hash表项,如果有,跳至S1,否则,在S0等待。
S1:从Hash表项原始缓存中读取、解析Hash表项。解析Hash表项时,根据 Hash表项中V、D_L、R_L、W_L、M状态信息进行解析,如果Hash表项为正常状态,跳至S2。否则,根据寄存器配置信息:异常事件处理模式,如果配置为“按正常状态执行”,跳至S2,否则跳至S3。
S2:重构Hash表项,重构完成后写入Hash表项重构缓存。根据表2重构Hash表项,重构完成后根据Hash表项重构缓存资源大小,写入Hash表项重构缓存。完成后跳至S0。
S3:产生异常事件,Hash表重构任务完成后,上报异常事件。根据寄存器配置信息:异常事件处理模式,如果配置为“按异常状态执行”,则产生异常事件,待完成Hash表读任务和完成Hash表写任务后,Hash表重构任务结束,上报异常事件。
在其中一个实施例中,本申请写Hash表流程如图5所示。在图5中,写Hash表流程可以包括:
S0:读取Hash表前的准备工作。Hash表重构单元解析寄存器配置信息,将写Hash表任务拆分为n(n≥1)次总线写任务。寄存器配置信息包括但不限于Hash表起始地址,Hash表大小、Hash表项大小、总线传输特性。完成后跳至S1。
S1:启动总线写任务。在启动总线写任务前,查询是否有异常事件,如果有,跳至S3;否则,判读Hash表写任务是否完成,如果完成,Hash表写任务结束。否则,跳至S2。
S2:发起一次总线写任务,读取Hash表项重构缓存中的Hash表项,写入Hash表。根据Hash表项重构缓存资源大小、寄存器配置信息以及写任务的次数,计算总线访问的接口特性,发起一次总线写任务。完成后跳至S1。
S3:清空Hash表项重构缓存。完成后,Hash表写任务结束。
在一个实施例中,如图6所示,提供了一种磁盘阵列Cache哈希表重构系统,上述的系统包括磁盘阵列控制器和主机,上述的磁盘阵列控制器与主机连接,上述的磁盘阵列控制器包括哈希表重构装置,其中,
上述的哈希表重构装置用于当磁盘阵列控制器重新上电时,从预先构建的哈希表中读取Cache的状态数据,当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表;
上述的磁盘阵列控制器用于根据新的哈希表响应主机的输入输出命令。
在其中一个实施例中,上述的状态数据包括多个表项的状态数据,哈希表重构装置包括哈希表重构单元、哈希表项原始缓存、哈希表项重构缓存以及寄存器,哈希表项原始缓存、哈希表项重构缓存以及寄存器分别与哈希表重构单元连接,其中,
上述的哈希表重构单元用于根据寄存器中的配置信息,确定每次读取的表项的个数以及读取的次数,根据每次读取的表项的个数以及读取的次数从哈希表中读取各表项的状态数据,写入哈希表项原始缓存,从哈希表项原始缓存中读取各表项,根据各表项的状态数据,对各表项的状态数据进行重置,重新构建新的表项,将新的表项写入哈希表项重构缓存,从哈希表项重构缓存中读取各新的表项,写入哈希表,得到新的哈希表;
上述的哈希表项原始缓存用于保存从哈希表中读取的各表项的状态数据;
上述的哈希表项重构缓存用于保存各新的表项;
上述的寄存器用于存储配置信息。
具体地,哈希表项原始缓存、哈希表项重构缓存以及寄存器分别与哈希表重构单元连接。哈希表重构单元通过外部总线访问哈希表和Cache数据。
请参考图7,图7一种实施例中,哈希表重构装置的内部结构示意图。其中,RAIDCache Hash表重构装置内部包含以下模块:
1、Hash表重构单元:
该Hash表重构单元用于根据寄存器文件配置信息,每次读取m(m≥1)个Hash表项,写入Hash表项原始缓存,从Hash表项原始缓存中读取Hash表项,根据Hash表项状态信息,重新构建新的Hash表项,将构建的新Hash表项写入Hash表项重构缓存,从Hash表项重构缓存中读取(n≥1)个Hash表项,写入Hash表。
2、Hash表项原始缓存:用于保存读取的原始Hash表信息。
3、Hash表项重构缓存:用于保存Hash表项重构单元重新构建的新Hash表项。
4、寄存器文件:
(1)提供Hash表项重构单元访问Hash表起始地址、Hash表大小、Hash表项大小信息。
(2)提供Hash表项重构单元访问Hash表总线特性。
(3)提供Hash表项异常状态处理机制。
Hash冲突硬件处理装置外部包含以下模块:
1、BUS:外部总线,用作Hash表重构单元访问Hash表。
2、Data Cache:保存RAID Cache维护的磁盘数据。
在一个实施例中,如图8所示,提供了一种磁盘阵列Cache哈希表重构装置,上述的装置应用于磁盘阵列控制器,上述的磁盘阵列控制器与主机连接,上述的磁盘阵列控制器中包括Cache,上述的装置包括读取模块11、重构模块12以及响应模块13,其中:
读取模块11,用于在磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取Cache的状态数据;
重构模块12,用于当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表;
响应模块13,用于根据新的哈希表响应主机的输入输出命令。
在其中一个实施例中,上述的哈希表包括多个表项,上述的状态数据包括多个表项对应的状态数据,上述的读取模块11还可以获取预先设置的配置信息,配置信息中包括哈希表的大小、表项的大小以及读哈希表的总线特性,根据哈希表的大小、表项的大小以及读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数,上述的读取模块11可以根据每次读取任务的表项个数以及读取任务的总次数从哈希表中读取Cache的状态数据。
在其中一个实施例中,上述的读哈希表的总线特性包括总线位宽和总线支持的传输长度,上述的读取模块11还可以确定哈希表的大小与第一乘积的比值,得到读取任务的总次数,第一乘积为读哈希表的总线特性中总线位宽和总线支持的传输长度的乘积,确定第一乘积与表项的大小的比值,得到每次读取任务对应的表项个数。
在其中一个实施例中,上述的磁盘阵列控制器包括哈希表项原始缓存,上述的读取模块11还可以判断各次读取任务是否完成,当存在读取任务未完成时,根据每次读取任务的表项个数发起一次读取任务,将读取的表项对应的状态数据写入哈希表项原始缓存,返回判断各次读取任务是否完成的步骤,直至各次读取任务都完成。
在其中一个实施例中,上述的磁盘阵列控制器包括哈希表项重构缓存,上述的读取模块11还可以从哈希表项原始缓存中读取当前表项的状态数据,上述的重构模块12可以当当前表项的状态数据指示Cache被锁定,且未执行完Cache的操作时,对当前表项的状态数据进行重置,得到新的表项,将新的表项写入哈希表项重构缓存,从哈希表项重构缓存中读取各新的表项,写入哈希表以重构哈希表,得到新的哈希表。
在其中一个实施例中,各上述的表项的状态数据中包括多个状态信息位以及各上述的状态信息位的取值,上述的状态信息位包括写Cache操作锁定以及磁盘数据是否在Cache中,上述的Cache的操作包括写Cache操作,上述的重构模块12可以当写Cache操作锁定的取值为有效时,确定Cache被锁定,当当前表项中的状态数据指示磁盘数据在Cache中,写Cache操作锁定的取值为有效,且未执行完写Cache时,将写Cache操作锁定的取值重置为无效,得到新的表项。
在其中一个实施例中,上述的重构模块12还可以当当前表项中的状态数据指示磁盘数据不在Cache中,写Cache操作锁定的取值为有效,且未执行完写Cache时,将当前表项的全部状态信息位的取值重置为无效,得到新的表项。
在其中一个实施例中,上述的状态信息位还包括读Cache操作锁定,上述的Cache的操作包括读Cache操作,上述的重构模块12还可以当读Cache操作锁定的取值为有效时,确定Cache被锁定,当当前表项中的状态数据指示磁盘数据在Cache中,读Cache操作锁定的取值为有效,且未执行完读Cache时,将读Cache操作锁定的取值重置为无效,得到新的表项。
在其中一个实施例中,上述的状态信息位还包括落盘锁定,上述的Cache的操作包括落盘操作,上述的重构模块12还可以当落盘锁定的取值为有效时,确定Cache被锁定,当当前表项中的状态数据指示磁盘数据在Cache中,落盘锁定的取值为有效,且未执行完落盘操作时,将落盘锁定的取值重置为无效,得到新的表项。
在其中一个实施例中,上述的配置信息中还包括异常事件处理模式的配置信息,上述的重构模块12还可以当当前表项中的状态数据指示异常状态,且异常事件处理模式的配置信息为按照异常状态执行时,生成异常事件,并对异常事件进行上报,当当前表项中的状态数据指示异常状态,且异常事件处理模式的配置信息为按照正常状态执行时,将当前表项中各状态信息位的取值都重置为无效。
在其中一个实施例中,上述的重构模块12还可以当当前表项中各状态信息位的取值都为无效时,不执行对当前表项的状态数据进行重置,得到新的表项的步骤。
在其中一个实施例中,上述的读取模块11还可以根据配置信息确定写入哈希表的总次数以及各次写入的表项个数,判断从哈希表项重构缓存中读取各新的表项,写入哈希表的任务是否完成,当哈希表项重构缓存中存在表项未写入哈希表时,根据各次写入的表项个数发起一次写任务,返回判断从哈希表项重构缓存中读取各新的表项,写入哈希表的任务是否完成的步骤,直至各哈希表项重构缓存中的表项均写入哈希表。
在其中一个实施例中,上述的配置信息还包括写哈希表的总线特性,写哈希表的总线特性包括总线位宽和总线支持的传输长度,上述的读取模块11还可以确定哈希表的大小与第二乘积的比值,得到写入所述哈希表的总次数,第二乘积为写哈希表的总线特性中总线位宽和总线支持的传输长度的乘积,确定第二乘积与表项的大小的比值,得到各次写入的表项个数。
在其中一个实施例中,上述的磁盘阵列控制器与非易失存储器连接,上述的读取模块11还可以当磁盘阵列控制器发生异常掉电时,将哈希表写到非易失存储器,当重新上电时,从非易失存储器中获取哈希表。
在其中一个实施例中,上述的响应模块13可以根据预设的哈希算法确定输入输出命令对应的哈希地址,从新的哈希表中读取哈希地址对应的表项,根据哈希地址对应的表项的状态数据执行Cache的查找操作,当哈希地址对应的表项中的状态数据指示磁盘数据在Cache中时,确定查找操作的结果为输入输出命令对应的数据在Cache中,当输入输出命令为读命令时,从Cache中读取读命令对应的数据,并生成输入输出命令的执行结果,向主机反馈输入输出命令的执行结果。
在其中一个实施例中,上述的响应模块13还可以当输入输出命令为写命令时,将写命令对应的数据写入Cache中,并生成对应的执行结果反馈至主机,当输入输出命令为落盘命令时,将落盘命令对应的数据写回磁盘,并生成对应的执行结果反馈至主机。
在其中一个实施例中,上述的响应模块13还可以在将写命令对应的数据写入Cache中之前,将哈希地址对应的表项中的写Cache锁定的取值置为有效,在将写命令对应的数据写入Cache中之后,将哈希地址对应的表项中的写Cache锁定的取值置为无效。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储智能家居设备的运行数据等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现哈希表重构方法。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:在磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取Cache的状态数据;当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表;根据新的哈希表响应主机的输入输出命令。
在一个实施例中,上述的哈希表包括多个表项,上述的状态数据包括多个表项对应的状态数据,处理器执行计算机程序时具体还实现以下步骤:
获取预先设置的配置信息,配置信息中包括哈希表的大小、表项的大小以及读哈希表的总线特性;
根据哈希表的大小、表项的大小以及读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数;
处理器执行计算机程序实现上述的从预先构建的哈希表中读取Cache的状态数据步骤时,具体实现以下步骤:
根据每次读取任务的表项个数以及读取任务的总次数从哈希表中读取Cache的状态数据。
在一个实施例中,上述的读哈希表的总线特性包括总线位宽和总线支持的传输长度,处理器执行计算机程序实现上述的根据哈希表的大小、表项的大小以及读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数步骤时,具体实现以下步骤:
确定哈希表的大小与第一乘积的比值,得到读取任务的总次数,第一乘积为读哈希表的总线特性中总线位宽和总线支持的传输长度的乘积;
确定第一乘积与表项的大小的比值,得到每次读取任务对应的表项个数。
在一个实施例中,上述的磁盘阵列控制器包括哈希表项原始缓存,处理器执行计算机程序实现上述的根据每次读取的表项个数以及读取的总次数从哈希表中读取Cache的状态数据步骤时,具体实现以下步骤:
判断各次读取任务是否完成;
当存在读取任务未完成时,根据每次读取任务的表项个数发起一次读取任务;
将读取的表项对应的状态数据写入哈希表项原始缓存;
返回判断各次读取任务是否完成的步骤,直至各次读取任务都完成。
在一个实施例中,上述的磁盘阵列控制器包括哈希表项重构缓存,处理器执行计算机程序时具体还实现以下步骤:
从哈希表项原始缓存中读取当前表项的状态数据;
处理器执行计算机程序实现上述的当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表步骤时,具体实现以下步骤:
当当前表项的状态数据指示Cache被锁定,且未执行完Cache的操作时,对当前表项的状态数据进行重置,得到新的表项;
将新的表项写入哈希表项重构缓存;
从哈希表项重构缓存中读取各新的表项,写入哈希表以重构哈希表,得到新的哈希表。
在一个实施例中,各上述的表项的状态数据中包括多个状态信息位以及各状态信息位的取值,上述的状态信息位包括写Cache操作锁定以及磁盘数据是否在Cache中,上述的Cache的操作包括写Cache操作,处理器执行计算机程序实现上述的当当前表项的状态数据指示Cache被锁定,且未执行完Cache的操作时,对当前表项的状态数据进行重置,得到新的表项步骤时,具体实现以下步骤:
当写Cache操作锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,写Cache操作锁定的取值为有效,且未执行完写Cache时,将写Cache操作锁定的取值重置为无效,得到新的表项。
在一个实施例中,处理器执行计算机程序时,具体还实现以下步骤:
当当前表项中的状态数据指示磁盘数据不在Cache中,写Cache操作锁定的取值为有效,且未执行完写Cache时,将当前表项的全部状态信息位的取值重置为无效,得到新的表项。
在一个实施例中,上述的状态信息位还包括读Cache操作锁定,上述的Cache的操作包括读Cache操作,处理器执行计算机程序时,具体还实现以下步骤:
当读Cache操作锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,读Cache操作锁定的取值为有效,且未执行完读Cache时,将读Cache操作锁定的取值重置为无效,得到新的表项。
在一个实施例中,上述的状态信息位还包括落盘锁定,上述的Cache的操作包括落盘操作,处理器执行计算机程序时,具体还实现以下步骤:
当落盘锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,落盘锁定的取值为有效,且未执行完落盘操作时,将落盘锁定的取值重置为无效,得到新的表项。
在一个实施例中,上述的配置信息中还包括异常事件处理模式的配置信息,处理器执行计算机程序时,具体还实现以下步骤:
当当前表项中的状态数据指示异常状态,且异常事件处理模式的配置信息为按照异常状态执行时,生成异常事件,并对异常事件进行上报;
当当前表项中的状态数据指示异常状态,且异常事件处理模式的配置信息为按照正常状态执行时,将当前表项中各状态信息位的取值都重置为无效。
在一个实施例中,处理器执行计算机程序时,具体还实现以下步骤:
当当前表项中各状态信息位的取值都为无效时,不执行对当前表项的状态数据进行重置,得到新的表项的步骤。
在一个实施例中,处理器执行计算机程序实现上述的从哈希表项重构缓存中读取各新的表项,写入哈希表,得到新的哈希表步骤时,具体实现以下步骤:
根据配置信息确定写入哈希表的总次数以及各次写入的表项个数;
判断从哈希表项重构缓存中读取各新的表项,写入哈希表的任务是否完成;
当哈希表项重构缓存中存在表项未写入哈希表时,根据各次写入的表项个数发起一次写任务;
返回判断从哈希表项重构缓存中读取各新的表项,写入哈希表的任务是否完成的步骤,直至各哈希表项重构缓存中的表项均写入哈希表。
在一个实施例中,上述的配置信息还包括写哈希表的总线特性,写哈希表的总线特性包括总线位宽和总线支持的传输长度,处理器执行计算机程序实现上述的根据配置信息确定写入哈希表的总次数以及各次写入的表项个数步骤时,具体实现以下步骤:
确定哈希表的大小与第二乘积的比值,得到写入所述哈希表,第二乘积为写哈希表的总线特性中总线位宽和总线支持的传输长度的乘积;
确定第二乘积与表项的大小的比值,得到各次写入的表项个数。
在一个实施例中,上述的磁盘阵列控制器与非易失存储器连接,处理器执行计算机程序时,具体还实现以下步骤:
当磁盘阵列控制器发生异常掉电时,将哈希表写到非易失存储器;
当重新上电时,从非易失存储器中获取哈希表。
在一个实施例中,处理器执行计算机程序实现上述的根据新的哈希表响应主机的输入输出命令步骤时,具体实现以下步骤:
根据预设的哈希算法确定输入输出命令对应的哈希地址;
从新的哈希表中读取哈希地址对应的表项;
根据哈希地址对应的表项的状态数据执行Cache的查找操作;
当哈希地址对应的表项中的状态数据指示磁盘数据在Cache中时,确定查找操作的结果为输入输出命令对应的数据在Cache中;
当输入输出命令为读命令时,从Cache中读取读命令对应的数据,并生成输入输出命令的执行结果;
向主机反馈输入输出命令的执行结果。
在一个实施例中,处理器执行计算机程序时,具体还实现以下步骤:
当输入输出命令为写命令时,将写命令对应的数据写入Cache中,并生成对应的执行结果反馈至主机;
当输入输出命令为落盘命令时,将落盘命令对应的数据写回磁盘,并生成对应的执行结果反馈至主机。
在一个实施例中,处理器执行计算机程序实现上述的将写命令对应的数据写入Cache中步骤之前,具体还实现以下步骤:
将哈希地址对应的表项中的写Cache锁定的取值置为有效;
将写命令对应的数据写入Cache中之后,方法还包括:
将哈希地址对应的表项中的写Cache锁定的取值置为无效。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:在磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取Cache的状态数据;当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表;根据新的哈希表响应主机的输入输出命令。
在一个实施例中,上述的哈希表包括多个表项,上述的状态数据包括多个表项对应的状态数据,计算机程序被处理器执行时具体还实现以下步骤:
获取预先设置的配置信息,配置信息中包括哈希表的大小、表项的大小以及读哈希表的总线特性;
根据哈希表的大小、表项的大小以及读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数;
计算机程序被处理器执行实现上述的从预先构建的哈希表中读取Cache的状态数据步骤时,具体实现以下步骤:
根据每次读取任务的表项个数以及读取任务的总次数从哈希表中读取Cache的状态数据。
在一个实施例中,上述的读哈希表的总线特性包括总线位宽和总线支持的传输长度,计算机程序被处理器执行实现上述的根据哈希表的大小、表项的大小以及读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数步骤时,具体实现以下步骤:
确定哈希表的大小与第一乘积的比值,得到读取任务的总次数,第一乘积为读哈希表的总线特性中总线位宽和总线支持的传输长度的乘积;
确定第一乘积与表项的大小的比值,得到每次读取任务对应的表项个数。
在一个实施例中,上述的磁盘阵列控制器包括哈希表项原始缓存,计算机程序被处理器执行实现上述的根据每次读取的表项个数以及读取的总次数从哈希表中读取Cache的状态数据步骤时,具体实现以下步骤:
判断各次读取任务是否完成;
当存在读取任务未完成时,根据每次读取任务的表项个数发起一次读取任务;
将读取的表项对应的状态数据写入哈希表项原始缓存;
返回判断各次读取任务是否完成的步骤,直至各次读取任务都完成。
在一个实施例中,上述的磁盘阵列控制器包括哈希表项重构缓存,计算机程序被处理器执行时具体还实现以下步骤:
从哈希表项原始缓存中读取当前表项的状态数据;
计算机程序被处理器执行实现上述的当状态数据指示Cache被锁定,且未执行完Cache的操作时,对状态数据进行重置以重构哈希表,得到新的哈希表步骤时,具体实现以下步骤:
当当前表项的状态数据指示Cache被锁定,且未执行完Cache的操作时,对当前表项的状态数据进行重置,得到新的表项;
将新的表项写入哈希表项重构缓存;
从哈希表项重构缓存中读取各新的表项,写入哈希表以重构哈希表,得到新的哈希表。
在一个实施例中,各上述的表项的状态数据中包括多个状态信息位以及各状态信息位的取值,上述的状态信息位包括写Cache操作锁定以及磁盘数据是否在Cache中,上述的Cache的操作包括写Cache操作,计算机程序被处理器执行实现上述的当当前表项的状态数据指示Cache被锁定,且未执行完Cache的操作时,对当前表项的状态数据进行重置,得到新的表项步骤时,具体实现以下步骤:
当写Cache操作锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,写Cache操作锁定的取值为有效,且未执行完写Cache时,将写Cache操作锁定的取值重置为无效,得到新的表项。
在一个实施例中,计算机程序被处理器执行时,具体还实现以下步骤:
当当前表项中的状态数据指示磁盘数据不在Cache中,写Cache操作锁定的取值为有效,且未执行完写Cache时,将当前表项的全部状态信息位的取值重置为无效,得到新的表项。
在一个实施例中,上述的状态信息位还包括读Cache操作锁定,上述的Cache的操作包括读Cache操作,计算机程序被处理器执行时,具体还实现以下步骤:
当读Cache操作锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,读Cache操作锁定的取值为有效,且未执行完读Cache时,将读Cache操作锁定的取值重置为无效,得到新的表项。
在一个实施例中,上述的状态信息位还包括落盘锁定,上述的Cache的操作包括落盘操作,计算机程序被处理器执行时,具体还实现以下步骤:
当落盘锁定的取值为有效时,确定Cache被锁定;
当当前表项中的状态数据指示磁盘数据在Cache中,落盘锁定的取值为有效,且未执行完落盘操作时,将落盘锁定的取值重置为无效,得到新的表项。
在一个实施例中,上述的配置信息中还包括异常事件处理模式的配置信息,计算机程序被处理器执行时,具体还实现以下步骤:
当当前表项中的状态数据指示异常状态,且异常事件处理模式的配置信息为按照异常状态执行时,生成异常事件,并对异常事件进行上报;
当当前表项中的状态数据指示异常状态,且异常事件处理模式的配置信息为按照正常状态执行时,将当前表项中各状态信息位的取值都重置为无效。
在一个实施例中,计算机程序被处理器执行时,具体还实现以下步骤:
当当前表项中各状态信息位的取值都为无效时,不执行对当前表项的状态数据进行重置,得到新的表项的步骤。
在一个实施例中,计算机程序被处理器执行实现上述的从哈希表项重构缓存中读取各新的表项,写入哈希表,得到新的哈希表步骤时,具体实现以下步骤:
根据配置信息确定写入哈希表的总次数以及各次写入的表项个数;
判断从哈希表项重构缓存中读取各新的表项,写入哈希表的任务是否完成;
当哈希表项重构缓存中存在表项未写入哈希表时,根据各次写入的表项个数发起一次写任务;
返回判断从哈希表项重构缓存中读取各新的表项,写入哈希表的任务是否完成的步骤,直至各哈希表项重构缓存中的表项均写入哈希表。
在一个实施例中,上述的配置信息还包括写哈希表的总线特性,写哈希表的总线特性包括总线位宽和总线支持的传输长度,计算机程序被处理器执行实现上述的根据配置信息确定写入哈希表的总次数以及各次写入的表项个数步骤时,具体实现以下步骤:
确定哈希表的大小与第二乘积的比值,得到写入所述哈希表,第二乘积为写哈希表的总线特性中总线位宽和总线支持的传输长度的乘积;
确定第二乘积与表项的大小的比值,得到各次写入的表项个数。
在一个实施例中,上述的磁盘阵列控制器与非易失存储器连接,计算机程序被处理器执行时,具体还实现以下步骤:
当磁盘阵列控制器发生异常掉电时,将哈希表写到非易失存储器;
当重新上电时,从非易失存储器中获取哈希表。
在一个实施例中,计算机程序被处理器执行实现上述的根据新的哈希表响应主机的输入输出命令步骤时,具体实现以下步骤:
根据预设的哈希算法确定输入输出命令对应的哈希地址;
从新的哈希表中读取哈希地址对应的表项;
根据哈希地址对应的表项的状态数据执行Cache的查找操作;
当哈希地址对应的表项中的状态数据指示磁盘数据在Cache中时,确定查找操作的结果为输入输出命令对应的数据在Cache中;
当输入输出命令为读命令时,从Cache中读取读命令对应的数据,并生成输入输出命令的执行结果;
向主机反馈输入输出命令的执行结果。
在一个实施例中,计算机程序被处理器执行时,具体还实现以下步骤:
当输入输出命令为写命令时,将写命令对应的数据写入Cache中,并生成对应的执行结果反馈至主机;
当输入输出命令为落盘命令时,将落盘命令对应的数据写回磁盘,并生成对应的执行结果反馈至主机。
在一个实施例中,计算机程序被处理器执行实现上述的将写命令对应的数据写入Cache中步骤之前,具体还实现以下步骤:
将哈希地址对应的表项中的写Cache锁定的取值置为有效;
将写命令对应的数据写入Cache中之后,方法还包括:
将哈希地址对应的表项中的写Cache锁定的取值置为无效。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (20)

1.一种哈希表重构方法,其特征在于,所述方法应用于磁盘阵列控制器,所述磁盘阵列控制器与主机连接,所述磁盘阵列控制器包括Cache,所述方法包括:
在所述磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取所述Cache的状态数据;
当所述状态数据指示所述Cache被锁定,且未执行完所述Cache的操作时,对所述状态数据进行重置以重构所述哈希表,得到新的哈希表;
根据所述新的哈希表响应所述主机的输入输出命令。
2.根据权利要求1所述的方法,其特征在于,所述哈希表包括多个表项,所述状态数据包括多个所述表项对应的状态数据,所述方法还包括:
获取预先设置的配置信息,所述配置信息中包括所述哈希表的大小、所述表项的大小以及读哈希表的总线特性;
根据所述哈希表的大小、所述表项的大小以及所述读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数;
所述从预先构建的哈希表中读取所述Cache的状态数据,包括:
根据所述每次读取任务的表项个数以及所述读取任务的总次数从所述哈希表中读取所述Cache的状态数据。
3.根据权利要求2所述的方法,其特征在于,所述读哈希表的总线特性包括总线位宽和总线支持的传输长度,所述根据所述哈希表的大小、所述表项的大小以及所述读哈希表的总线特性,确定每次读取任务对应的表项个数以及读取任务的总次数,包括:
确定所述哈希表的大小与第一乘积的比值,得到所述读取任务的总次数,所述第一乘积为所述读哈希表的总线特性中总线位宽和总线支持的传输长度的乘积;
确定所述第一乘积与所述表项的大小的比值,得到所述每次读取任务对应的表项个数。
4.根据权利要求2所述的方法,其特征在于,所述磁盘阵列控制器包括哈希表项原始缓存,所述根据所述每次读取的表项个数以及所述读取的总次数从所述哈希表中读取所述Cache的状态数据,包括:
判断各次读取任务是否完成;
当存在所述读取任务未完成时,根据所述每次读取任务的表项个数发起一次读取任务;
将读取的表项对应的状态数据写入所述哈希表项原始缓存;
返回所述判断各次读取任务是否完成的步骤,直至各次读取任务都完成。
5.根据权利要求4所述的方法,其特征在于,所述磁盘阵列控制器包括哈希表项重构缓存,所述方法还包括:
从所述哈希表项原始缓存中读取当前表项的状态数据;
所述当所述状态数据指示所述Cache被锁定,且未执行完所述Cache的操作时,对所述状态数据进行重置以重构所述哈希表,得到新的哈希表,包括:
当当前表项的状态数据指示所述Cache被锁定,且未执行完所述Cache的操作时,对所述当前表项的状态数据进行重置,得到新的表项;
将所述新的表项写入所述哈希表项重构缓存;
从所述哈希表项重构缓存中读取各所述新的表项,写入所述哈希表以重构所述哈希表,得到所述新的哈希表。
6.根据权利要求5所述的方法,其特征在于,各所述表项的状态数据中包括多个状态信息位以及各所述状态信息位的取值,所述状态信息位包括写Cache操作锁定以及磁盘数据是否在Cache中,所述Cache的操作包括写Cache操作,所述当当前表项的状态数据指示所述Cache被锁定,且未执行完所述Cache的操作时,对所述当前表项的状态数据进行重置,得到新的表项,包括:
当所述写Cache操作锁定的取值为有效时,确定所述Cache被锁定;
当所述当前表项中的状态数据指示所述磁盘数据在所述Cache中,所述写Cache操作锁定的取值为有效,且未执行完所述写Cache时,将所述写Cache操作锁定的取值重置为无效,得到所述新的表项。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
当所述当前表项中的状态数据指示所述磁盘数据不在所述Cache中,所述写Cache操作锁定的取值为有效,且未执行完所述写Cache时,将所述当前表项的全部状态信息位的取值重置为无效,得到所述新的表项。
8.根据权利要求6所述的方法,其特征在于,所述状态信息位还包括读Cache操作锁定,所述Cache的操作包括读Cache操作,所述方法还包括:
当所述读Cache操作锁定的取值为有效时,确定所述Cache被锁定;
当所述当前表项中的状态数据指示所述磁盘数据在所述Cache中,所述读Cache操作锁定的取值为有效,且未执行完所述读Cache时,将所述读Cache操作锁定的取值重置为无效,得到所述新的表项。
9.根据权利要求6所述的方法,其特征在于,所述状态信息位还包括落盘锁定,所述Cache的操作包括落盘操作,所述方法还包括:
当所述落盘锁定的取值为有效时,确定所述Cache被锁定;
当所述当前表项中的状态数据指示所述磁盘数据在所述Cache中,所述落盘锁定的取值为有效,且未执行完落盘操作时,将所述落盘锁定的取值重置为无效,得到所述新的表项。
10.根据权利要求6所述的方法,其特征在于,所述配置信息中还包括异常事件处理模式的配置信息,所述方法还包括:
当所述当前表项中的状态数据指示异常状态,且所述异常事件处理模式的配置信息为按照异常状态执行时,生成异常事件,并对所述异常事件进行上报;
当所述当前表项中的状态数据指示异常状态,且所述异常事件处理模式的配置信息为按照正常状态执行时,将所述当前表项中各所述状态信息位的取值都重置为无效。
11.根据权利要求6所述的方法,其特征在于,所述方法还包括:
当所述当前表项中各所述状态信息位的取值都为无效时,不执行所述对所述当前表项的状态数据进行重置,得到新的表项的步骤。
12.根据权利要求5所述的方法,其特征在于,所述从所述哈希表项重构缓存中读取各所述新的表项,写入所述哈希表,得到所述新的哈希表,包括:
根据所述配置信息确定写入所述哈希表的总次数以及各次写入的表项个数;
判断所述从所述哈希表项重构缓存中读取各所述新的表项,写入所述哈希表的任务是否完成;
当所述哈希表项重构缓存中存在表项未写入所述哈希表时,根据所述各次写入的表项个数发起一次写任务;
返回所述判断所述从所述哈希表项重构缓存中读取各所述新的表项,写入所述哈希表的任务是否完成的步骤,直至各所述哈希表项重构缓存中的表项均写入所述哈希表。
13.根据权利要求12所述的方法,其特征在于,所述配置信息还包括写哈希表的总线特性,所述写哈希表的总线特性包括总线位宽和总线支持的传输长度,所述根据所述配置信息确定写入所述哈希表的总次数以及各次写入的表项个数,包括:
确定所述哈希表的大小与第二乘积的比值,得到所述写入所述哈希表的总次数,所述第二乘积为所述写哈希表的总线特性中总线位宽和总线支持的传输长度的乘积;
确定所述第二乘积与所述表项的大小的比值,得到所述各次写入的表项个数。
14.根据权利要求1所述的方法,其特征在于,所述磁盘阵列控制器与非易失存储器连接,所述方法还包括:
当所述磁盘阵列控制器发生异常掉电时,将所述哈希表写到所述非易失存储器;
当重新上电时,从所述非易失存储器中获取所述哈希表。
15.根据权利要求6所述的方法,其特征在于,所述根据所述新的哈希表响应所述主机的输入输出命令,包括:
根据预设的哈希算法确定所述输入输出命令对应的哈希地址;
从所述新的哈希表中读取所述哈希地址对应的表项;
根据所述哈希地址对应的表项的状态数据执行所述Cache的查找操作;
当所述哈希地址对应的表项中的状态数据指示所述磁盘数据在Cache中时,确定所述查找操作的结果为所述输入输出命令对应的数据在所述Cache中;
当所述输入输出命令为读命令时,从所述Cache中读取所述读命令对应的数据,并生成所述输入输出命令的执行结果;
向所述主机反馈所述输入输出命令的执行结果。
16.根据权利要求15所述的方法,其特征在于,所述方法还包括:
当所述输入输出命令为写命令时,将所述写命令对应的数据写入所述Cache中,并生成对应的执行结果反馈至所述主机;
当所述输入输出命令为落盘命令时,将所述落盘命令对应的数据写回所述磁盘,并生成对应的执行结果反馈至所述主机。
17.根据权利要求16所述的方法,其特征在于,所述将所述写命令对应的数据写入所述Cache中之前,所述方法还包括:
将所述哈希地址对应的表项中的写Cache锁定的取值置为有效;
所述将所述写命令对应的数据写入所述Cache中之后,所述方法还包括:
将所述哈希地址对应的表项中的写Cache锁定的取值置为无效。
18.一种磁盘阵列Cache哈希表重构装置,其特征在于,所述装置应用于磁盘阵列控制器,所述磁盘阵列控制器与主机连接,所述磁盘阵列控制器包括Cache,所述装置包括:
读取模块,用于在所述磁盘阵列控制器断电后重启时,从预先构建的哈希表中读取所述Cache的状态数据;
重构模块,用于当所述状态数据指示所述Cache被锁定,且未执行完所述Cache的操作时,对所述状态数据进行重置以重构所述哈希表,得到新的哈希表;
响应模块,用于根据所述新的哈希表响应所述主机的输入输出命令。
19.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至17中任一项所述方法的步骤。
20.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至17中任一项所述的方法的步骤。
CN202311348552.7A 2023-10-18 2023-10-18 哈希表重构方法、装置、计算机设备和介质 Pending CN117312240A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311348552.7A CN117312240A (zh) 2023-10-18 2023-10-18 哈希表重构方法、装置、计算机设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311348552.7A CN117312240A (zh) 2023-10-18 2023-10-18 哈希表重构方法、装置、计算机设备和介质

Publications (1)

Publication Number Publication Date
CN117312240A true CN117312240A (zh) 2023-12-29

Family

ID=89297061

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311348552.7A Pending CN117312240A (zh) 2023-10-18 2023-10-18 哈希表重构方法、装置、计算机设备和介质

Country Status (1)

Country Link
CN (1) CN117312240A (zh)

Similar Documents

Publication Publication Date Title
US9280487B2 (en) Methods and apparatus for data processing using data compression, linked lists and de-duplication techniques
US9032151B2 (en) Method and system for ensuring reliability of cache data and metadata subsequent to a reboot
US8032707B2 (en) Managing cache data and metadata
CN109800185B (zh) 一种数据存储系统中的数据缓存方法
US20150089287A1 (en) Event-triggered storage of data to non-volatile memory
EP2879040B1 (en) Data storage method, data storage apparatus, and storage device
CN107329704B (zh) 一种缓存镜像方法及控制器
US20160085445A1 (en) Method operating raid system and data storage systems using write command log
US11307789B2 (en) Storage system and storage control method
US10158710B2 (en) Efficient replication of changes to a byte-addressable persistent memory over a network
WO2018076633A1 (zh) 一种远程数据复制方法、存储设备及存储系统
JP6652647B2 (ja) ストレージシステム
US11372583B2 (en) Storage device and control method for maintaining control information in the event of power failure
JP2006099802A (ja) 記憶制御装置およびキャッシュメモリの制御方法
US20150261454A1 (en) Database device, computer program product and data processing method
US20160124779A1 (en) Launch control method and launch control apparatus
US8191066B2 (en) Continuously loading series of data whether data is requested or not, in response to end command unloading the data in descendent order of reference probability
CN117312240A (zh) 哈希表重构方法、装置、计算机设备和介质
KR102085272B1 (ko) 비휘발성 메모리를 이용한 인메모리 데이터베이스의 데이터 처리 방법 및 인메모리 데이터베이스
US10866756B2 (en) Control device and computer readable recording medium storing control program
US10656867B2 (en) Computer system, data management method, and data management program
CN111831589A (zh) 提高io命令处理并行性的方法与装置
US20230105067A1 (en) Metadata Processing Method in Storage Device, and Related Device
CN116610598A (zh) 一种数据存储系统、数据存储方法、装置及相关设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination