CN107423232A - Ftl快速访问方法与装置 - Google Patents
Ftl快速访问方法与装置 Download PDFInfo
- Publication number
- CN107423232A CN107423232A CN201610346104.7A CN201610346104A CN107423232A CN 107423232 A CN107423232 A CN 107423232A CN 201610346104 A CN201610346104 A CN 201610346104A CN 107423232 A CN107423232 A CN 107423232A
- Authority
- CN
- China
- Prior art keywords
- ftl
- list items
- index
- cpu
- address
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
提供了FTL快速访问方法与装置。所提供的访问FTL的方法,包括:发出对指定地址的FTL表项的预加载请求,以将指定的FTL表项加载到FTL表项存储部件由第一索引指示的存储位置;以及发出对第一索引的FTL表项的读请求,以从FTL表项存储部件获取第一索引的FTL表项。
Description
技术领域
本发明涉及存储设备控制器,特别是存储设备控制器中用于加速对访问FTL(Flash Translation Layer)的访问的方法与装置。
背景技术
在固态存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作***等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。固态存储设备的FTL表具有较大的尺寸,例如若干GB级。
FTL表包括多个FTL表条目(或称表项)。在申请号为201510430174.6的中国专利申请中提供了FTL表结构的示例。在一个例子中,每个FTL表条目中记录了一个逻辑页地址与一个物理页的对应关系。在又一个例子中,每个FTL表条目中记录了逻辑块地址与物理块地址的对应关系。在依然又一个例子中,FTL表中记录逻辑块地址与物理块地址的映射关系,和/或逻辑页地址与物理页地址的映射关系。FTL表条目也可以记录逻辑地址与一个或多个物理地址的映射关系。
在依然又一个例子中,在连续的内存地址空间中存储FTL表,每个FTL表条目中记录物理地址,而以每个FTL表条目自身的内存地址代表对应于物理地址的逻辑地址。FTL表条目的数量对应于固态存储设备逻辑地址空间的大小。
闪存控制器工作时需要频繁访问FTL。在读取闪存时,通过逻辑地址查询FTL以获得存储数据的闪存的物理地址。在写入闪存时,为写入的数据分配物理地址,并在FTL中记录写入的逻辑地址与物理地址的对应关系。在发生GC、擦除均衡等操作时,逻辑地址与物理地址的映射关系发生改变,需要更新FTL。
已经存在多种访问FTL的技术方案。
FTL的特点包括表项数量多(常见的SSD中要管理数亿条FTL表项)、每条表项的尺寸小(约几个到十几个字节)、随机性强(对FTL表项的访问分布在整个表项空间而缺乏局部性)。并且由于要支持大容量的FLASH,所以经常需要进行超过4GB的空间的访问。
为存储GB级的数据,一般采用DRAM。而DRAM的访问延迟无法匹配CPU等高速处理部件,并严重影响闪存控制器的处理性能。传统地,采用Cache作为存储中间层,通过缓存DRAM中的部分数据来为CPU提供高速数据访问能力。
但是,由于FTL表访问的随机性,即使使用Cache来缓存FTL表,也会由于频繁的换页引起Cache颠簸,并导致FTL访问能力无法显著提升。
例如,当访问FTL表项A时,首先读取DRAM中存储表项A的地址,FTL表项访问的随机性,表项A不太可能已经存在于缓存中,所以可以认为缓存总是缺失,需要将表项A从外部DRAM存储器读取到Cache中,此时延迟惩罚大约在100ns以上。
由于FTL表的存储,***中的DRAM内存大小往往超过4GB,常用的32位地址访问方式无法访问超过4GB的地址空间,从而需要使用TLB。通过访问TLB来获得高位地址,并将地址组合来生成对DRAM的访问。而TLB访问与地址组合过程进一步增大了访问延迟。
还可以使用DMA来访问FTL。在访问FTL时,需要配置地址的高位、地址的低位,然后通过触发DMA来将FTL搬移到CPU可以直接访问到的(或者低延迟可以访问到)空间上,比如低4G的DDR或者***的SRAM中。然而,这种方案的缺点也是明显的:配置DMA的过程需要占用时间,并且CPU访问延迟也会比较大。且因为有DMA的参与,还需要考虑存储一致性问题。
而且,当FTL条目的大小变化时,会进一步增大FTL的访问延迟。
发明内容
根据本发明的第一方面,提供了根据本发明第一方面的第一用于访问FTL的装置,包括FTL表项地址存储部件,FTL表项数据存储部件,CPU接口以及主存接口,FTL表项地址存储部件存储多个FTL表项地址;FTL表项数据存储部件存储多个FTL表项数据;其中由相同的索引在FTL表项地址存储部件与FTL表项数据存储部件中分别访问FTL表项地址以及与其相关联的FTL表项数据,FTL表项地址是与其相关联的FTL表项数据在主存中的存储地址;响应于CPU接口接收对指定地址的FTL表项的预加载请求,通过主存接口从主存获取FTL表项,所述预加载请求还指定第一索引,第一索引指示指定地址的FTL表项在FTL表项数据存储部件中的存储位置;响应于CPU接口接收对第一索引的FTL表项的读请求,通过CPU接口向CPU提供FTL表项。
根据本发明的第一方面的第一用于访问FTL的装置,提供了根据本发明第一方面的第二用于访问FTL的装置,其中接收对指定地址的FTL表项的预加载请求后,所述用于访问FTL的装置以异步方式处理所述加载请求;以及接收对第一索引的FTL表项的读请求后,所述用于访问FTL的装置以同步方式处理所述读请求。
根据本发明的第一方面的第一或第二用于访问FTL的装置,提供了根据本发明第一方面的第三用于访问FTL的装置,其中接收对第一索引的FTL表项的读请求后,若指定地址的FTL表项不存在于所述FTL表项数据存储部件中,还等待从主存将指定地址的FTL表项加载到所述FTL表项数据存储部件中。
根据本发明的第一方面的第一至第三用于访问FTL的装置之一,提供了根据本发明第一方面的第四用于访问FTL的装置,其中所述通过主存接口从主存获取FTL表项还包括:对主存指定地址的FTL表项加锁。
根据本发明的第二方面,提供了根据本发明第二方面的第一用于访问FTL的装置,包括FTL表项地址存储部件,FTL表项数据存储部件,CPU接口以及主存接口,FTL表项地址存储部件存储多个FTL表项地址;FTL表项数据存储部件存储多个FTL表项数据;其中由相同的索引在FTL表项地址存储部件与FTL表项数据存储部件中分别访问FTL表项地址以及与其相关联的FTL表项数据,FTL表项地址是与其相关联的FTL表项数据在主存中的存储地址;响应于CPU接口接收对第一索引的FTL表项的更新请求,更新FTL表项数据存储部件中由第一索引指示的FTL表项数据;响应于CPU接口接收对第一索引的FTL表项的刷写请求,按由第一索引指定的FTL表项地址将由第一索引指定的FTL表项数据通过主存接口写入主存。
根据本发明的第二方面的第一用于访问FTL的装置,提供了根据本发明第二方面的第二用于访问FTL的装置,其中接收FTL表项更新请求后,所述用于访问FTL的装置以同步方式处理所述FTL表项更新请求;接收FTL表项刷写请求后,所述用于访问FTL的装置以异步方式处理所述FTL表项刷写请求。
根据本发明的第二方面的第一或第二用于访问FTL的装置,提供了根据本发明第二方面的第三用于访问FTL的装置,其中响应于CPU接口接收FTL表项更新请求,还更新FTL表项地址存储部件存储的FTL表项地址。
根据本发明的第二方面的第一至第三用于访问FTL的装置之一,提供了根据本发明第二方面的第四用于访问FTL的装置,其中响应于接收FTL表项更新请求,更新FTL表项数据存储部件存储的FTL表项数据后,通过CPU接口指示所述更新FTL表项请求处理完成;并将被更新的FTL表项数据通过主存接口写入主存。
根据本发明的第二方面的第一至第四用于访问FTL的装置之一,提供了根据本发明第二方面的第五用于访问FTL的装置,其中响应于接收FTL表项刷写请求,还检测指定的FTL表项是否已被写入主存,在将指定的FTL表项写入主存后,通过CPU接口指示所述FTL表项刷写请求的处理完成。
根据本发明的第二方面的第一至第五用于访问FTL的装置之一,提供了根据本发明第二方面的第六用于访问FTL的装置,其中接收FTL表项刷写请求后,将指定的FTL表项写入主存前,通过CPU接口指示所述FTL表项刷写请求的处理完成。
根据本发明的第二方面的第一至第六用于访问FTL的装置之一,提供了根据本发明第二方面的第七用于访问FTL的装置,其中所述按指定的FTL表项地址将指定的FTL表项数据通过主存接口写入主存还包括:对主存指定地址的FTL表项解锁。
根据本发明的第二方面的第一至第七用于访问FTL的装置之一,提供了根据本发明第二方面的第八用于访问FTL的装置,其中响应于CPU接口接收对指定地址的FTL表项的预加载请求,通过主存接口从主存获取FTL表项,所述预加载请求还指定第一索引,第一索引指示指定地址的FTL表项在FTL表项数据存储部件中的存储位置;响应于CPU接口接收对第一索引的FTL表项的读请求,通过CPU接口向CPU提供FTL表项。
根据本发明的第三方面,提供了根据本发明第三方面的第一访问FTL的方法,包括:发出对指定地址的FTL表项的预加载请求,以将指定的FTL表项加载到FTL表项存储部件由第一索引指示的存储位置;以及发出对第一索引的FTL表项的读请求,以从FTL表项存储部件获取第一索引的FTL表项。
根据本发明的第三方面的第一访问FTL的方法,提供了根据本发明第三方面的第二访问FTL的方法,其中所述发出对指定地址的FTL表项的预加载请求的操作,以异步方式执行;以及所述发出对第一索引的FTL表项的读请求的操作,以同步式执行。
根据本发明的第三方面的第一或第二访问FTL的方法,提供了根据本发明第三方面的第三访问FTL的方法,还包括:发出对第一索引的FTL表项的更新请求,以更新FTL表项存储部件中的由第一索引所指示的FTL表项;以及发出对第一索引的FTL表项的刷写请求,以将FTL表项存储部件中由第一索引指示的FTL表项写入主存。
根据本发明的第三方面的第一至第三访问FTL的方法之一,提供了根据本发明第三方面的第四访问FTL的方法,其中:所述发出对第一索引的FTL表项的更新请求的操作,以同步方式执行;以及所述发出对指定地址的FTL表项的刷写请求的操作,以异步方式执行。
根据本发明的第三方面的第一至第四访问FTL的方法之一,提供了根据本发明第三方面的第五访问FTL的方法,其中:所述发出对第一索引的FTL表项的刷写请求的操作,以同步方式执行。
根据本发明的第三方面的第一至第五访问FTL的方法之一,提供了根据本发明第三方面的第六访问FTL的方法,其中,所述对指定地址的FTL表项的预加载请求还指示对指定地址的FTL表项加锁。
根据本发明的第三方面的第一至第六访问FTL的方法之一,提供了根据本发明第三方面的第七访问FTL的方法,其中:所述对第一索引的FTL表项的刷写请求,还指示对主存中由第一索引指示的FTL表项地址的FTL表项解锁。
根据本发明的第三方面的第一至第七访问FTL的方法之一,提供了根据本发明第三方面的第八访问FTL的方法,其中:在发出对指定地址的FTL表项的预加载请求后,发出对第一索引的FTL表项的读请求前,还执行与访问所述指定地址的FTL表项无关的操作。
根据本发明的第三方面的第一至第八访问FTL的方法之一,提供了根据本发明第三方面的第九访问FTL的方法,其中:在发出对第一索引的FTL表项的更新请求后,发出对第一索引的FTL表项的刷写请求前,还执行与访问所述第一索引的FTL表项无关的操作。
根据本发明的第三方面的第一至第九访问FTL的方法之一,提供了根据本发明第三方面的第十访问FTL的方法,其中所述与访问所述第一索引的FTL表项无关的操作,包括访问第二FTL表项的操作。
根据本发明的第三方面的第一至第十访问FTL的方法之一,提供了根据本发明第三方面的第十一访问FTL的方法,还包括:分配具有第一索引的FTL表项存储部件的条目。
根据本发明的第三方面的第一至第十一访问FTL的方法之一,提供了根据本发明第三方面的第十二访问FTL的方法,还包括:发出对FTL表项存储部件的刷写请求,以将FTL表项存储部件中的所有被更新的FTL表项写入主存。
根据本发明的第三方面的第一至第十二访问FTL的方法之一,提供了根据本发明第三方面的第十三访问FTL的方法,还包括发出对第一索引的FTL表项的更新请求后,将所述FTL存储部件中被更新的FTL表项写入主存。
根据本发明的第四方面,提供一种包含计算机程序代码的计算机程序,当被载入计算机***并在计算机***上执行时,所述计算机程序代码使所述计算机***执行根据本发明第三方面提供的FTL访问方法。
根据本发明的第五方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述计程序代码使所述存储设备执行根据本发明第三方面提供的FTL访问方法。
附图说明
当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进一步的目的和优点,其中附图包括:
图1是根据本发明实施例的电路***的框图;
图2是根据本发明实施例的FTL加速电路的框图;
图3是根据本发明实施例的FTL表项读取过程的流程图;
图4A是根据本发明一个实施例的FTL表项更新过程的流程图;以及
图4B是根据本发明另一个实施例的FTL表项更新过程的流程图。
具体实施方式
电路***
图1是根据本发明实施例的电路***的框图。CPU与诸如DRAM的主存储器耦合在一起,构成电路***。在CPU与主存储器之间设置FTL加速电路。FTL加速电路耦合到CPU。CPU通过高速本地接口访问FTL加速电路。例如,CPU以寄存器访问方式访问FTL加速电路。CPU访问FTL加速电路时,FTL加速电路在一个指令执行周期内向CPU提供结果。
FTL加速电路通过总线耦合到主存(例如DRAM)。主存中存储FTL表。主存的存储空间可以是若干GB,FTL表占据的存储空间可以是若干GB。FTL加速电路可使用现有技术的方式访问主存中存储的FTL表。
CPU通过FTL加速电路访问主存中存储的FTL表。可选地,CPU还可直接访问主存,而无需利用FTL加速电路。可选地,CPU通过FTL加速电路访问主存中存储的FTL表,以及CPU直接访问主存以获得主存中存储的FTL表之外的其他内容。
图2是根据本发明实施例的FTL加速电路的框图。FTL加速电路包括FTL表项存储部件。FTL表项存储部件包括FTL表项地址存储部件与FTL表项数据存储部件,分别用于存储FTL表项的地址(例如,FTL表项在主存中的存储地址)以及与地址相对应的FTL表项的数据。
在FTL加速电路中,可存储多对FTL表项。FTL表项可以是例如{FTL表项地址,FTL表项数据}。并且,通过索引,CPU可显式访问FTL加速电路的FTL表项地址存储部件和/或FTL表项数据存储部件。
在另一个例子中,在FTL加速电路中还与FTL表项相关联地存储FTL表项的长度。从而FTL表项地址指示FTL表项在主存中的起始地址,而FTL表项长度指示FTL表项占据内存空间的大小。
FTL加速电路还包括CPU接口与主存接口。CPU通过CPU接口访问FTL加速电路。CPU接口是低延迟访问接口,支持同步/异步操作模式。在同步操作模式中,CPU通过FTL加速电路的CPU接口向FTL加速电路发出访问请求,FTL加速电路得到访问结果后才向CPU指示访问请求处理完成,并向CPU提供访问结果,CPU得到FTL加速电路提供的访问结果后,得以继续执行后续操作(例如执行下一条指令)。在异步操作模式,CPU通过CPU接口向FTL加速电路发出访问请求,FTL加速电路不等待得到返回结果,就向CPU指示访问请求处理完成。
FTL加速电路通过主存接口访问主存储器(例如,DDR存储器)。主存接口用于访问主存储器,可以是任何已知的或将被开发出的存储器访问接口。
FTL加速电路的CPU接口提供多种访问方式。
(1)FTL表项预加载(FTL_Prefetch(index,addr))
CPU通过CPU接口向FTL加速电路发出FTL表项预加载请求(FTL_Prefetch)来请求FTL加速电路从主存中加载指定主存地址(例如,由addr所指示的地址)的FTL表项A,将FTL表项A的FTL表项地址存储在FTL加速电路的地址存储部件中,将表项A的FTL表项数据存储在FTL加速电路的FTL表项数据存储部件中,将表项A的地址存储在FTL表项地址存储部件中。在CPU发送给FTL加速电路的预加载请求中还包括索引(Index),索引(Index)指示了将FTL表项加载到FTL表项存储部件的哪个位置。通过索引(Index),CPU还可从FTL加速电路中获取表项A的表项地址和/或表项数据。由于访问主存的时间远大于CPU指令执行时间,为避免CPU长时间等待FTL加速电路的执行结果,优选地,使用异步操作模式处理该访问请求。
可选地,在CPU发送给FTL加速电路的请求中包括多个地址。FTL加速电路将多个地址拼接为用于主存储器的地址。例如,多个地址分别是高位地址与低位地址,多个地址还可以分别是页地址与页内偏移地址。
FTL加速电路收到该预加载请求后,使用主存地址从主存读取指定长度的数据,以获取FTL表项A,并将表项A的表项数据存储在FTL加速电路的由索引Index索引的表项数据存储部件中。FTL加速电路还将表项A的主存地址存储在FTL加速电路的由索引Index索引的表项地址存储部件中。
可选地,FTL加速电路从主存读取FTL表项数据时,还对主存中的FTL表项数据加锁。在CPU发出的FTL表项预加载请求中,还指示是否对主存中的FTL表项数据加锁。
可选地,FTL表项预加载请求中指示要加载的FTL表项A的逻辑地址。FTL加速电路根据逻辑地址确定在主存中存储FTL表项A的主存地址。例如,通过FTL表基地址与作为偏移值的逻辑地址,确定存储FTL表项A的主存地址。或者,以逻辑地址作为索引,查找存储FTL表项A的主存地址。
可选地,若FTL表项预加载请求中指示了索引index,而在FTL加速电路的FTL表项存储部件中由索引index所指示的存储单元已经被分配(已存储了FTL表项或已向主存请求加载将存储在由索引index所指示的存储单元的FTL表项),还将由索引index所指示的存储单元的内容清空或标记无效,并重新从主存获取FTL表项。
(2)FTL表项读(FTL_Read_item(Index))
CPU通过CPU接口向FTL加速电路发出FTL表项读请求。在FTL表项读请求中,指定要读取的FTL表项在FTL表项存储部件中的索引(index)。CPU通过索引Index请求FTL加速电路提供对应的FTL表项A。FTL加速电路依据索引Index从FTL表项数据存储部件中获得表项数据,并提供给CPU。FTL加速电路将表项数据提供给CPU所需的时间接近于CPU指令执行时间,因而优选地,使用同步操作模式处理该访问请求。若CPU通过索引Index请求FTL加速电路提供对应的FTL表项A的表项数据时,FTL加速电路的FTL表项存储部件中不存在所请求的表项数据,FTL加速电路检查是否已向主存发出获取指定主存地址的FTL表项A的请求。若请求已发出,则等待主存返回FTL表项A,将FTL表项A存储在FTL表项存储部件中,并将表项A提供给CPU。若请求尚未发出,则告知CPU所请求的FTL表项A在FTL加速部件中不存在。
(3)FTL表项地址读(FTL_Read_addr(Index))
CPU通过CPU接口向FTL加速电路发出FTL表项地址读请求。CPU通过索引(Index)请求FTL加速电路提供对应的FTL表项A的表项地址。FTL加速电路依据索引Index从内部的FTL表项地址存储部件中获得表项数据,并提供给CPU。FTL加速电路将表项地址提供给CPU所需的时间接近于CPU指令执行时间,因而优选地,使用同步操作模式处理该访问请求。若CPU通过索引Index请求FTL加速电路提供对应的FTL表项A的表项地址时,FTL加速电路的FTL表项地址存储部件中不存在所请求的表项地址,则告知CPU所请求的FTL表项A在FTL加速部件中不存在。
对FTL加速电路中存储的FTL表项地址的读取操作不是必须的。通常情况下CPU更新FTL表项时,仅更新表项数据而无需更新FTL表项地址,从而CPU也无需更新FTL加速电路中存储的FTL表项地址。
(4)FTL表项更新(FTL_Write_item(index,item))
CPU通过CPU接口向FTL加速电路发出FTL表项更新请求。CPU请求FTL加速电路将索引为Index的FTL表项数据更新为CPU指定的新表项数据(item)。FTL加速电路执行对FTL表项数据存储部件中的表项数据的更新。FTL加速电路更新表项数据所需的时间接近于CPU指令执行时间,因而优选地,使用同步操作模式处理该访问请求。可选地,若CPU通过索引Index请求FTL加速电路更新对应的FTL表项数据时,FTL加速电路的FTL表项数据存储部件中不存在索引为Index的表项数据,则在将新表项数据存储在FTL表项数据存储部件中。以及可选地,告知CPU在FTL加速电路的FTL表项数据存储部件中不存在索引为Index的表项数据。
可选地,在CPU发出的FTL表项更新请求中,还指示是否对主存中的FTL表项数据解锁。FTL加速电路向主存更新FTL表项数据时,还依据指示对主存中的FTL表项数据解锁。从而,CPU在需要连续更新FTL表项数据时,可以仅在最后一次更新时,解锁主存中的FTL表项数据。
(5)FTL表项地址更新(FTL_Write_addr(index,addr))
CPU通过CPU接口向FTL加速电路发出FTL表项地址更新请求。CPU请求FTL加速电路将FTL表项地址存储部件中的索引为Index的FTL表项地址更新为CPU指定的新表项地址(addr)。FTL加速电路执行对FTL表项地址存储部件中的表项地址的更新。FTL加速电路更新表项地址所需的时间接近于CPU指令执行时间,因而优选地,使用同步操作模式处理该访问请求。可选地,若CPU通过索引Index请求FTL加速电路更新对应的FTL表项地址时,FTL加速电路的FTL表项地址存储部件中不存在索引为Index的表项地址,则在将新表项地址存储在FTL表项地址存储部件中。以及可选地,FTL加速电路告知CPU在FTL加速电路的FTL表项地址存储部件中不存在索引为Index的表项地址。
对FTL加速电路中存储的FTL表项地址的更新操作不是必须的。
(6)FTL表项刷写(FTL_Flush_entry(index),FTL_Flush_entry)
CPU通过CPU接口向FTL加速电路发出FTL表项刷写请求。CPU请求FTL加速电路将由Index索引的FTL表项A写入主存。FTL加速电路依据索引Index从FTL表项地址存储部件中获得FTL表项A的主存地址,从FTL表项数据存储部件中获得FTL表项数据(表项A),并依据主存地址将表项A写入到主存。由于访问主存的时间远大于CPU指令执行时间,为避免CPU长时间等待FTL加速电路的执行结果,优选地,使用异步操作模式处理该访问请求。
可选地,FTL表项刷写请求中不提供参数,FTL加速电路响应于不带参数的FTL表项刷写请求而将FTL表项存储部件中的所有FTL表项都写入主存。将FTL表项数据存储部件中存储的FTL表项数据按FTL表项地址存储部件中存储的对应的FTL表项地址写入主存。
可选地,在CPU发出的FTL表项刷写请求中,还指示是否对主存中的FTL表项数据解锁。
(7)FTL表项透写(FTL_WriteThrough_item(index,item))
CPU通过CPU接口向FTL加速电路发出FTL表项透写请求。CPU请求FTL加速电路将FTL表项数据存储单元索引为Index的FTL表项数据更新为CPU指定的新表项数据,并将新表项数据写入主存。FTL加速电路执行对FTL表项数据存储部件中的表项数据的更新。FTL加速电路还主动发起主存更新请求,依据索引(index)从FTL表项地址存储部件中取得主存地址,并依据主存地址将由索引(index)所指示的FTL表项数据写入主存,而无需CPU干预。
由于将数据写入主存的操作耗时较多,优选地,使用异步操作模式处理该访问请求,在FTL加速电路将FTL表项数据写入FTL表项数据存储单元后即向CPU指示FTL表项透写请求处理完成。
操作流程
(1)读取FTL表项
图3是根据本发明实施例的FTL表项读取过程的流程图。CPU希望使用FTL表项时,通过根据本发明的实施例从主存中获取FTL表项(例如表项A)。
作为举例,CPU收到读存储设备的请求,需要查询FTL以获得读请求要访问的物理地址。通过读请求的逻辑地址,CPU确定要加载主存地址Addr处的FTL表项A。CPU通过FTL加速电路本地接口(例如FTL_Prefetch(index,addr))请求FTL加速电路预加载FTL表项A(310)。为请求FTL加速电路预加载FTL表项A,CPU还告知FTL加速电路用于索引FTL表项A的索引(index),从而在FTL加速电路加载了FTL表项A后,CPU通过索引index可从FTL加速电路快速获取FTL表项A。FTL加速电路会将获取到的FTL表项A存储在由索引(index)寻址的FTL表项数据存储部件与FTL表项地址存储部件中。
CPU请求FTL加速电路预加载FTL表项A的操作,以异步方式执行。CPU发出该请求后,无需等待FTL加速电路返回执行结果,而继续执行其他处理(320)。从而在FTL加速电路从主存(例如DRAM)读取FTL表项A的过程中,CPU的处理能力能得到有效利用。
FTL加速电路响应于CPU发出的预加载FTL表项A的请求,使用地址addr从主存读取数据,作为FTL表项A(315)。FTL加速电路以异步方式响应CPU发出的预加载FTL表项A的请求,在收到FTL表项A预加载请求后,从主存获得FTL表项A之前,即向CPU指示预加载请求处理完成。
在一个例子中,CPU还告知FTL加速电路所请求的FTL表项A的长度,从而FTL加速电路从主存中读取指定长度的数据。可选地,CPU还指示FTL加速电路对所请求的FTL表项A加锁,而FTL加速电路从主存获取FTL表项A时,首先请求为FTL表项A加锁,在成功加锁后,从主存读取FTL表项A。
一段时间后,CPU估计FTL加速电路已经从主存取回了FTL表项A。CPU通过FTL加速电路CPU接口从FTL加速电路读取(例如FTL_Read_item)索引为index的FTL表项A(330)。在另一个例子中,FTL加速电路向CPU发送消息或中断,以指示CPU已经从主存取回了FTL表项。
在下图的例子中,在CPU从FTL加速电路读取索引为index的FTL表项A时,FTL加速电路已经从主存获得了FTL表项A,并存储在FTL加速电路的FTL表项数据存储部件中,FTL加速电路还将表项A的主存地址addr存储在FTL表项地址存储部件中,以及在FTL加速电路中存储的FTL表项A以及表项A的地址可通过索引index访问。
响应于CPU从FTL加速电路读取索引为index的FTL表项A,FTL加速电路从FTL表项数据存储部件中获取表项A并向CPU提供(335)。CPU从FTL加速电路读取索引为index的FTL表项A的操作,以同步方式执行。在CPU收到FTL加速电路提供的表项A后,才继续执行其他操作(例如,使用FTL表项A的操作)。
在另一个例子中,在CPU从FTL加速电路读取索引为index的FTL表项A时,FTL加速电路收到了从主存预加载FTL表项A的请求,但尚未从主存获得FTL表项A。由于以同步方式执行从FTL加速电路读取索引为index的FTL表项A的操作,FTL加速电路等待从主存获得FTL表项A后,将表项A存储在FTL加速电路的FTL表项数据存储部件中,并向CPU提供FTL表项A。
在依然另一个例子中,在CPU从FTL加速电路读取索引为index的FTL表项A时,FTL加速电路尚未收到从主存预加载FTL表项A的请求。FTL加速电路检查是否已向主存发出预加载指定主存地址的FTL表项A的请求;若请求尚未发出,则告知CPU所请求的FTL表项A在FTL加速部件中不存在。可选地,FTL加速电路检查是否已向主存发出预加载指定主存地址的FTL表项A的请求;若请求尚未发出,FTL加速电路向主存发出预加载指定主存地址的FTL表项A的请求,并等待从主存获得FTL表项A后,将表项A存储在FTL加速电路的FTL表项数据存储部件中,并向CPU提供FTL表项A。
在另一个实施例中,为充分利用FTL加速电路的预加载能力,CPU向FTL加速电路发出多个预加载请求,以请求FTL加速电路预加载多个(例如m个,m是正整数)FTL表项。在发出m个预加载请求后,最初请求预加载的FTL表项A已经被FTL加速电路从主存取回,从而CPU紧接着发出FTL表项读请求,FTL加速电路能够立刻向CPU提供所读取的FTL表项A。
(2)更新FTL表项(图4A)
在处理一些IO请求(例如写请求)时,需要为逻辑地址分配新的对应物理地址,并更新FTL表项(例如表项A)。图4A展示了根据本发明实施例更新FTL表项的流程。
为更新FTL表项A,CPU通过根据本发明的实施例从主存中获取FTL表项A,并存储在FTL加速电路的FTL表项数据存储部件中。
接下来,CPU为FTL表项A分配了新的物理地址。为将更新了物理地址的FTL表项A写入主存,CPU通过FTL加速电路CPU接口向FTL加速电路写入索引为index的FTL表项A(包含新分配的物理地址)(410)。响应于CPU向FTL加速电路写入(FTL_Write_item(index,item))索引为index的FTL表项A,FTL加速电路在FTL表项数据存储部件中更新索引为index的表项数据(415)。CPU向FTL加速电路写入索引为index的FTL表项A的操作,以同步方式执行。
接下来CPU可以执行其他处理(420)。
在一个例子中,CPU还通过FTL加速电路CPU接口请求FTL加速电路将索引为index的FTL表项刷写到主存(FTL_Flush_entry(index))。响应于CPU请求FTL加速电路将索引为index的FTL表项刷写到主存,FTL加速电路基于表项A的索引index,从FTL表项地址存储部件获取表项A的主存地址,从FTL表项数据存储部件获取表项A的内容,并通过主存接口向主存发出写请求。CPU请求FTL加速电路将索引为index的FTL表项刷写到主存的操作,可以以异步方式执行,使得FTL加速电路向主存刷写FTL表项的过程中,CPU可以执行其他处理。CPU请求FTL加速电路将索引为index的FTL表项刷写到主存的操作,也可以同步方式执行,在FTL加速电路将FTL表项刷写到主存后,才向CPU指示FTL表项刷写请求完成。可选地,FTL加速电路组合多个FTL表项,并在一次主存更新请求中将多个FTL表项写入主存。
在另一个例子中,CPU还通过FTL加速电路CPU接口请求FTL加速电路将所有“脏”的FTL表项刷写到主存(FTL_Flush_entry)。“脏”的FTL表项指已被加载到FTL表项存储部件中、已被更新但尚未被刷写到主存中的FTL表项。
可选地,FTL加速电路还为FTL表项存储部件的每个条目维护状态,包括指示未加载FTL标目的空状态,已收到FTL条目加载请求但尚未收到FTL条目的“预加载”状态,已加载FTL条目且FTL条目未被更新的有效状态,FTL条目已被更新的“脏”状态等。
可选地,CPU还指示FTL加速电路对所更新的FTL表项A解锁。FTL加速电路向主存更新FTL表项A时,一并将主存中的FTL表项A解锁。
在另一个实施例中,CPU生成新的FTL表项而不是从主存中获取FTL表项。CPU通过FTL加速电路的CPU接口向FTL加速电路发出FTL表项更新(FTL_Write_item(index,item))请求,以将生成的FTL表项写入FTL加速电路由索引index指示的FTL表项存储部件。
图4B展示了根据本发明另一实施例更新FTL表项的流程。
为更新FTL表项A,CPU通过根据本发明的实施例从主存中获取FTL表项A,并为FTL表项A分配了新的物理地址。为将更新了物理地址的FTL表项A写入主存,CPU通过FTL加速电路CPU接口向FTL加速电路发出索引为index的FTL表项A(包含新分配的物理地址)透写请求(FTL_WriteThrough_item(intel,item))。响应于CPU向FTL加速电路发出FTL表项A透写请求,FTL加速电路在FTL表项数据存储部件中更新索引为index的表项数据。FTL加速电路还依据索引index从FTL表项地址存储部件中取得主存地址,并依据主存地址通过主存接口将新表项数据写入主存,而无需CPU干预。CPU向FTL加速电路透写索引为index的FTL表项A的操作,以异步方式执行。使得FTL加速装置更新FTL表项存储部件并将新表项数据写入主存的过程中,CPU能够执行其他处理(420)。
可选地,FTL加速电路组合多个FTL表项,并在一次主存更新请求中将多个FTL表项写入主存。
可选地,在发出FTL表项透写请求后,CPU还通过FTL加速电路CPU接口请求FTL加速电路将索引为index的FTL表项刷写到主存(FTL_Flush_entry(index))。FTL加速电路收到FTL表项刷写请求后,检查FTL表项存储单元中索引为index的FTL表项,若该FTL表项已被写入主存,则直接向CPU指示FTL表项刷写请求完成;若该FTL表项尚未被写入主存,则等待将该FTL表项写入主存后才向CPU指示FTL表项刷写请求完成。
应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。
这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作操作,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的操作。
因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的操作的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或操作的、基于硬件的专用计算机***实现,或由专用硬件和计算机指令的组合实现。
虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本发明的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本发明的范围。
这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本发明的很多修改和其他实施方式。因此,应该理解,本发明不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。
Claims (10)
1.一种用于访问FTL的装置,包括FTL表项地址存储部件,FTL表项数据存储部件,CPU接口以及主存接口,FTL表项地址存储部件存储多个FTL表项地址;FTL表项数据存储部件存储多个FTL表项数据;其中由相同的索引在FTL表项地址存储部件与FTL表项数据存储部件中分别访问FTL表项地址以及与其相关联的FTL表项数据,FTL表项地址是与其相关联的FTL表项数据在主存中的存储地址;
响应于CPU接口接收对指定地址的FTL表项的预加载请求,通过主存接口从主存获取FTL表项,所述预加载请求还指定第一索引,第一索引指示指定地址的FTL表项在FTL表项数据存储部件中的存储位置;
响应于CPU接口接收对第一索引的FTL表项的读请求,通过CPU接口向CPU提供FTL表项。
2.根据权利要求1所述的用于访问FTL的装置,其中
接收对指定地址的FTL表项的预加载请求后,所述用于访问FTL的装置以异步方式处理所述加载请求;以及
接收对第一索引的FTL表项的读请求后,所述用于访问FTL的装置以同步方式处理所述读请求。
3.根据权利要求1-2之一所述的用于访问FTL的装置,其中
接收对第一索引的FTL表项的读请求后,若指定地址的FTL表项不存在于所述FTL表项数据存储部件中,还等待从主存将指定地址的FTL表项加载到所述FTL表项数据存储部件中。
4.根据权利要求1-3之一所述的用于访问FTL的装置,其中
所述通过主存接口从主存获取FTL表项还包括:
对主存指定地址的FTL表项加锁。
5.一种用于访问FTL的装置,包括FTL表项地址存储部件,FTL表项数据存储部件,CPU接口以及主存接口,FTL表项地址存储部件存储多个FTL表项地址;FTL表项数据存储部件存储多个FTL表项数据;其中由相同的索引在FTL表项地址存储部件与FTL表项数据存储部件中分别访问FTL表项地址以及与其相关联的FTL表项数据,FTL表项地址是与其相关联的FTL表项数据在主存中的存储地址;
响应于CPU接口接收对第一索引的FTL表项的更新请求,更新FTL表项数据存储部件中由第一索引指示的FTL表项数据;
响应于CPU接口接收对第一索引的FTL表项的刷写请求,按由第一索引指定的FTL表项地址将由第一索引指定的FTL表项数据通过主存接口写入主存。
6.根据权利要求5所述的用于访问FTL的装置,其中
接收FTL表项更新请求后,所述用于访问FTL的装置以同步方式处理所述FTL表项更新请求;
接收FTL表项刷写请求后,所述用于访问FTL的装置以异步方式处理所述FTL表项刷写请求。
7.根据权利要求6所述的用于访问FTL的装置,其中
响应于接收FTL表项刷写请求,还检测指定的FTL表项是否已被写入主存,在将指定的FTL表项写入主存后,通过CPU接口指示所述FTL表项刷写请求的处理完成。
8.根据根据权利要求5-7之一所述的用于访问FTL的装置,其中
响应于CPU接口接收对指定地址的FTL表项的预加载请求,通过主存接口从主存获取FTL表项,所述预加载请求还指定第一索引,第一索引指示指定地址的FTL表项在FTL表项数据存储部件中的存储位置;
响应于CPU接口接收对第一索引的FTL表项的读请求,通过CPU接口向CPU提供FTL表项。
9.一种访问FTL的方法,包括:
发出对指定地址的FTL表项的预加载请求,以将指定的FTL表项加载到FTL表项存储部件由第一索引指示的存储位置;以及
发出对第一索引的FTL表项的读请求,以从FTL表项存储部件获取第一索引的FTL表项。
10.根据权利要求9所述的访问FTL的方法,还包括:
发出对第一索引的FTL表项的更新请求,以更新FTL表项存储部件中的由第一索引所指示的FTL表项;以及
发出对第一索引的FTL表项的刷写请求,以将FTL表项存储部件中由第一索引指示的FTL表项写入主存。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610346104.7A CN107423232B (zh) | 2016-05-24 | 2016-05-24 | Ftl快速访问方法与装置 |
CN202010915810.5A CN112035382A (zh) | 2016-05-24 | 2016-05-24 | 低延迟访问ftl的方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610346104.7A CN107423232B (zh) | 2016-05-24 | 2016-05-24 | Ftl快速访问方法与装置 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010915810.5A Division CN112035382A (zh) | 2016-05-24 | 2016-05-24 | 低延迟访问ftl的方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107423232A true CN107423232A (zh) | 2017-12-01 |
CN107423232B CN107423232B (zh) | 2020-10-16 |
Family
ID=60422372
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610346104.7A Active CN107423232B (zh) | 2016-05-24 | 2016-05-24 | Ftl快速访问方法与装置 |
CN202010915810.5A Pending CN112035382A (zh) | 2016-05-24 | 2016-05-24 | 低延迟访问ftl的方法与装置 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010915810.5A Pending CN112035382A (zh) | 2016-05-24 | 2016-05-24 | 低延迟访问ftl的方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN107423232B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109918316A (zh) * | 2019-02-26 | 2019-06-21 | 深圳忆联信息***有限公司 | 一种减少ftl地址映射空间的方法及其*** |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043727A (zh) * | 2009-10-10 | 2011-05-04 | 成都市华为赛门铁克科技有限公司 | 恢复固态硬盘映射表的方法及其装置 |
CN103049397A (zh) * | 2012-12-20 | 2013-04-17 | 中国科学院上海微***与信息技术研究所 | 一种基于新型存储器的固态硬盘内部缓存管理方法及*** |
CN104166634A (zh) * | 2014-08-12 | 2014-11-26 | 华中科技大学 | 一种固态盘***中的映射表缓存管理方法 |
CN104268095A (zh) * | 2014-09-24 | 2015-01-07 | 上海新储集成电路有限公司 | 一种存储器及基于该存储器进行数据读/写操作的方法 |
US20150019794A1 (en) * | 2013-07-09 | 2015-01-15 | SK Hynix Inc. | Data storage device and operating method thereof |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2189895A1 (en) * | 2008-11-24 | 2010-05-26 | Deutsche Thomson OHG | Flash based memory comprising a Flash translation layer and method for storing a file therein |
US9239793B2 (en) * | 2011-12-13 | 2016-01-19 | Ati Technologies Ulc | Mechanism for using a GPU controller for preloading caches |
CN105205009B (zh) * | 2015-09-30 | 2018-05-11 | 华为技术有限公司 | 一种基于大容量固态存储的地址映射方法及装置 |
-
2016
- 2016-05-24 CN CN201610346104.7A patent/CN107423232B/zh active Active
- 2016-05-24 CN CN202010915810.5A patent/CN112035382A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043727A (zh) * | 2009-10-10 | 2011-05-04 | 成都市华为赛门铁克科技有限公司 | 恢复固态硬盘映射表的方法及其装置 |
CN103049397A (zh) * | 2012-12-20 | 2013-04-17 | 中国科学院上海微***与信息技术研究所 | 一种基于新型存储器的固态硬盘内部缓存管理方法及*** |
US20150019794A1 (en) * | 2013-07-09 | 2015-01-15 | SK Hynix Inc. | Data storage device and operating method thereof |
CN104166634A (zh) * | 2014-08-12 | 2014-11-26 | 华中科技大学 | 一种固态盘***中的映射表缓存管理方法 |
CN104268095A (zh) * | 2014-09-24 | 2015-01-07 | 上海新储集成电路有限公司 | 一种存储器及基于该存储器进行数据读/写操作的方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109918316A (zh) * | 2019-02-26 | 2019-06-21 | 深圳忆联信息***有限公司 | 一种减少ftl地址映射空间的方法及其*** |
CN109918316B (zh) * | 2019-02-26 | 2021-07-13 | 深圳忆联信息***有限公司 | 一种减少ftl地址映射空间的方法及其*** |
Also Published As
Publication number | Publication date |
---|---|
CN107423232B (zh) | 2020-10-16 |
CN112035382A (zh) | 2020-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107870867A (zh) | 32位cpu访问大于4gb内存空间的方法与装置 | |
CN107066393B (zh) | 提高地址映射表中映射信息密度的方法 | |
CN104346294B (zh) | 基于多级缓存的数据读/写方法、装置和计算机*** | |
CN104115133B (zh) | 用于复合非易失性存储设备的数据迁移的方法、***和设备 | |
CN103544269B (zh) | 目录的存储方法、查询方法及节点控制器 | |
US11210020B2 (en) | Methods and systems for accessing a memory | |
US9208088B2 (en) | Shared virtual memory management apparatus for providing cache-coherence | |
KR20180128489A (ko) | 오브젝트 태그된 메모리 모니터링 방법 및 프로세싱 장치 | |
JP6478843B2 (ja) | 半導体装置及びキャッシュメモリ制御方法 | |
CN107315694B (zh) | 一种缓存一致性管理方法及节点控制器 | |
EP3553665B1 (en) | Non-volatile memory access method, device, and system | |
CN105095113B (zh) | 一种缓存管理方法和*** | |
CN107273397A (zh) | 用于有效的存储器在线重复删除应用的虚拟桶多哈希表 | |
CN108595349A (zh) | 大容量存储设备的地址转换方法与装置 | |
CN108664213A (zh) | 基于分布式缓存的原子写命令处理方法与固态存储设备 | |
CN108228470A (zh) | 一种处理向nvm写入数据的写命令的方法和设备 | |
US9063667B2 (en) | Dynamic memory relocation | |
CN113934655A (zh) | 解决高速缓冲存储器地址二义性问题的方法和装置 | |
CN106776361B (zh) | 一种面向大规模非易失性存储介质的缓存方法和*** | |
CN107423232A (zh) | Ftl快速访问方法与装置 | |
CN109840048A (zh) | 存储命令处理方法及其存储设备 | |
CN108664212A (zh) | 固态存储设备的分布式缓存 | |
CN108664214A (zh) | 用于固态存储设备的分布式缓存的掉电处理方法与装置 | |
CN107870870A (zh) | 访问超过地址总线宽度的内存空间 | |
KR20200088391A (ko) | 공통 메모리 페이지로부터 메모리로의 캐시 라인들의 린싱 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |