首页 / FTL加速器及控制部件

FTL加速器及控制部件有效专利 实用

技术领域

[0001] 本申请涉及存储技术,特别地,涉及FTL加速器及控制部件。

相关背景技术

[0002] 参看图1,展示了存储设备的框图。存储设备102同主机相耦合,用于为主机提供存储能力。主机同存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、SCSI(Small Computer System Interface,小型计算机系统接口)、SAS(Serial Attached SCSI,串行连接SCSI)、IDE(Integrated Drive Electronics,集成驱动器电子)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component Interconnect Express,PCIe,高速外围组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM(非易失存储器,Non‑Volatile Memory)芯片105以及以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)110。
[0003] NAND闪存、相变存储器、FeRAM(Ferroelectric RAM,铁电存储器)、MRAM(Magnetic Random Access Memory,磁阻存储器)、RRAM(Resistive Random Access Memory,阻变存储器)、XPoint 存储器等是常见的NVM。
[0004] 接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。
[0005] 控制部件104用于控制在接口108、NVM芯片105以及DRAM 110之间的数据传输,还用于存储管理、主机逻辑地址到NVM芯片的物理地址映射、擦除均衡、坏块管理等。控制部件104可通过软件、硬件、固件或其组合的多种方式实现,例如,控制部件104可以是FPGA (Field‑programmable gate array,现场可编程门阵列)、ASIC(Application Specific Integrated Circuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理IO(Input/Output) 命令。控制部件104还可以耦合到DRAM 140,并可访问DRAM 110的数据。在DRAM存储FTL表和/或缓存的IO命令的数据。
[0006] 控制部件104包括闪存接口控制器(或称为介质接口、介质接口控制器、闪存通道控制器),闪存接口控制器耦合到NVM芯片105,并以遵循NVM芯片105的接口协议的方式向NVM芯片105 发出命令,以操作NVM芯片105,并接收从NVM芯片105输出的命令执行结果。已知的NVM芯片接口协议包括“Toggle”、“ONFI”等。
[0007] NVM存储介质上通常按页来存储和读取数据。而按块来擦除数据。NVM存储介质上的块(也称物理块)包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。
[0008] 在存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。可选地,访问存储设备的主机提供FTL。
[0009] 存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表(也称为L2P表)。通常 FTL表的数据项记录了存储设备中以指定大小的存储单元为单位(例如,512字节、
2KB、4KB等) 的地址映射关系。
实用新型内容
[0010] 随着存储设备的容量增加,为了记录更多的存储单元,FTL表的尺寸随之增加,进而需要占用更大的存储器来容纳FTL表。为了寻址更新的存储单元,FTL表的每个条目的尺寸也需要增加。例如,32比特大小的FTL表条目能寻址2^32个数据单元。若每个数据单元大小为4KB,2^32个数据单元对应16TB存储容量,相应地FTL表自身的大小为16GB,需要占据至少16GB存储器空间。而存储设备具有多种容量,例如,提供给用户的存储设备的容量是例如4TB,那么FTL表自身的大小可以为4GB。然而,为了提供4TB存储空间,若每个数据单元为
4KB,那么FTL表需要管理的数据单元数量为2^30个,对应的FTL表的每个条目仅需30比特大小,进而FTL表的大小为30*2^30比特(和3.75GB,小于4GB)。但是,受到存储器芯片与CPU寻址方式的限制,CPU 寻址通道以32比特或字节的整数倍为一次寻址的数据宽度,存储器芯片也通常以字节的整数倍为数据宽度。从而若FTL表的条目大小为例如30比特,虽然减少了FTL表的整体大小,但其中跨字节边界的条目却需要例如2次或更多次总线访问或存储器访问才能加载到CPU,从而显著增加了加载FTL表条目的时间,限制了存储设备的性能。
[0011] 为了在提供多种容量的存储设备时,减低FTL表占据的存储器空间大小,并且减少或消除非字节对齐的FTL表条目对CPU或芯片内的其他设备访问FTL表条目的影响,根据本申请的实施例,提供了压缩的FTL表。所提供的压缩的FTL表的条目大小可以不是字节的整数倍。并且压缩的 FTL表条目在存储器中被紧密排列而无需为按字节对齐而在条目之间留有未被使用的存储器空间。以及根据本申请的实施例还希望CPU或其他设备以其既有方式按字节对齐或按字节整数倍对齐的方式访问FTL表,从而消除因使用压缩的FTL表对CPU或其他设备造成的影响。还希望以硬件加速器处理对FTL表的方法,以分担执行软件访问FTL表为CPU引入的负担并提升FTL表访问性能。
[0012] 根据本申请的第一方面,提供了根据本申请第一方面的第一FTL加速器,包括读地址计算单元、读数据选择单元、读地址发送单元与读数据接收单元;读地址计算单元根据要读取的逻辑 FTL表的条目的索引(L)计算同要访问的逻辑FTL表的条目对应的物理FTL表的条目的地址,其中逻辑FTL表的条目大小为M比特,物理FTL表的条目大小为N比特,M与N为正整数,且M>N,以及其中逻辑FTL表的条目同物理FTL表的条目一一对应;读地址计算单元同读地址发送单元耦合,读地址发送单元用读地址计算单元提供的地址访问存储器;读数据接收单元接收存储器提供的数据,并提供给读数据选择单元;读地址计算单元还向读数据选择单元指示从存储器读出的数据中属于要访问的物理FTL表的条目的部分;读数据选择单元根据读地址计算单元指示的从存储器读出的数据中获取属于要访问的物理FTL表的条目的部分,以及扩展要访问的物理FTL表的条目得到要访问的逻辑FTL表的条目。
[0013] 根据本申请第一方面的第一FTL加速器,提供了根据本申请第一方面的第二FTL加速器,还包括:读地址缓存单元与读数据缓存单元;读地址缓存单元存储要访问的逻辑FTL表的条目的索引(L);读数据缓存单元存储要访问的逻辑FTL表的条目;读地址计算单元耦合读地址缓存单元,从读地址缓存单元获取索引(L);读数据选择单元把从存储器读出的数据中属于要访问的物理FTL表的条目的部分存储在读数据缓存;读数据缓存中存储的要访问的物理FTL表的条目被扩展为要访问的逻辑FTL表的条目的大小,以得到要访问的逻辑FTL表的条目。
[0014] 根据本申请第一方面的第一或第二FTL加速器,提供了根据本申请第一方面的第三FTL加速器,其中所述读地址计算单元根据所述索引(L)计算的同要访问的逻辑FTL表的条目对应的物理FTL表的条目的地址,是物理FTL表的存储空间中,以字节地址 的第N mod 8比特开始的存储了N比特数据的一个或多个字节的地址。
[0015] 根据本申请第一方面的第一至第三FTL加速器之一,提供了根据本申请第一方面的第四FTL 加速器,其中若N mod 8为0,则所述读地址计算单元根据所述索引(L)计算的同要访问的逻辑FTL表的条目对应的物理FTL表的条目的地址,为以字节地址 的第N mod 8比特开始的 个字节的地址;若L*N mod 8不为0,且(N mod 8)–(8‑L*N mod 8)<=0,则所述读地址计算单元根据所述索引(L)计算的同要访问的逻辑FTL表的条目对应的物理FTL表的条目的地址,为以字节地址 的第N mod 8比特开始 个字节的地址;若L*N mod 8 不为0,且(N mod 8)–(8‑L*N mod 8)>0,则所述读地址计算单元根据所述索引(L)计算的同要访问的逻辑FTL表的条目对应的物理FTL表的条目的地址,为以字节地址 的第N mod 8比特开始 个字节的地址。
[0016] 根据本申请第一方面的第一至第四FTL加速器之一,提供了根据本申请第一方面的第五FTL 加速器,其中若N mod 8为0,则读地址计算单元向读数据选择单元指示的从存储器读出的数据中属于要访问的物理FTL表的条目的部分包括以字节地址 的第N mod 8比特开始的 个字节的地址的完整数据;若L*N mod 8不为0,则读地址计算单元向读数据选择单元指示的从存储器读出的数据中属于要访问的物理FTL表的条目的部分包括字节地址为L*N/8的字节的第L*N mod 8比特到最后比特;若(L+1)*N mod 8不为0,则读地址计算单元向读数据选择单元指示的从存储器读出的数据中属于要访问的物理FTL表的条目的部分包括字节地址为 (L+1)*N/8的字节的前第(L+1)*N mod 8比特。
[0017] 根据本申请第一方面的第一至第五FTL加速器之一,提供了根据本申请第一方面的第六FTL 加速器,还包括:写地址计算单元、写命令处理单元与写数据拼接单元;写地址计算单元根据要更新的逻辑FTL表的条目的索引(L)计算同要更新的逻辑FTL表的条目对应的物理FTL表的条目的地址;写数据拼接单元从要更新的逻辑FTL表的条目中获取对应的N比特的物理FTL表的条目;写命令处理单元同写地址计算单元耦合,将写数据拼接单元获取的N比特的物理FTL表的条目写入写地址计算单元提供的同要更新的逻辑FTL表的条目对应的物理FTL表的条目的地址。
[0018] 根据本申请第一方面的第六FTL加速,提供了根据本申请第一方面的第七FTL加速器,其中,写地址计算单元还根据要更新的逻辑FTL表的条目的索引(L)计算要从物理FTL表中读出的一个或二个地址,并将所述要从物理FTL表中读出的一个或二个地址提供给写命令处理单元;写命令处理单元根据所述要从物理FTL表中读出的一个或二个地址从存储器读取数据;写地址计算单元还向写数据选择单元指示从存储器读出的数据中不属于要更新的物理FTL表的条目的部分;写数据选择单元根据写地址计算单元指示从存储器读出的数据中获取不属于要更新的物理FTL表的条目的部分,并将从存储器读出的数据中获取的不属于要更新的物理FTL表的条目的部分提供给所述写数据拼接单元;所述写数据拼接单元将从要更新的逻辑FTL表的条目中获取的对应的N 比特的物理FTL表的条目同写数据选择单元提供的从存储器读出的数据中获取的不属于要更新的物理FTL表的条目的部分拼接;写命令处理单元,将写数据拼接单元提供的N比特的物理FTL 表的条目与从存储器读出的数据中获取的不属于要更新的物理FTL表的条目的部分写入写地址计算单元提供的同要更新的逻辑FTL表的条目对应的物理FTL表的条目的地址。
[0019] 根据本申请第一方面的第六或第七FTL加速器,提供了根据本申请第一方面的第八FTL加速器,其中若N mod 8为0,则所述写地址计算单元根据索引(L)计算的物理FTL表的条目的地址,为以字节地址 的第N mod 8比特开始的 个字节的地址;若L*N mod 8不为0,且(N mod 8)–(8‑L*N mod 8)<=0,则所述写地址计算单元根据索引(L)计算的物理FTL 表的条目的地址,为以字节地址 的第N mod 8比特开始 个字节的地址;若L*N mod 8不为0,且(N mod 8)–(8‑L*N mod 8)>0,则所述写地址计算单元根据索引(L)计算的物理FTL表的条目的地址,为以字节地址 的第N mod 8比特开始个字节的地址。
[0020] 根据本申请第一方面的第七或第八FTL加速器,提供了根据本申请第一方面的第九FTL加速器,其中若L*N mod 8不为0,则写地址计算单元向写数据选择单元指示的从存储器读出的数据中不属于要更新的物理FTL表的条目的部分,包括字节地址为L*N/8的字节的前L*N mod 8比特;若(L+1)*N mod 8不为0,则写地址计算单元向写数据选择单元指示的从存储器读出的数据中不属于要更新的物理FTL表的条目的部分,包括字节地址为(L+1)*N/8的字节的第(L+1)*N mod 8 比特到最后的比特。
[0021] 根据本申请第一方面的第六至第九FTL加速器之一,提供了根据本申请第一方面的第十FTL 加速器,还包括写地址发送单元;所述写命令处理单元包括读地址生成单元与写地址生成单元;读地址生成单元用所述要从物理FTL表中读出的一个或二个地址,通过所述读地址发送单元从存储器读取数据;所述读数据接收单元接收从存储器读取的数据;写地址生成单元通过所述写地址发送单元发送写地址计算单元提供的同要更新的逻辑FTL表的条目对应的物理FTL表的条目的地址。
[0022] 根据本申请第一方面的第一至第十FTL加速器之一,提供了根据本申请第一方面的第十一 FTL加速器,还包括:主设备接口,用于耦合总线;读地址发送单元将读地址通过主设备接口发送到总线;读数据接收单元通过所述主设备接口从总线获取所读取的数据;写地址发送单元将写地址通过所述主设备接口发送到总线;写数据发送单元将要写入的数据通过所述主设备接口发送到总线。
[0023] 根据本申请第一方面的第一至第十一FTL加速器之一,提供了根据本申请第一方面的第十二 FTL加速器,还包括:从设备接口,用于耦合总线;读地址缓存存储通过从设备接口获取的要读取的逻辑FTL表的条目的索引(L);读数据缓存存储要通过从设备接口发送的要读取的逻辑FTL 表的条目;写地址缓存存储通过从设备接口获取的要写入的逻辑FTL表的条目的索引(L);写数据缓存存储通过从设备接口获取的要写入的逻辑FTL表的条目。
[0024] 根据本申请的第二方面,提供了根据本申请第二方面的第一控制部件,包括:第一主设备、FTL加速器、存储器控制器与总线;所述FTL加速器通过主设备接口耦合所述总线;所述存储器控制器通过从设备接口和所述总线,所述存储器控制器还耦合存储器;所上述FTL加速器是根据本申请第一方面的第一至第十二之一的FTL加速器。
[0025] 根据本申请第二方面的第一控制部件,提供了根据本申请第二方面的第二控制部件,其中所述第一主设备向所述FTL加速器提供要读取的逻辑FTL表的条目的索引(L);所述FTL加速器响应于所述第一主设备提供的索引(L),通过主设备接口访问所述存储器中的物理FTL表的同索引(L)对应的条目。
[0026] 根据本申请第二方面的第二控制部件,提供了根据本申请第二方面的第三控制部件,其中所述FTL加速器通过主设备接口获取访问所述存储器得到的物理FTL表的同索引(L)对应的条目,并生成逻辑FTL表的同索引(L)对应的条目提供给所述第一主设备。
[0027] 根据本申请第二方面的第一至第三控制部件之一,提供了根据本申请第二方面的第四控制部件,其中所述FTL加速器还通过从设备接口耦合所述总线;所述第一主设备用索引(L)访问第一地址空间;所述总线根据第一地址空间将所述第一主设备提供的索引(L)通过从设备接口转发给所述FTL加速器;所述总线将所述第一主设备对第二地址空间的访问转发给所述存储器控制器。
[0028] 根据本申请第二方面的第一至第三控制部件之一,提供了根据本申请第二方面的第五控制部件,其中所述第一主设备直接耦合所述FTL加速器;所述第一主设备根据索引(L)位于第一地址空间而直接将索引(L)提供给所述FTL加速器;所述第一主设备将对第二地址空间的访问发送给所述总线;所述总线根据第二地址空间将对第二地址空间的访问转发给所述存储器控制器。
[0029] 根据本申请第二方面的第一至第五控制部件之一,提供了根据本申请第二方面的第六控制部件,其中所述第一主设备是CPU。

具体实施方式

[0041] 下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0042] 图2A展示了根据本申请实施例的逻辑FTL表与物理FTL表的示意图。
[0043] 根据本申请的实施例,提供了逻辑FTL表与物理FTL表。逻辑FTL表是访问FTL表的设备所感知的FTL表。访问FTL表的设备是例如CPU或控制部件(也参看图1,控制部件104)的其他总线设备。物理FTL表是在存储器(例如,图1的DRAM 104)中存储的FTL表。
[0044] 作为举例,逻辑FTL表与物理FTL表各自包括多个条目,由逻辑地址(记为LBA)寻址FTL 表的条目。逻辑FTL表与物理FTL表的条目一一对应,因而具有相同数量的条目,将逻辑FTL 表与物理FTL表各自的条目数量记为MaxLBA,而逻辑FTL表的条目大小为M比特,物理FTL表的条目大小为N比特,其中M与N均为正整数。
[0045] 可选地,为了便于例如CPU访问逻辑FTL表,M的大小是例如8或32的整数倍,从而逻辑 FTL表的条目按字节或DWORD(双字)对齐。参看图2A,从访问逻辑FTL表的CPU看来,逻辑FTL 表包括MaxLBA个条目,每个条目大小为M比特(图2A的例子中,M=64),而逻辑FTL表的各个条目在存储空间中首尾相接依次排列,用逻辑地址(LBA)索引逻辑FTL表的存储空间得到对应的FTL表条目。FTL表的条目中记录的是用于NVM芯片的地址(称为物理地址,记为PBA)。由于逻辑FTL表条目是按字节或DWORD(双字)对齐的,从而其每个条目在存储空间中的起始地址均位于字节或双字的起始位置,条目的结尾位于字节或双字的结束位置。在图2A的例子中,根据逻辑地址(LBA)为索引,CPU访问FTL表的对应条目时,以例如LBA*8得到FTL表的对应条目的地址(64比特对应8字节)。
[0046] 而对于物理FTL表,每个条目的大小是N比特,N是小于M的任意正整数。根据FTL表条目寻址NVM芯片提供的数据单元数量,确定N的值。例如,为了寻址2^30个数据单元,那么N为 30。一般地,若物理FTL表的条目能寻址2^n个数据单元之一,那么N=n。作为举例,图2A中, N=33。物理FTL表中,各条目首尾相接地存储在存储器提供的存储空间中。从而一些条目的起始位置和/或结束位置不位于字节的边界。
[0047] 图2B展示了根据本申请实施例的压缩FTL表在存储器中的示意图。
[0048] 作为举例,压缩FTL表在存储器的0地址开始存储。存储器的位宽为例如64比特,即一次从存储器读出例如64比特(8字节)数据。压缩FTL表的各条目在存储器中首尾相接地连续存储,相邻条目之间没有未被使用的存储空间,从而条目的起始地址和/或结尾地址非位于存储空间的字节边界。
[0049] 图2B中,形如PBA(i)的标记代表了压缩FTL表的条目之一(其值为FTL表的第i个物理地址(PBA),i为例如整数)。参看图2B,从存储器的0字节地址开始的33比特存储压缩FTL 表条目,其值为PBA(0),从存储器0字节地址开始的34比特到64比特存储了压缩FTL表条目 PBA(1)的前31比特,而压缩FTL表条目PBA(1)的其余2比特存储在存储器的8字节地址开始的位置。接下来,压缩FTL表条目PBA(2)存储在存储器8字节地址开始的3比特到35比特位置,压缩FTL表条目PBA(3)的前29比特存储在存储器8字节地址开始的36比特到64比特,压缩FTL 表条目PBA(4)的余下4比特存储在存储器12字节地址开始的位置,压缩FTL表条目PBA(5)存储在存储器12字节地址开始的5比特到37比特,以及接下来是压缩FTL表条目PBA(6)。
[0050] 从而,物理FTL表的一个或多个条目在存储器中不是按字节边界对齐的,或者不是按存储器的读数据位宽对齐的。因而物理FTL表在存储器中所占据的存储空间,小于CPU感知的逻辑FTL 表大小。
[0051] 根据本申请的实施例,CPU以逻辑地址LBA为索引访问逻辑FTL表,而FTL加速器根据逻辑地址LBA计算在物理FTL表中对应的条目在存储器中的地址,并通过一次或多次存储器访问获取要访问的FTL表的条目以响应CPU对逻辑FTL表的访问。
[0052] 根据本申请的实施例,由LBA索引的逻辑FTL表的条目,计算对应条目在物理FTL表中相对于物理FTL表的起始地址的存储位置:若LBA*Nmod 8为0(mod表示求模操作),那么物理FTL 表中的对应条目存储在字节地址LBA*N/8位置开始的N比特存储空间中,该N比特存储空间占据N/8或N/8+1个字节;若LBA*N mod8不为0,那么物理FTL表中的对应条目存储在字节地址 LBA*/8位置之后LBA*Nmod 8比特开始的N比特存储空间中,该N比特存储空间占据N/8+1或 N/8+2个字节。例如,若LBA*Nmod 8不为0,且(N mod 8)–(8‑LBA*N mod 8)<=0,对应的该N比特存储空间占据的字节数为N/8(向下取整)+1;若LBA*Nmod 8不为0,且(N mod 8)– (8‑LBA*N mod 8)>0,对应的该N比特存储空间占据的字节数为N/8(向下取整)+2。
[0053] 图3展示了根据本申请实施例的包括FTL加速器的控制部件的框图。
[0054] 控制部件包括例如CPU、介质接口控制器(NF I)、FTL加速器与存储器控制器。CPU、介质接口控制器(NF I)、FTL加速器和/或存储器控制器例如通过总线耦合。控制部件还耦合外部的存储器(图3的DRAM),存储器控制器用于访问外部存储器。可选地,总线的各设备被分配了总线上的地址空间。从而总线的访问请求所访问的地址,总线将访问请求转发给同所访问地址对应的设备。例如,FTL加速器被分配0‑8GB总线地址空间,存储器控制器被分配16GB‑32GB总线地址空间,而NF I被分配例如8GB开始1MB地址空间。在CPU看来,FTL加速器所占据的0‑8GB 地址空间中容纳了逻辑FTL表。而物理FTL表则被容纳在存储器控制器所占据的16GB‑32GB总线地址空间中。CPU访问0‑8GB总线地址空间的访问请求被总线转发给FTL加速器处理,而CPU访问16GB‑32GB总线地址空间的请求被总线转发给存储器控制器处理。
[0055] 根据本申请的实施例,FTL加速器包括从设备接口与主设备接口。FTL加速器通过从设备接口与主设备接口分别耦合到总线。从而控制部件的一个或多个设备(例如CPU、NF I)得以通过从设备接口访问FTL加速器,将FTL加速器作为总线从设备访问,而FTL加速器得以通过主设备接口作为主设备访问控制部件的一个或多个设备(例如存储器控制器)。
[0056] 作为举例,CPU看来,逻辑FTL表位于指定的存储空间中,例如,从0字节开始8GB的存储空间,逻辑FTL表的每个条目大小是M=64比特(8字节)。物理FTL表的每个条目大小是N=33 比特。
[0057] 因而,CPU通过向总线发出对逻辑FTL表的条目(索引为LBA)的访问请求(图3中,由(1) 指示),所访问的地址为LBA*8,长度为8字节。总线根据来自CPU的存储空间访问请求所指示的地址范围在0到8GB而将该访问请求发送给FTL加速器处理。总线将该访问请求通过FTL加速器的从设备接口提供给FTL加速器(图3中,由(2)指示)。FTL加速器根据接收的该访问中指示的地址(LBA*8)确定对应的33比特条目在物理FTL表中的存储位置,并通过其主设备接口通过总线向存储器控制器发出1个或多个存储器访问请求来从DRAM中获取33比特的物理FTL 表的条目(图3中,由(3)指示)。FTL加速器通过其主设备接口将访问请求发送给总线,而总线根据总线请求所访问的地址范围在例如16GB到32GB而将访问请求发送给存储器控制器处理 (图3中,也由(3)指示)。从而存储器控制器在总线上的地址空间范围的起始地址为16GB, FTL加速器确定的33比特条目在物理FTL表中的存储位置还要附加存储器控制器在总线上的地址空间范围的例如16GB的偏移值。存储器控制器响应请求来自FTL加速器的访问请求,访问DRAM,并通过FTL加速器的主设备接口向FTL加速器提供访问请求的处理结果。FTL加速器根据存储器控制器提供的处理结果,通过其从设备接口向CPU完成其对逻辑FTL表的条目的访问(图3中,由(4)指示)。例如,CPU要读取逻辑FTL表条目,则FTL加速器根据逻辑FTL表条目的大小向CPU提供64比特的条目以响应其访问请求。可以理解地,DRAM中记录的物理FTL表的条目大小为例如33比特,FTL加速器对从DRAM获取的33比特条目填充数据,并向CPU提供64比特的条目。
[0058] 而对DRAM的访问是按字节对齐的,FTL加速器为访问物理FTL表的条目而访问DRAM的多个字节,这些字节的部分比特不属于要访问的物理FTL表的条目。FTL加速器还要避免这些不属于要访问的物理FTL表的条目的比特被破坏。
[0059] 图4展示了根据本申请实施例的FTL加速器的框图。
[0060] FTL加速器包括写地址缓存、写数据缓存、读地址缓存、读数据缓存、写地址计算单元、写数据拼接单元、读地址计算单元、读数据选择单元、写命令处理单元、写数据拼接单元、读地址发送单元、写地址发送单元、读数据接收单元与写数据发送单元。以及FTL加速器还包括从设备接口与主设备接口。从设备接口与主设备接口各自耦合到总线。
[0061] FTL加速器的写地址缓存、写数据缓存、写地址计算单元、写数据拼接单元、写命令处理单元、写数据选择单元、写地址发送单元与写数据发送单元,用于处理对逻辑FTL表的更新请求。 FTL加速器的读地址缓存、读数据缓存、读地址计算单元、读数据选择单元、读地址发送单元与读数据接收单元用于处理对逻辑FTL表的读取请求。其中读地址发送单元与读数据接收单元在处理对逻辑FTL表的更新请求与读取请求中都被使用。
[0062] 写地址缓存、写数据缓存、读地址缓存与读数据缓存各自耦合从设备接口,以接收并缓存诸如CPU的其他总线主设备发送给FTL加速器的逻辑FTL表更新请求/读取请求。对于逻辑FTL表更新请求,写地址缓存中记录更新请求要访问的地址,所缓存的地址是例如用于访问逻辑FTL 表的条目的地址(例如,逻辑地址LBA)。FTL加速器被配置了物理FTL表在存储器中的起始地址,存储器的总线地址,物理FTL表的条目大小(N比特,也参看图2A)与逻辑FTL表的条目大小(M比特,也参看图2A)。写数据缓存中记录更新请求所指示的逻辑FTL表的条目。写数据缓存记录的逻辑FTL表条目的大小是例如M比特。
[0063] 作为举例,FTL表更新请求指示逻辑地址LBA与逻辑FTL表的条目E,条目E的例如前M比特同对应的物理FTL表的条目宽度相同,并需要写入物理FTL表,而条目E的其他比特将被丢弃。
[0064] 写地址计算单元,根据从写地址缓存获取的逻辑地址LBA、配置的物理FTL表条目大小N与物理FTL表在存储器中的地址,计算要更新的物理FTL表的对应于逻辑地址LBA的条目在存储器中的地址。
[0065] 若LBA*Nmod 8为0,且N mod 8为0,那么物理FTL表中的对应条目存储在字节地址LBA*N/8 位置开始的N比特存储空间中,写地址计算单元计算得到从字节地址LBA*N/8开始,连续 个字节的字节地址。这些字节的全部比特将被更新,其中 表示向上取整。若LBA*Nmod 8为 0,且N mod 8不为0,那么字节地址为(LBA+1)*N/8的字节,其仅前(LBA+
1)*N mod 8比特要被更新。
[0066] 若LBA*N mod8不为0,那么物理FTL表中的对应条目存储在字节地址LBA*N/8(向下取整) 之后LBA*Nmod 8比特开始的N比特存储空间中,该N比特存储空间占据N/8(向下取整)+1或 N/8(向下取整)+2个字节。写地址计算单元计算得到从字节地址LBA*N/8开始,连续N/8(向下取整)+1或N/8(向下取整)+2个字节的字节地址。这些字节的全部或部分比特将被更新。以及写地址计算单元也确定了存储器中存储了要被更新的物理FTL表的条目的字节数量(N/8(向下取整)+1个或N/8(向下取整)+2个)。
[0067] 写数据拼接单元将写缓存中的M比特逻辑FTL表的条目中用于物理FTL表的条目的N比特,与从物理FTL表读出的存储了要被更新的物理FTL表的条目的字节的部分比特拼接,以得到要被更新的FTL表的条目的各字节的完整内容。例如,若LBA*Nmod 8为0,那么写数据拼接单元拼接后的数据长度为LBA*N/8字节,这些数据的前N比特来自缓存的用于物理FTL表条目的N比特,可选的余下的比特来自从从物理FTL表读出的存储了要被更新的物理FTL表的条目的字节的部分比特,这部分比特在物理FTL表中的字节地址为(LBA+1)*N/8(向下取整),且位于该字节的最后8‑(LBA+1)*N mod 8比特。若LBA*N mod 8不为0,那么写数据拼接单元拼接后的数据大小为 N/8(向下取整)+1或N/8(向下取整)+2个字节,其前LBA*Nmod 8比特来自存储器中字节地址为LBA*N/8的字节的前LBA*Nmod 8比特,接下来的N比特来自缓存的用于物理FTL表条目的 N比特,以及可选地余下的比特。若(LBA*N+N)mod 8不为0,则余下的比特来自存储器中要被更新的字节(字节地址为(LBA*N+N)/8,向下取整)的最后部分比特(其最后8‑(LBA*N+N)mod 8 个比特),若(LBA*N+N)mod 8为0,则余下的比特不存在。
[0068] 可以理解地,对于物理FTL表的多种存储方式,和/或存储物理FTL表的存储器的接口宽度 (例如,按字节访问或按双字访问),写地址计算单元根据逻辑FTL表的条目的索引(逻辑地址 LBA)计算出物理FTL表的对应条目在存储器中的地址。以及写地址计算单元还计算并向写数据拼接单元指示要拼接的比特的位置。
[0069] 由于需要进行数据拼接,写命令处理单元根据写地址计算单元提供的0个、1个或2个存储了待拼接数据的字节地址从存储器中读取物理FTL表的部分数据。若LBA*N mod 8为0,且若 (LBA+1)*N mod 8为0,则无需从存储器读取物理FTL表的部分数据。若LBA*N mod 8为0,存储了待拼接数据的字节地址为(LBA*N+N)/8(向下取整),其中用于拼接的比特是其最后 8‑(LBA*N+N)mod8比特(也即8‑Nmod 8比特)。若LBA*N mod 8不为0,且(LBA*N+N)mod 
8 为0,则存储了待拼接数据的字节地址为LBA*N/8(向下取整),其中用于拼接的比特是其最前 LBA*N mod8比特。若LBA*Nmod 8不为0,且(LBA*N+N)mod 8也不为0,则存储了待拼接数据的字节地址为(LBA*N)/8(向下取整)与(LBA*N+N)/8(向下取整)(共2个字节),其中前 
1个字节的用于拼接的比特是其前面(LBA*N)mod 8个比特,而后1个字节的用于拼接的比特是其最后8‑(LBA*N+N)mod8比特。由于受到存储器接口限制,写命令处理单元要从存储器读出待拼接数据所在的完整字节。可选地,写地址计算单元向写命令处理单元指示存储了待拼接数据的 1个或2个字节的字节地址。
[0070] 写命令处理单元包括读地址生成单元与写地址生成。读地址生成单元用于生成存储了待拼接数据的1个或2个字节的字节地址,以从存储器读出这1个或2个字节。读地址生成单元将读地址提供给读地址发送单元。读地址发送单元根据总线协议通过主设备接口向总线发出读地址。例如,总线是AXI总线,读地址发送单元在AXI总线的读地址通道发出读地址,而总线上的作为接收方的从设备是例如存储器控制器(也参看图3)。
[0071] 在从存储器获取了待拼接的比特,并与写数据缓存提供的物理FTL表的条目(N比特)拼接后,写地址生成单元生成写地址,以将拼接的数据写入存储器。
[0072] 对于从存储器读出的待拼接的比特,存储器控制器通过总线将从存储器读出的容纳了待拼接的比特的字节提供给读数据接收单元(例如,通过AXI总线的读数据通道)。写数据选择单元从读数据接收单元提供的容纳了待拼接的比特的字节中选出待拼接的比特,并提供给写数据拼接单元。可选地,写地址计算单元将待拼接数据的位置提供给写数据选择单元。
[0073] 写数据拼接单元从写数据缓存获取要被更新的物理FTL表的条目(N比特)(其索引为逻辑地址LBA)与可选地待拼接的比特,组成完整的N/8(向下取整)个、N/8(向下取整)+1个或 N/8(向下取整)+2个字节,并提供给写数据发送单元。相应地,写命令处理单元的写地址生成单元生成用于这些字节的地址,并提供给写地址发送单元。根据总线协议,写地址发送单元将写地址通过总线发送给存储器控制器(也参看图3),而写数据发送单元将这些字节的数据通过总线发送给存储器控制器。例如,总线是AXI总线,写地址发送单元通过写地址通道发送写地址,而写数据发送单元通过写数据通道发送这些字节。从而,包含了待更新的物理FTL表的条目(N 比特)与待拼接比特的完整的N/8(向下取整)个、N/8(向下取整)+1个或N/8(向下取整) +2个字节,被写入存储器。
[0074] 从而在更新逻辑FTL表条目的CPU看来,其将M比特的条目写入了由逻辑地址LBA索引的逻辑FTL表的条目。并且,CPU还能以逻辑地址LBA从逻辑FTL表中读出该M比特的条目。根据本申请实施例的FTL加速单元也处理CPU从逻辑FTL表读取条目的请求。
[0075] 继续参看图4,作为举例,来自CPU的逻辑FTL表读取请求指示逻辑地址LBA,FTL加速器被配置了逻辑FTL表的条目大小为M比特,物理FTL表的条目大小为N比特。对于FTL表读取请求,读地址缓存中记录逻辑FTL表读取请求要访问的地址,所缓存的地址是例如用于读取逻辑 FTL表的条目的地址(例如,逻辑地址LBA)。
[0076] 读地址计算单元,根据从读地址缓存获取的逻辑地址LBA、配置的物理FTL表条目大小N与物理FTL表在存储器中的地址,计算要读取的物理FTL表的对应于逻辑地址LBA的条目在存储器中的地址。读地址计算单元以类似于写地址计算单元的方式根据逻辑地址LBA计算物理FTL表对应的条目存储器中的地址。
[0077] 例如,若LBA*Nmod 8为0,那么物理FTL表中的对应条目存储在字节地址LBA*N/8位置开始的N比特存储空间中,读地址计算单元计算得到从字节地址LBA*N/8开始,连续个字节的字节地址。这些字节的全部比特将被读取。
[0078] 若LBA*N mod8不为0,那么物理FTL表中的对应条目存储在字节地址LBA*N/8(向下取整) 位置之后LBA*Nmod 8比特开始的N比特存储空间中,该N比特存储空间占据N/8(向下取整) +1或N/8(向下取整)+2个字节。读地址计算单元计算得到从字节地址LBA*N/8开始,连续N/8 (向下取整)+1或N/8(向下取整)+2个字节的字节地址。这些字节的全部或部分比特将被读取。以及读地址计算单元也确定了存储器中存储了要被读取的物理FTL表的条目的字节数量(N/8 (向下取整)个、N/8(向下取整)+1个或N/8(向下取整)+2个)。
[0079] 读地址计算单元生成的字节地址被提供给读地址发送单元。读地址发送单元通过FTL加速器的主设备接口通过总线向例如存储器控制器发送读地址。而存储器控制器作为对读地址的响应通过总线将对应的数据提供给FTL加速器的读数据接收单元。
[0080] 读数据选择单元将读数据接收单元提供的从存储器读出的N/8(向下取整)个、N/8(向下取整)+1个或N/8(向下取整)+2个字节数据中,选择对应于要读取的物理FTL表条目的N比特,并记录在读数据缓存中。可选地,读地址计算单元向读数据选择单元指示读出的各字节数据中,哪些比特属于物理FTL表的由逻辑地址LBA索引的条目。
[0081] 读数据选择单元或者读数据缓存还将读出的物理FTL表的N比特条目扩展为M比特,例如,在读出的N比特数据之前或之后填充指定比特数目(例如,M‑N比特)的指定数据(例如,全0 或全1或随机数据),以得到M比特的逻辑FTL表条目。通过FTL加速器的从设备接口,将读数据缓存的M比特的逻辑FTL表条目提供给CPU作为对逻辑FTL表读请求的响应。
[0082] 可选地,根据本申请实施例的FTL加速器,对于从诸如CPU接收的对逻辑FTL表条目的更新请求,除了将待更新的条目写入物理FTL表以更新其中的对应条目,还通过从设备接口向CPU 提供对更新结果的处理结果的响应,以满足例如总线协议的要求。
[0083] 图5A展示了根据本申请实施例的FTL加速器处理对逻辑FTL表的读请求的流程图。
[0084] 诸如CPU的主设备发出对逻辑FTL表的条目的读请求,总线将读请求转发作为从设备的FTL 加速器(也参看图4)。响应于获取FTL表读请求(510),读请求指示了要访问的逻辑地址LBA 作为逻辑FTL表的索引,逻辑地址LBA被记录在读地址缓存。读地址计算单元根据读请求指示的对逻辑FTL表的索引(例如逻辑地址LBA)计算物理FTL表的对应条目的地址与长度(515)。
[0085] 例如,若LBA*N mod8为0,那么物理FTL表中的对应条目存储在字节地址LBA*N/8(向下取整)开始的N/8(向上取整)个字节中,若N mod 8不为0,则存储该条目的N/8(向上取整) 个字节的最后字节还包括其他条目的部分比特;若LBA*Nmod 8不为0,且(N mod 8)–(8‑LBA*N mod 8)<=0,则物理FTL表中的对应条目存储在字节地址LBA*N/8(向下取整)开始的N/8(向下取整)+1个字节中;若LBA*Nmod 8不为0,且(N mod 8)–(8‑LBA*N mod 8)>0,则物理FTL 表中的对应条目存储在字节地址LBA*N/8(向下取整)开始的N/8(向下取整)+2个字节中。
[0086] 可选地,读地址计算单元还根据存储器的总线地址,以及物理FTL表在存储器中的起始地址,调整计算出的物理FTL表的对应条目的地址和/或长度。
[0087] 根据读地址计算单元得到的地址与长度,FTL加速器通过从设备接口经由总线访问存储器,以从存储器读出数据(520)。FTL加速器的读数据选择单元从读出的数据中选取物理FTL表中由逻辑地址LBA索引的N比特大小的条目(525)。将N比特大小的物理FTL表的条目扩展为读请求所需要的逻辑FTL表的条目大小(M比特)(530),M比特的数据被存储在读数据缓存中。以及用扩展后的M比特数据通过从设备接口响应对逻辑FTL表条目的访问请求。
[0088] 图5B展示了根据本申请实施例的FTL加速器处理对逻辑FTL表的写请求的流程图。
[0089] 诸如CPU的主设备发出对逻辑FTL表的条目的写请求,以更新逻辑FTL表的条目。响应于获取FTL表写请求(550),写请求指示了要访问的逻辑地址LBA作为逻辑FTL表的索引,以及要写入的逻辑FTL表的条目(M比特)。逻辑地址LBA被记录在写地址缓存。M比特的逻辑FTL表的条目被记录在写数据缓存。写地址计算单元根据写请求指示的对逻辑FTL表的索引(例如逻辑地址LBA)计算物理FTL表的对应条目的地址与长度(555)。M比特的逻辑FTL表的条目中有N 比特对应于要被更新的物理FTL表的条目。
[0090] 例如,若LBA*N mod8为0,那么物理FTL表中的对应条目存储在字节地址LBA*N/8(向下取整)开始的N/8(向上取整)个字节中,若N mod 8不为0,则存储该条目的N/8(向上取整) 个字节的最后字节还包括其他条目的部分比特;若LBA*Nmod 8不为0,且(N mod 8)–(8‑LBA*N mod 8)<=0,则物理FTL表中的对应条目存储在字节地址LBA*N/8(向下取整)开始的N/8(向下取整)+1个字节中;若LBA*Nmod 8不为0,且(N mod 8)–(8‑LBA*N mod 8)>0,则物理FTL 表中的对应条目存储在字节地址LBA*N/8(向下取整)开始的N/8(向下取整)+2个字节中。
[0091] 若待更新的物理FTL表的条目不是按字节边界对齐的(即LBA*N mod 8不为0,和/或(LBA+1) *Nmod 8不为0),还要从存储器读出1字节或2字节数据,将读出数据的部分比特同待写入的N 比特数据拼接。通过执行步骤560到步骤570以完成数据拼接。若待更新的物理FTL表的条目是按字节边界对齐的(即LBA*N mod 8为0,且(LBA+1)*Nmod 8为0),则无需执行步骤560到步骤570。
[0092] 写地址计算单元还指示计算出的写地址的0个、1个或2个需要被读出。写命令处理单元的读地址生成单元根据要读取的写地址,通过主设备接口从存储器读出数据(560)。写数据选择单元从读出数据中选择有效数据(待拼接的比特)(565)。例如,若LBA*N mod8为0,且N mod 8不为0,则读出的1字节数据的字节地址为(LBA+1)*N/8,其结尾的8‑(LBA+1)*N mod 8比特是待拼接的数据;若LBA*N mod8不为0,则从字节地址LBA*N/8读出的1字节数据的前LBA*N mod 8比特是待拼接数据,和/或从字节地址(LBA+1)*N/8读出的1字节数据的结尾的8‑(LBA+1)*N mod 8比特是待拼接的数据。
[0093] 如果执行了步骤560到步骤570,写数据拼接单元将写数据选择单元提供的待拼接比特同写数据缓存中对应待更新的物理FTL表的条目的N比特数据拼接(570),得到N/8(向下取整) +1或N/8(向下取整)+2字节数据。如果无需执行步骤560到步骤570,写数据拼接单元从写数据缓存直接获取要写入物理FTL表的条目的N比特数据(大小为N/8(向下取整)字节)。以及将写数据拼接单元提供的N/8(向下取整)字节、N/8(向下取整)+1字节或N/8(向下取整) +2字节数据通过主设备接口写入存储器(580)。
[0094] 图6A与图6B展示了从物理FTL表读出逻辑FTL的对应条目的示意图。
[0095] 图6A到图6D的例子中,逻辑FTL表的条目大小为64比特,而物理FTL表的条目大小为33 比特。
[0096] 参看图6A,要读出由逻辑地址0索引的逻辑FTL表的条目。图6A展示了存储物理FTL表的空间的前16个字节(记为字节0到字节15)。逻辑地址0索引的物理FTL表的条目记为PBA(0),其位于从字节0开始的33比特中,占据了完整的字节0到字节3以及字节4的第1个比特。根据本申请的实施例,为了读出条目PBA(0),需要从存储器读出完整的字节0到字节4,共5个字节,并选择字节0到字节3的全部数据以及字节4的第1个比特得到PBA(0)。以及将33比特的 PBA(0)填充例如31比特0,得到要读取的逻辑FTL表条目(记为LBA(0))。
[0097] 参看图6B,要读出由逻辑地址1索引的逻辑FTL表的条目。逻辑地址1索引的物理FTL表的条目记为PBA(1),其位于从字节4的第2比特开始的33比特中,占据了字节4的第2到第8 比特,完整的字节5到字节7以及字节7的前2个比特。根据本申请的实施例,为了读出条目 PBA(1),需要从存储器读出完整的字节4到字节8,共5个字节,并选择字节4的第2到第8比特,字节5到字节7的全部数据以及字节8的前2个比特得到PBA(1)。以及将33比特的PBA(1) 填充例如31比特0,得到要读取的逻辑FTL表条目(记为LBA(1))。
[0098] 图6C与图6D展示了向物理FTL表写入逻辑FTL表的对应条目的示意图。
[0099] 参看图6C,要更新由逻辑地址0索引的逻辑FTL表的条目(记为LBA(0))。从条目LBA(0) 选择指定的N比特,其为PBA(0)。逻辑地址0索引的物理FTL表的条目记为PBA(0),其在物理 FTL表中位于从字节0开始的33比特中,占据了完整的字节0到字节3以及字节4的第1个比特。
[0100] 根据本申请的实施例,为了写入条目PBA(0),需要从存储器读出字节4。在更新了PBA(0) 后,字节4的第1比特是被更新的PBA(0)的最后比特,而字节4的第2到第8比特属于PBA(1),而不应被更新。因而,将LBA(0)的N比特,与读出的字节4的第2到第8比特拼接,作为字节0 到字节4的内容,将这部分内容写入物理FTL表的字节0到字节4,以完成对LBA(0)以及PBA(0) 的更新。
[0101] 参看图6D,要更新由逻辑地址1索引的逻辑FTL表的条目(记为LBA(1))。从条目LBA(1) 选择指定的N比特,其为PBA(1)。逻辑地址1索引的物理FTL表的条目记为PBA(1),其在物理 FTL表中位于从字节4的第2比特开始的33比特中,占据了字节4的第2到第8比特,完整的字节5到字节7以及字节7的前2个比特。
[0102] 根据本申请的实施例,为了写入条目PBA(1),需要从存储器读出字节4与字节8。在更新了 PBA(1)后,字节4的第1比特是PBA(0)的最后比特(不应被更新),而字节4的第2到第8比特是PBA(1)的前7比特。在更新了PBA(1)后,字节8的前2比特是PBA(1)的最后2比特。而字节8的第3到第8比特属于PBA(2),不应被更新。
[0103] 因而,将LBA(1)的N比特,与读出的字节4的前1比特,以及读出的字节8的后6比特拼接,作为字节4到字节8的内容,将这部分内容写入物理FTL表的字节4到字节8,以完成对LBA(1) 以及PBA(1)的更新。
[0104] 图7展示了根据本申请又一实施例的包括FTL加速器的控制部件的框图。
[0105] 控制部件包括例如CPU、介质接口控制器(NFI)、FTL加速器与存储器控制器。CPU、介质接口控制器(NFI)、FTL加速器和/或存储器控制器例如通过总线耦合。CPU还直接耦合FTL加速器。CPU根据要访问的地址空间确定将访问请求发送给FTL加速器还是总线。例如,FTL加速器被分配0‑8GB地址空间,而耦合到总线的设备被分配8GB‑32GB地址空间,而NFI被分配例如 8GB开始1MB地址空间,存储器控制器被分配16GB‑32GB的地址空间。在CPU看来,FTL加速器所占据的0‑8GB地址空间中容纳了逻辑FTL表。而物理FTL表则被容纳在存储器控制器所占据的 16GB‑32GB地址空间中。CPU访问0‑8GB地址空间的访问请求直接发送给FTL加速器处理,而CPU 访问16GB‑32GB地址空间的请求被总线转发给存储器控制器处理。
[0106] 根据本申请的实施例,FTL加速器包括主设备接口。FTL加速器通过主设备接口耦合到总线。从而控制部件的CPU得以直接访问FTL加速器。而FTL加速器得以通过主设备接口作为主设备访问控制部件的一个或多个设备(例如存储器控制器)。
[0107] 因而,CPU通过向FTL加速器发出对逻辑FTL表的条目(索引为LBA)的访问请求,所访问的地址为LBA*8,长度为8字节。FTL加速器根据接收的该访问中指示的地址(LBA*8)确定对应的物理FTL表的条目在物理FTL表中的存储位置,并通过其主设备接口通过总线向存储器控制器发出1个或多个存储器访问请求来访问DRAM中的物理FTL表的条目。
[0108] 虽然当前申请参考的示例被描述,其只是为了解释的目的而不是对本申请的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本申请的范围。
[0109] 这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本申请的很多修改和其他实施方式。因此,应该理解,本申请不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。

当前第1页 第1页 第2页 第3页
相关技术
控制部件相关技术
王祎磊发明人的其他相关专利技术