CN107562654A - Io命令处理方法与装置 - Google Patents
Io命令处理方法与装置 Download PDFInfo
- Publication number
- CN107562654A CN107562654A CN201610509669.2A CN201610509669A CN107562654A CN 107562654 A CN107562654 A CN 107562654A CN 201610509669 A CN201610509669 A CN 201610509669A CN 107562654 A CN107562654 A CN 107562654A
- Authority
- CN
- China
- Prior art keywords
- physical address
- list items
- ftl
- ftl list
- physical
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- 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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
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
提供了IO命令处理方法与装置。公开的处理IO请求的方法,包括:响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;以及若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
Description
技术领域
本发明涉及固态存储设备,更具体地,涉及固态存储设备处理IO请求时对访问擦除页的读请求的处理。
背景技术
参看图1,展示了存储设备的框图。存储设备102同主机相耦合,用于为主机提供存储能力。主机同存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA、IDE、USB、PCIE、NVMe(NVM Express)、SAS、以太网、光纤通道、无线通信网络等连接主机与存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM(非易失存储器,Non-Volatile Memory)芯片105以及可选地固件存储器110。接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。控制部件104用于控制在接口103、NVM芯片105以及固件存储器110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。可通过软件、硬件、固件或其组合的多种方式实现控制部件104。控制部件104可以是FPGA(Field-progra mmable gate array,现场可编程门阵列)、ASIC(Application Specific Integrated Circuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器。控制部件104在运行时从固件存储器110加载固件。固件存储器110可以是NOR闪存、ROM、EEPROM,也可以是NVM芯片105的部分。
在固态存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。
FTL表包括多个FTL表条目(或称表项)。在一个实施例中,每个FTL表条目中记录了一个逻辑页地址与一个物理页的对应关系。在另一个例子中,每个FTL表条目中记录了连续的多个逻辑页地址与连续的多个物理页的对应关系。在又一个实施例中,每个FTL表条目中记录了逻辑块地址与物理块地址的对应关系。在依然又一个实施例中,FTL表中记录逻辑块地址与物理块地址的映射关系,和/或逻辑页地址与物理页地址的映射关系。
图2是现有技术的控制部件访问FTL表的示意图。控制部件204包括多个CPU(CPU210、CPU 212与CPU 214)与闪存接口,控制部件的CPU通过闪存接口访问固态存储设备中的NVM芯片。在控制部件204外部的存储器中存储FTL表,FTL表包括多个表项(表项220、表项222与表项224)。多个CPU的每个能够独立的访问FTL表。由于FTL表项可能被多个CPU同时访问,为实现数据一致性,为每个FTL表项提供锁。参看图2,为更新FTL表项224,CPU 210检查FTL表项224的锁234,在锁234指示FTL表项224未被加锁的情况下,CPU 210获得锁234(例如,将锁234设置为加锁状态),并获取FTL表项224(t1时刻)。接下来,CPU 210对获取的FTL表项224进行操作,并在t4时刻更新FTL表项224,以及将锁234释放(例如,将锁234设置为未加锁状态)。在t1-t4时刻期间,其他CPU(CPU 212与CPU 214)检索到锁234的存在,而暂时放弃对FTL表项224的访问。在图2中,t2时刻,CPU 212尝试访问FTL表项224,但发现无法获得锁234,于是放弃对FTL表项224的访问。类似地,CPU214也由于无法获得锁234而放弃在t3时刻对FTL表项224的访问。而在t4时候之后,CPU 210释放锁234,CPU 212与CPU 214中抢到锁234的那个CPU,将访问FTL表项234。在另一个例子中,在t1-t4时间段内,CPU 210的一个任务获得锁234,而CPU 210中的另一个任务由于没有获得锁234而也暂时放弃对FTL表项224的访问。
FTL表项的锁可以存储在对应的FTL表项的相同位置,或者在另外的存储空间中将多个FTL表项的锁集中存储。
发明内容
在固态存储设备中,同时处理多个IO请求,几乎每个IO请求都需要访问FTL表。而锁机制使得对FTL表项的访问串行化,降低了固态存储的并行处理能力,增加了IO请求的处理延迟。
在本发明中,提供了根据本发明第一方面的第一处理IO请求的方法,包括:响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
根据本发明第一方面的第一处理IO请求的方法,提供了根据本发明第一方面的第二处理IO请求的方法,还包括:从第一物理地址读取数据以响应所述第一读请求。
根据本发明第一方面的第三处理IO请求的方法,包括:响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;若包含第一物理地址的物理块或大块处于已写入状态,以及若当前写入位置超前于第一物理地址,从第一物理地址读取数据以响应所述第一读请求。
根据本发明第一方面的第三处理IO请求的方法,提供了根据本发明第一方面的第四处理IO请求的方法,还包括:若包含第一物理地址的物理块或大块处于被擦除状态,重放所述第一读请求。
根据本发明第一方面的第三或第四处理IO请求的方法,提供了根据本发明第一方面的第五处理IO请求的方法,还包括:若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
根据本发明第一方面的第四处理IO请求的方法,提供了根据本发明第一方面的第六处理IO请求的方法,其中所述重放所述第一读请求包括:访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第二物理地址;若包含第二物理地址的物理块或大块处于已写入状态,以及若当前写入位置超前于第二物理地址,从第二物理地址读取数据以响应所述第一读请求。
根据本发明第一方面的第三至第六处理IO请求的方法之一,提供了根据本发明第一方面的第七处理IO请求的方法,其中所述当前写入位置是包含第一物理地址的物理块或大块的当前写入位置。
根据本发明第二方面的第一处理IO请求的方法,包括:响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;从第一物理地址读取数据;若从第一物理地址读取数据的结果指示第一物理地址所在的物理页处于擦除状态,若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
根据本发明第二方面的第一处理IO请求的方法,提供了根据本发明第二方面的第二处理IO请求的方法,还包括:在当前写入位置超前于第一物理地址后,从第一物理地址读取数据以响应所述第一读请求。
根据本发明第二方面的第三处理IO请求的方法,包括:响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;从第一物理地址读取数据;若从第一物理地址读取数据的结果指示第一物理地址所在的物理页处于擦除状态,以及包含第一物理地址的物理块或大块处于已写入状态,若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
根据本发明第二方面的第三处理IO请求的方法,提供了根据本发明第二方面的第四处理IO请求的方法,还包括:在当前写入位置超前于第一物理地址后,从第一物理地址读取数据以响应所述第一读请求。
根据本发明第二方面的第三处理IO请求的方法,提供了根据本发明第二方面的第五处理IO请求的方法,还包括:若从第一物理地址读取数据的结果指示第一物理地址所在的物理页处于擦除状态,以及包含第一物理地址的物理块或大块处于被擦除状态,第一读请求对应的第一FTL表项,获取第一FTL表项记录的第二物理地址;以及从第二物理地址读取数据。
根据本发明第二方面的第五处理IO请求的方法,提供了根据本发明第二方面的第六处理IO请求的方法,还包括:从获取第一FTL表项记录的第二物理地址后,若当前写入位置落后于第二物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第二物理地址。
根据本发明第二方面的第六处理IO请求的方法,提供了根据本发明第二方面的第七处理IO请求的方法,还包括:在当前写入位置超前于第二物理地址后,从第二物理地址读取数据以响应所述第一读请求。
根据本发明第三方面的第一处理IO请求的方法,包括:响应于收到写请求,访问写请求对应的第一FTL表项,若第一FTL表项未被加锁,则对第一FTL表项加锁;为所述写请求分配第一物理地址,以第一物理地址更新第一FTL表项,对第一FTL表项解锁,向第一物理地址写入数据,以及更新当前写入位置;响应于收到读请求,访问读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
根据本发明第三方面的第一处理IO请求的方法,提供了根据本发明第三方面的第二处理IO请求的方法,还包括:响应于收到第二写请求,若所述第一FTL表项被加锁,中止对所述第二写请求的处理,直到第一FTL表项的锁被释放。
根据本发明第三方面的第二处理IO请求的方法,提供了根据本发明第三方面的第三处理IO请求的方法,还包括:所述第一FTL表项的锁被释放后,获取所述第一FTL表项,并对第一FTL表项加锁。
根据本发明第三方面的第一到第三处理IO请求的方法,提供了根据本发明第三方面的第四处理IO请求的方法,还包括:响应于收到读请求,访问读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;若包含第一物理地址的物理块处于擦除状态,重放所述读请求。
根据本发明第三方面的第一到第四处理IO请求的方法,提供了根据本发明第三方面的第五处理IO请求的方法,还包括:在当前写入位置超前于第一物理地址后,从第一物理地址读取数据以响应所述读请求。
根据本发明第三方面的第一到第五处理IO请求的方法之一,提供了根据本发明第三方面的第六处理IO请求的方法,其中为所述写请求分配第一物理地址包括以当前写入位置作为第一物理地址,并使当前写入位置递增。
根据本发明第四方面的第一处理IO请求的装置,包括:FTL表项访问模块,用于响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;当前写入位置处理模块,用于若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
根据本发明第四方面的第二处理IO请求的装置,包括:FTL表项访问模块,用于响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;当前写入位置处理模块,用于若包含第一物理地址的物理块或大块处于已写入状态,以及若当前写入位置超前于第一物理地址,从第一物理地址读取数据以响应所述第一读请求。
根据本发明第五方面的第一处理IO请求的装置,包括:FTL表项访问模块,用于响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;当前写入位置处理模块,用于从第一物理地址读取数据;若从第一物理地址读取数据的结果指示第一物理地址所在的物理页处于擦除状态,若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
根据本发明第五方面的第二处理IO请求的装置,包括:FTL表项访问模块,用于响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;当前写入位置处理模块,用于从第一物理地址读取数据;若从第一物理地址读取数据的结果指示第一物理地址所在的物理页处于擦除状态,以及包含第一物理地址的物理块或大块处于已写入状态,若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
根据本发明第六方面的第一处理IO请求的装置,包括:写请求处理模块,用于响应于收到写请求,访问写请求对应的第一FTL表项,若第一FTL表项未被加锁,则对第一FTL表项加锁;FTL表项更新模块,用于为所述写请求分配第一物理地址,以第一物理地址更新第一FTL表项,对第一FTL表项解锁,向第一物理地址写入数据,以及更新当前写入位置;读请求处理模块,用于响应于收到读请求,访问读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;当前写入位置处理模块,用于若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
根据本发明的第七方面,提供一种包含计算机程序代码的计算机程序,当被载入计算机系统并在计算机系统上执行时,所述计算机程序代码使所述计算机系统执行根据本发明第一方面至第三方面提供的处理IO请求的方法。
根据本发明的第八方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述计程序代码使所述存储设备执行根据本发明第一方面至第三方面提供的处理IO请求的方法。
附图说明
当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进一步的目的和优点,其中附图包括:
图1是现有技术的存储设备的框图;
图2是现有技术的存储设备的控制部件访问FTL表的示意图;
图3A是根据本发明实施例的存储设备的控制部件访问FTL表的示意图;
图3B是根据本发明另一实施例的存储设备的控制部件访问FTL表的示意图;
图3C是根据本发明依然另一实施例的存储设备的控制部件访问FTL表的示意图;以及
图4A是根据本发明实施例的为处理写命令而访问FTL表的流程图;
图4B是根据本发明实施例的为处理写命令而访问FTL表的流程图;
图5A是根据本发明又一实施例的存储设备的控制部件访问FTL表的示意图;
图5B是根据本发明图5A实施例的处理IO请求的顺序图;
图6是根据本发明的实施例将NVM的物理块组织为块条带的示意图;
图7是根据本发明依然又一实施例的存储设备的控制部件访问FTL表的示意图;
图8A是根据本发明又一实施例的为处理写命令而访问FTL表的流程图;
图8B是根据本发明又一实施例的为处理读命令而访问FTL表的流程图;
图9A是根据本发明的实施例的为处理IO命令而访问FTL表的流程图;
图9B是根据本发明的再一实施例的为处理IO命令而访问FTL表的流程图;
图9C是根据本发明的又一实施例的为处理IO命令而访问FTL表的流程图;
图10A是根据本发明又一实施例的存储设备的控制部件访问FTL表的示意图;
图10B是根据本发明图10A实施例的处理IO请求的顺序图;
图11A是根据本发明的实施例的处理写命令的流程图;
图11B是根据本发明的实施例的处理读命令的流程图;
图11C是根据本发明的再一实施例的处理IO命令的流程图;
图12A是根据本发明的另一实施例的处理IO命令的流程图;以及
图12B是根据本发明的另一实施例的处理IO命令的流程图。
具体实施方式
在NVMe(Non-Volatile Memory express,高速非易失存储)协议中,定义了不同的IO命令类型。对于一部分IO命令,对IO命令之间的顺序性不做要求。例如,如果提交了一个对逻辑地址x的读命令,以及还提交了一个对逻辑地址x的写命令,虽然写命令的执行结果,会影响读命令的执行结果,但如果在这两个IO命令中未要求他们之间的顺序性,NVMe协议允许固态存储设备以任意顺序执行这两个IO命令。
针对NVMe协议的此特性,在根据本发明的实施例中,对IO请求的处理方式做出改进,以提升固态存储设备的IO命令处理能力,降低IO命令的处理延迟。所属领域技术人员将意识到,虽然以NVMe协议为例描述根据本发明的实施例,在其他不要求IO命令之间的执行顺序中协议中,同样可实施根据本发明的实施例。
参看图3A,示出了根据本发明实施例的存储设备的控制部件访问FTL表的示意图。固态硬盘的控制部件304包括多个CPU(CPU 310、CPU 312与CPU 314),每个CPU能够访问外部于控制部件304的FTL表。FTL表存储在例如DRAM(Dynamic Random Access Memory,动态随机访问存储器)中。控制部件的CPU还通过闪存接口(未示出)访问NVM芯片。作为举例,CPU310处理来自主机的写命令,根据写命令指示的逻辑地址在t1时刻访问FTL表项324(由图3A的W-t1指示),来为写命令分配物理地址。为避免多个写命令同时写相同的逻辑地址,在访问FTL表项时还请求与表项对应的锁。在图3A的例子中,CPU 310访问与FTL表项324对应的锁334。在图3的例子中,锁334指示FTL表项324未被加锁,CPU 310修改锁334以指示对FTL表项324的加锁。在根据本发明的实施例中,处理写命令时,要获取写命令将修改的FTL表项的锁。在无法获取到锁时,对该写命令的处理暂时中止,并等待锁的释放。在图3A的例子中,在t1时刻后,CPU 310获得FTL表项324的锁。此时,其他CPU为处理写命令要访问FTL表项324时,由于发现锁334指示FTL表项324已被加锁,则中止对访问FTL表项324的写命令的处理。
依然参看图3A,CPU 314处理来自主机的读命令,根据该读命令的逻辑地址在t2时刻访问FTL表项324。虽然FTL表项324已被加锁,在根据本发明的实施例中,CPU 314忽略FTL表项324的锁,依然获取FTL表项324,并根据FTL表项324获取要访问的物理地址。进一步地,CPU 314或其他CPU通过该物理地址读取数据,并向主机提供读取的数据作为对读命令的响应。由于处理读命令时不检查FTL表项324上是否被加锁,使得访问FTL表项324的写命令与访问FTL表项324的一个或多个读命令能够同时执行,从而提升了IO命令的并行处理能力。以及由于在处理读命令时,无需等待FTL表项324的锁被释放,降低了读命令处理的时间。
在图3A的例子中,为处理写命令,CPU 310为写命令分配新的物理地址,并用新的物理地址更新FTL表项324,在t3时刻,CPU 310完成对FTL表项324的更新(图3中,用W-t3指示)。以及还向新的物理地址写入数据来响应写命令。可由CPU 310或其他CPU来向新的物理地址写入数据。因而,在t3时刻之前的t2时刻,CPU 314从FTL表项324中获得的是旧的物理地址,而在t3时刻之后,响应于读命令从FTL表项324中获得的是新的物理地址(被CPU 310在处理写命令时更新)。因而,在处理读命令时,若CPU 314在t3时刻之前访问FTL表项324,将得到在t3时刻之后访问FTL表项324不同的物理地址,进而读取到不同的数据。这样的结果符合诸如NVMe协议等对IO命令的处理顺序没有要求的协议。
在一个例子中,锁334与FTL表项324彼此分立地存储。为处理读命令,CPU 314访问FTL表项324而无需访问锁334。在另一个例子中,锁334与FTL表项324存储在相同的存储位置。在处理读命令时,CPU 314访问FTL表项324的同时将获得锁334的内容,但CPU 314无需处理锁334的内容,而仅关心FTL表项324所提供的物理地址。
继续参看图3A,锁的粒度是针对每个FTL表项。响应于IO命令,CPU 312访问FTL表项328。对于读命令,CPU 312忽略与FTL表项328所对应的锁338;对于写命令,CPU 312检查与FTL表项328所对应的锁338,在锁338指示FTL表项328未被加锁时,才继续对写命令的处理,在锁338指示FTL表项328被加锁时,暂停对写命令的处理,或推迟对FTL表项328的更新。
图3B是根据本发明另一实施例的存储设备的控制部件访问FTL表的示意图。来自主机的读命令或写命令访问不同长度的数据,并访问不同数量的FTL表项。在根据本发明的实施例中,加锁的粒度是每个FTL表项。作为举例,CPU 310处理来自主机的写命令,写命令访问3个逻辑地址,根据写命令指示的逻辑地址CPU 310在t1时刻访问FTL表项320、FTL表项322与FTL表项324(由图3B的W1-t1、W2-t1与W3-t1指示),来为写命令分配物理地址。CPU310在访问FTL表项时还请求与表项对应的锁,通过访问锁330、锁332与锁334来请求与FTL表项320、FTL表项322以及FTL表项324对应的锁。在获取到对应的锁时,CPU 310进行后续操作,分配新的物理地址并用新的物理地址更新对应的FTL表项,在无法获取到对应的锁时,CPU310中止对对应FTL表项的操作,等待对应的锁被释放。例如,CPU 310获得了FTL表项320与FTL表项322的锁,但未获得FTL表项324的锁,则CPU 310继续后续处理更新FTL表项320与FTL表项322,并中止对FTL表项324的操作,直到FTL表项324的锁334被释放并由CPU 310获得,CPU 310继续更新FTL表项324。响应于FTL表项被更新,还向新的物理地址处写入数据来响应写命令。当写命令对应的三个FTL表项的新物理地址均被写入数据后,写命令处理完成。
依然参看图3B,CPU 314处理来自主机的读命令,根据该读命令的逻辑地址在t2时刻访问FTL表项324(在图3B中,记为R-t2)。虽然FTL表项324已被CPU 310在处理写命令时加锁,在根据本发明的实施例中,CPU 314忽略FTL表项324的锁,依然获取FTL表项324,并根据FTL表项324获取要访问的物理地址。进一步地,CPU 314或其他CPU通过该物理地址读取数据,并向主机提供读取的数据作为对读命令的响应。由于处理读命令时不检查FTL表项324上是否被加锁,使得访问FTL表项324的写命令与访问FTL表项324的一个或多个读命令能够同时执行,从而提升了IO命令的并行处理能力。以及由于在处理读命令时,无需等待FTL表项324的锁被释放,降低了读命令处理的时间。
图3C是根据本发明依然另一实施例的存储设备的控制部件访问FTL表的示意图。在图3C是示出的实施例中,同一CPU上可并行处理多个IO命令。作为举例,CPU 310处理来自主机的写命令,根据写命令指示的逻辑地址CPU 310在t1时刻访问FTL表项324(由图3C的W1-t2指示),来为写命令分配物理地址。CPU310在访问FTL表项时还请求与表项对应的锁,通过访问锁334来请求与FTL表项324对应的锁。在获取到对应的锁时,CPU 310进行后续操作,分配新的物理地址并用新的物理地址在t3时刻更新对应的FTL表项324(由图3C的W3-t3指示对FTL表项324的更新)。在t1与t3时刻之间,CPU 310还响应主机的读命令,在t2时刻访问FTL表项324。虽然在t2时刻,锁334指示FTL表项324被加锁,但对于读命令,即使FTL表项324上存在锁,CPU310依然访问并使用FTL表项324,利用FTL表项324提供的物理地址读取数据。在进一步的实施例中,CPU 310缓存在t1时刻取得的FTL表项324,并在t2时刻从CPU 310的缓存中取得FTL表项324的内容。以及对于处理读命令,无论CPU 310缓存的FTL表项324是否被更新,都利用缓存的FTL表项324提供的物理地址读取数据。在t2时刻,CPU 314响应于另一读命令的逻辑地址而访问FTL表项324(图3C中,用R3-t2示出)。由于是读命令,虽然锁334指示FTL表项324被加锁,CPU 314依然访问并使用FTL表项324,并用FTL表项324提供的物理地址读取数据。
图4A是根据本发明实施例的为处理写命令而访问FTL表的流程图。在根据本发明的实施例中,响应于收到访问第一FTL表项的逻辑地址的写命令(410),检查第一FTL表项是否被加锁(420)。若第一FTL表项被加锁,中止对该第一FTL表项的后续处理,并等待第一FTL表项的锁被释放。对第一FTL表项的后续处理是该写命令的处理的一部分。若第一FTL表项未被加锁,或者第一FTL表项的锁被释放,为处理该写命令,对第一FTL表项加锁(430),以使得访问第一FTL表项的其他写命令暂时挂起。为处理该写命令,为该写命令分配第一物理地址,以第一物理地址更新第一FTL表项,将更新后的FTL表项写入FTL表,并对第一FTL表项解锁(440)。为写命令分配新的物理地址可利用所属领域中已知的多种方式。以及将该写命令对应的数据写入第一物理地址(450)。
在另一个例子中,在响应于收到第二写命令而访问写命令的逻辑地址对应的第一FTL表项时,发现第一FTL表项被加锁,则完成对第二写命令的处理,而不再为第二写命令分配物理地址,也不将第二写命令对应的数据写入非易失存储器。
图4B是根据本发明实施例的为处理写命令而访问FTL表的流程图。响应于收到读命令,读命令的逻辑地址对应第一FTL表项(432)。对于读命令,不检查第一FTL表项是否被加锁。即使由于处理写命令,第一FTL表项已被加锁(参见图4A的步骤430),在处理读命令时,也从FTL表中获取并使用被加锁的第一FTL表项(434)。以及根据第一物理地址读出数据(436)作为对读命令的响应。
在另一个例子中,为处理读命令而获取第一FTL表项时,若第一FTL表项被加锁,则表明有在执行中的写命令在访问第一FTL表,而写命令要写入的数据在缓存中。从缓存中查找访问第一FTL表的写命令要写入的数据,作为读命令的读出数据。从缓存中获取数据的速度远快于从非易失存储芯片中获取数据的速度,从而利用缓存的待写入数据作为对读命令的响应,进一步降低了读命令的处理时间。
图5A是根据本发明又一实施例的存储设备的控制部件访问FTL表的示意图。
固态硬盘的控制部件504包括多个CPU(CPU 510、CPU 512、CPU 514),每个CPU能够访问外部于控制部件304的FTL表。控制部件的CPU还通过闪存接口访问NVM芯片505。NVM芯片505包括多个存储单元,例如存储单元550、存储单元552、存储单元560以及存储单元562。作为举例,CPU 510处理来自垃圾回收任务的写命令,根据写命令指示的逻辑地址在t1时刻访问FTL表项524(由图5A的Wg-t1指示),来为写命令分配物理地址。为避免多个写命令同时写相同的逻辑地址,在访问FTL表项时还请求与表项对应的锁。在图5A的例子中,CPU 510访问与FTL 表项524对应的锁534。在图5A的例子中,CPU 510修改锁534以指示对FTL表项524的加锁。
依然参看图5A,CPU 514处理来自主机的读命令,根据该读命令的逻辑地址在t2时刻访问FTL表项524(在图5A中由R-t2指示)。虽然FTL表5324已被加锁,在根据本发明的实施例中,在处理读命令时,CPU 514忽略FTL表项524的锁,依然获取FTL表项524,并根据FTL表项524获取要访问的物理地址。CPU 514根据获取的物理地址,通过闪存接口访问NVM芯片505的物理地址,并获得要读取的数据。
在图5A的例子中,为处理来自垃圾回收任务的写命令,CPU 510为写命令分配新的物理地址,并用新的物理地址更新FTL表项524,在t3时刻,CPU 510完成对FTL表项524的更新(图5A中,用Wg-t3指示)。以及还向新的物理地址写入数据来响应写命令。
在一些情况下,CPU 514处理读命令时,所访问的物理地址在NVM芯片505中是处于擦除状态的物理块。处于擦除状态的物理块中不具有有效数据,不应当被读取。图5B是根据本发明图5A实施例的处理IO请求的顺序图,其展示了CPU 514读到NVM芯片505中的擦除块的原因。图5B中,时间轴展示了时间的流逝方向。响应于垃圾回收(GC)写命令560,CPU 510根据写命令560指示的逻辑地址在t1时刻访问FTL表项524(由图5A的Wg-t1指示),FTL表项524被加锁,FTL表524的物理地址指示NVM芯片505的存储单元550。在处理GC写命令(560)过程中,接下来,FTL表项524被CPU 510更新,FTL表项524更新后的物理地址指示存储单元560。
在FTL表项524被加锁后,收到用户读命令(570),CPU 514处理用户读命令(570),并获取FTL表项524。由于CPU 514获取FTL表项524时忽略FTL表项524的锁534,且获取FTL表项524的时机在FTL表项524被CPU 510更新之前,因而从FTL表项524中获取的物理地址指示存储单元550。
继续参看图5B,在GC写命令(560)后,会紧跟GC擦除命令(562),响应于GC擦除命令(562),擦除GC写命令(560)的所影响的旧物理地址(存储单元550)。从而NVM芯片的存储单元550处于擦除状态。而CPU 514为处理用户读命令(570)而获得了旧的FTL表项524,并通过闪存接口向存储单元550发出读命令。CPU 514向存储单元550发出读命令与CPU 510向存储单元550发出擦除命令,这两个操作会以任意的顺序发生,使得CPU 514发出读命令时,存储单元550可能处于擦除状态,从而读命令无法被正确处理。
在根据本发明的实施例中(参看图5A),为解决上述问题,控制部件504还维护块状态表540。在块状态表540中,记录NVM芯片550的每个物理块是处于擦除状态,还是处于已经被写入状态。在一个例子中,当物理块被擦除时,更新块状态表540,以标识物理块处于被擦除状态。而当物理块被第一次写入时,更新块状态表540,以标识物理块处于已写入状态。CPU 514通过闪存接口向NVM芯片505发出读命令前,用从FTL表项524获取的物理地址得到该物理地址所在的物理块,并在块状态表540中查询该物理块的状态。若该物理块处于已写入状态,则CPU 514通过闪存接口向NVM芯片505发出读命令;若该物理块处于被擦除状态,则CPU 514指示重放读命令。作为举例,重放读命令的含义在于,控制部件504将该读命令视作新收到的读命令,并重新处理。由于重新处理需要时间,在重新获取FTL表项524时,其内容以很大概率已被更新,新获取的FTL表项524将提供更新后的物理地址,而更新后的物理地址中存储有效数据。在极少数情况下,作为举例,重新获取FTL表项524时,FTL表项524的更新依然未完成,重新获取的FTL表项依然是旧的处于被擦除状态的物理地址。在此情况下,在一个例子中,再次重放读命令,以重新获取FTL表项524;而在另一个例子中,CPU 514进一步识别与FTL表项524对应的锁534。若锁534指示FTL表项524被加锁,则CPU 514等待锁534的释放以获取更新后的FTL表项524,再用更新后的FTL表项524提供的物理地址来访问NVM芯片505;若锁534指示FTL表项524未被加锁,则立即用FTL表项524提供的物理地址来访问NVM芯片505。
图6是根据本发明的实施例将NVM的物理块组织为块条带的示意图。图6所示的固态存储设备中,在每16个逻辑单元(LUN0、LUN1、……LUN15)上构造块条带,每个逻辑单元内相同物理地址的物理块构成了“块条带”。
图6中,LUN0-LUN15中地址为0的块B0构成了块条带0,其中LUN0到LUN 14的物理块B0用于存储用户数据,而LUN15的物理块B0用于存储根据块条带内的用户数据计算得到的校验数据。NVM的物理块包括多个页,块条带中具有相同地址的物理页构成页条带,为每个页条带计算校验数据。例如,在LUN15的物理块B0的每个物理页存储了该物理页所在的页条带的所有用户数据计算得到的校验数据。
类似地,图6中,LUN0-LUN15中地址为2的物理块B2块条带2。可选地,用于存储校验数据的物理块可以位于块条带中的任意LUN中。在图6的例子中,利用块条带中的校验数据,在块条带的1个物理页的数据损坏的情况下,能够从该物理页所在的页条带的其他页中恢复损坏页的数据。
所属领域技术人员将意识到,可以用多种其他的数据组织方式构造块条带。在块条带中包括多个物理块,并且在块条带中通过冗余或RAID技术提供数据保护。从而在块条带中的一个或若干物理块损坏的情况下,通过块条带的其他块能够重建虽坏的物理块的数据。按块条带为单位实施擦除。在执行擦除操作时,属于块条带的所有物理块被一起擦除。
图7是根据本发明依然又一实施例的存储设备的控制部件访问FTL表的示意图。同图5A相比,在图7的实施例中,控制部件504还包括CPU 516,以及NVM 705上包括块条带750、块条带752、块条带754与块条带756,以及记录每个块条带的状态的块条带状态表740。在块条带状态表740中,包括多个条目(条目760、条目762、条目764与条目766),每个条目记录NVM 705的对应块条带是处于擦除状态,还是处于已经被写入状态。在一个例子中,当块条带被擦除时,更新块条带状态表740,以标识块条带处于被擦除状态。而当块条带被第一次写入时,更新块条带状态表740,以标识物理块处于已写入状态。
在图7的实施例中,为处理器读命令,CPU 514访问FTL表项524,将FTL表项524提供的物理提供提供给CPU 516。CPU 516通过闪存接口向NVM 705发出读命令。CPU 516通过闪存接口向NVM 705发出读命令前,用从FTL表项524获取的物理地址得到该物理地址所在的块条带,并在块条带状态表740中查询该块条带的状态。若该块条带处于已写入状态,则CPU516通过闪存接口向NVM 705发出读命令;若该物理块处于被擦除状态,则CPU 516指示重放读命令。在极少数情况下,作为举例,重新获取FTL表项524时,FTL表项524的更新依然未完成,重新获取的FTL表项提供的依然是旧的处于被擦除状态的物理地址。在此情况下,在一个例子中,再次重放读命令,以重新获取FTL表项524;而在另一个例子中,CPU 516进一步识别与FTL表项524对应的锁534。若锁534指示FTL表项524被加锁,则CPU 614等待锁534的释放以获取更新后的FTL表项524,再将更新后的FTL表项524提供的物理地址提供给CPU 516;若锁534指示FTL表项524未被加锁,则立即将FTL表项524提供的物理地址提供给CPU 516。
图8A是根据本发明又一实施例的为处理写命令而访问FTL表的流程图。在根据图8的实施例中,响应于收到访问第一FTL表项的逻辑地址的写命令(802),检查第一FTL表项是否被加锁(804)。若第一FTL表项被加锁,中止对该第一FTL表项的后续处理,并等待第一FTL表项的锁被释放。对第一FTL表项的后续处理是该写命令的处理的一部分。若第一FTL表项未被加锁,或者第一FTL表项的锁被释放,为处理该写命令,对第一FTL表项加锁(806),以使得访问第一FTL表项的其他写命令暂时挂起。为处理该写命令,为该写命令分配第一物理地址,以第一物理地址更新第一FTL表项,将更新后的FTL表项写入FTL表,并对第一FTL表项解锁(808)。为写命令分配新的物理地址可利用所属领域中已知的多种方式。以及将该写命令对应的数据写入第一物理地址(809)。
在另一个例子中,在响应于收到第二写命令而访问写命令的逻辑地址对应的第一FTL表项时,发现第一FTL表项被加锁,则完成对第二写命令的处理,而不再为第二写命令分配物理地址,也不将第二写命令对应的数据写入非易失存储器。
图8B是根据本发明又一实施例的为处理写命令而访问FTL表的流程图。响应于收到读命令,读命令的逻辑地址也对应第一FTL表项(810)。对于读命令,不检查第一FTL表项是否被加锁。即使由于处理写命令,第一FTL表项已被加锁(参见图8A的步骤806),在处理读命令时,也从FTL表中获取并使用被加锁的第一FTL表项,获取第一FTL表项提供的第一物理地址(820)。接下来,依据第一物理地址获取对应的物理块或块条带,从块状态表(参见图5A,540)或块条带状态表(参见图7,740)中获取对应的物理块或块条带的状态。若获取的状态指示第一物理地址所在的物理块或块条带处于被擦除状态(830),则重放读命令,换句话说,通过步骤810重新处理该读命令。若获取的状态指示第一物理地址所在的物理块或块条带处于已写入状态(830),则从第一物理地址读出数据来响应该读命令(840)。
图9A是根据本发明的实施例的为处理IO命令而访问FTL表的流程图。在图9A的实施例中,响应于收到读命令,读命令的逻辑地址对应第一FTL表项(910)。对于读命令,不检查第一FTL表项是否被加锁。即使由于处理写命令,第一FTL表项已被加锁,在处理读命令时,也从FTL表中获取并使用被加锁的第一FTL表项,获取第一FTL表项提供的第一物理地址(920)。接下来,依据第一物理地址向NVM发送读命令,以从第一物理地址读出数据(920)。在读取数据的结果中指示第一地址对应的物理页是否处于擦除状态(930)。在一个例子中,NVM芯片在读取数据的结果中提供这样的指示,来标识所读取的物理页是否处于擦除状态。在另一个例子中,控制部件的闪存接口依据从NVM芯片读出的数据判断所读出的数据是否来自处于擦除状态的物理页。
继续参看图9A,若读取数据结果指示第一物理地址对应的物理页处于擦除状态,返回步骤910,重放该读命令。若读取数据结果指示第一物理地址对应的物理页非处于已擦除状态,则所读取的数据有效,以读取的数据作为对读命令的响应,读命令处理完成(940)。
在图9A的实施例中,在获得第一物理地址后,不检查第一物理地址所在的物理块或块条带是否处于擦除状态。因而第一物理地址所在的物理块或块条带处于擦除状态的机率很低,在大多数情况下,检查是否处于擦除状态的操作将引入额外的延迟。在图9A的实施例中,在获得第一物理地址后,不检查第一物理地址所在的物理块或块条带是否处于擦除状态,而直接从第一物理地址读出数据,并依赖于读取数据结果提供的指示来判断所读取的物理页是否处于擦除状态。从而仅在所读取的物理页处于擦除状态时,进行额外的处理,降低了读命令的平均处理延迟。
图9B是根据本发明的再一实施例的为处理IO命令而访问FTL表的流程图。图9B的实施例同图9A的实施例相似,差别之处在于,当从第一物理地址读出数据,在读取数据的结果中判断第一地址对应的物理页是否处于擦除状态时(980),若读取数据结果指示第一物理地址对应的物理页处于擦除状态,依据第一物理地址获取对应的物理块或块条带,从块状态表(参见图5A,540)或块条带状态表(参见图7,740)中获取对应的物理块或块条带的状态(990)。若第一物理地址所在的物理块或块条带处于已写入状态(990),则从第一物理地址读取数据结果指示物理页处于擦除状态与第一FTL表项是否被加锁无关,而是第一物理地址所存储的数据已损坏,指示读命令处理失败作为对读命令的响应(995)。若第一物理地址所在的物理块或块条带处于被擦除状态(990),返回步骤950重放读命令。而当从第一物理地址读出数据,在读取数据的结果中判断第一地址对应的物理页是否处于擦除状态时(980),若读取数据结果指示第一物理地址对应的物理页非处于擦除状态,则以读出数据作为对读命令的响应,读命令处理完成(985)。
依然参看图9B,在另一个例子中,当第一次经过步骤980,第一次从第一物理地址读出数据,在读取数据的结果中判断第一地址对应的物理页处于被擦除状态时(980),由图9B中的虚线所示,直接重放读命令。而对于同一读命令,由于被重放,而第二次经过步骤980时,若在读取数据的结果中再次判断第一地址对应的物理页处于被擦除状态(980),才进入到步骤990,从块状态表(参见图5A,540)或块条带状态表(参见图7,740)中获取对应的物理块或块条带的状态。
在图9B的实施例,在遇到读取的物理页是处于被擦除状态的物理页时,采用不同的处理策略,以获得更佳的错误处理效率。
图9C是根据本发明的又一实施例的为处理IO命令而访问FTL表的流程图。图9B的实施例同图9C的实施例相似,差别之处在于,当从第一物理地址读出数据,在读取数据的结果中判断第一地址对应的物理页是否处于擦除状态时(980),查询第一FTL表项是否被加锁(992)。若第一FTL表项未被加锁(992),则从第一物理地址读取数据结果指示物理页处于擦除状态与第一FTL表项是否被加锁无关,而是第一物理地址所存储的数据已损坏,指示读命令处理失败作为对读命令的响应(995)。若第一FTL表项被加锁(992),则从第一物理地址读取数据结果指示物理页处于擦除状态与第一FTL表项被加锁有关,等待第一FTL表项的锁被释放,再次获取第一FTL表项并得到更新后的第一FTL提供的第二物理地址(994)。以及以第二物理地址向NVM发出访问命令,从NVM的第二物理地址读出数据(996),作为对读命令的响应。
依然参看图9C,在另一个例子中,当第一次经过步骤980,第一次从第一物理地址读出数据,在读取数据的结果中判断第一地址对应的物理页处于被擦除状态时(980),由图9C中的虚线所示,返回步骤950,直接重放读命令。而对于同一读命令,由于被重放,而第二次经过步骤980时,若在读取数据的结果中再次判断第一地址对应的物理页处于被擦除状态(980),才进入到步骤992,查询第一FTL表项是否被加锁,并进行后续处理。
在图9C的实施例,在遇到读取的物理页是处于被擦除状态的物理页时,采用不同的处理策略,以获得更佳的错误处理效率。
图10A是根据本发明又一实施例的存储设备的控制部件访问FTL表的示意图。图10A中,固态硬盘的控制部件1004包括多个CPU(CPU 1010、CPU 1012、CPU 1014),每个CPU能够访问外部于控制部件1004的FTL表。控制部件的CPU还通过闪存接口访问NVM芯片1005。NVM芯片1005包括多个存储单元,例如存储单元1050、存储单元1052、存储单元1060以及存储单元1062。作为举例,CPU 1010处理来自写命令。写命令可以来自主机也可以来自垃圾回收操作或其他写入数据的请求。根据写命令指示的逻辑地址在t1时刻访问FTL表项1024(由图10A的W-t1指示),来为写命令分配物理地址。为避免多个写命令同时写相同的逻辑地址,在访问FTL表项时还请求与表项对应的锁。在图10A的例子中,CPU 1010访问与FTL表项1024对应的锁1034。在图10A的例子中,CPU 1010修改锁1034以指示对FTL表项1024的加锁。
在图10A的例子中,为处理写命令,CPU 1010为写命令分配新的物理地址,并用新的物理地址更新FTL表项524,在t2时刻,CPU 1010完成对FTL表项1024的更新(图10A中,用Wg-t2指示)。以及还通过闪存接口向新的物理地址写入数据来响应写命令(在图10A中由W-t5指示)。
依然参看图10A,CPU 1014处理来自主机的读命令,根据该读命令的逻辑地址在t3时刻访问FTL表项1024(在图10A中由R-t3指示)。根据FTL表项1024获取要访问的物理地址。CPU 1014根据获取的物理地址,通过闪存接口访问NVM芯片1005(在图10A中由R-t4指示)。
在图10A的例子中,CPU 1014获取FTL表项1024(在图10A中由R-t3指示)发生在CPU1010更新FTL表项1024之后(图10A中,用Wg-t2指示),因而CPU 1014获取的是更新后的FTL表项1024。然而,CPU 1014通过闪存接口访问NVM芯片(在图10A中由R-t4指示)发生在CPU1010通过闪存接口向新的物理地址写入数据(在图10A中由W-t5指示)之前。因而可能的结果是,CPU 1014通过闪存接口用FTL表项1024提供的物理地址访问NVM芯片1005时,该物理地址所访问的存储单元尚未被写入数据,而且可能处于擦除状态。处于擦除状态的物理块中不具有有效数据,不应当被读取。
图10B是根据本发明图10A实施例的处理IO请求的顺序图,其展示了CPU 1014读到NVM芯片1005中的被擦除存储单元的原因。图10B中,时间轴展示了时间的流逝方向。响应于写命令1060,CPU 1010根据写命令1060指示的逻辑地址在t1时刻访问FTL表项1024(由图10A的W-t1指示),FTL表项1024被加锁,FTL表1024的物理地址指示NVM芯片1005的存储单元1050。在处理写命令(1060)过程中,接下来,FTL表项1024被CPU 1010更新,FTL表项1024更新后的物理地址指示存储单元1060。以及可选地FTL表项1024的锁被释放。
接下来,收到用户读命令(1070),CPU 1014处理用户读命令(1070),并获取FTL表项1024。由于CPU 1014获取FTL表项1024时机在FTL表项1024被CPU 1010更新之后,因而从FTL表项1024中获取的物理地址指示存储单元1060。
继续参看图10B,在t4时刻,CPU 1014向NVM芯片1005发出读命令,读取NVM芯片1005的物理地址1060(也参见图10A的R-t4);以及在t4时候之后的t5时刻,CPU 1010向NVM芯片1005的物理地址1060发出写命令(也参见图10A的W-t5)。NVM芯片1005在收到对物理地址1060的写命令之前,已经收到了对物理地址1060的读命令。
然而,在NVM芯片1005的物理地址1060被写入之前,其处于被擦除状态,并导致读命令无法被闪存接口正确处理。在现有技术中,诸如闪存的NVM存储介质的最小擦除单位是块,而最小读/写单位是页,块中包括多个页。因而在NVM芯片1005中,可能存在的状态,块中部分页已经被写入了数据,而其他页还处于被擦除的状态。
在根据本发明的实施例中(参看图10A),为解决上述问题,控制部件1004还维护写位置表1042。写位置表1042中记录了当前被写入块或块条带中当前要被写入的位置。当前要写入的位置可以是物理块中的页(由页地址或页号指示),也可以是块条带中的页条带中要被写入的位置。以及在根据本发明的实施例中,在响应写命令时,控制部件1004顺序地为写命令分配要写入的物理地址。例如,当前写位置是NVM芯片1005的第100块的第100页,在为写命令分配物理地址时,将第100块的第100页的物理地址分配给写命令,并将分配的物理地址记录在FTL表的表项中,以及使当前写位置递增(变为第100块的第101页)。而再次响应写命令时,为写命令分配新的当前写位置(第100块的第101页)的物理地址。可选地,控制部件1004在同一时刻仅向一个或少量的物理块写入数据,因而,写位置表1042中仅需提供一个或少量表项,而不会占据大量存储空间。在另一个例子中,当前写位置指示页条带中当前要被写入的逻辑单元(LUN),例如第100块条带的第100页条带的第3个逻辑单元所对应的页。在为写命令分配物理地址时,将第100块条带的第100页条带的第3个逻辑单元所对应的页的物理地址分配给写命令,并将分配的物理地址记录在FTL表的表项中,以及使当前写位置递增(变为第100块条带的第100页条带的第4个逻辑单元所对应的页)。而再次响应写命令时,为写命令分配新的当前写位置(第100块条带的第100页条带的第4个逻辑单元所对应的页)的物理地址。可选地,控制部件1004在同一时刻仅向一个或少量的块条带写入数据,因而,写位置表1042中仅需提供一个或少量表项,而不会占据大量存储空间。
控制部件1004还维护块状态表1040。在块状态表1040中,记录NVM芯片1005的每个物理块是处于擦除状态,还是处于已经被写入状态。在一个例子中,当物理块被擦除时,更新块状态表1040,以标识物理块处于被擦除状态。而当物理块被第一次写入时,更新块状态表1040,以标识物理块处于已写入状态。CPU 1014通过闪存接口向NVM芯片1005发出读命令前,用从FTL表项1024获取的物理地址得到该物理地址所在的物理块,并在块状态表1040中查询该物理块的状态。若该物理块处于已写入状态,则CPU 1014通过闪存接口向NVM芯片1005发出读命令;若该物理块处于被擦除状态,则CPU 1014指示重放读命令。
图11A是根据本发明的实施例的处理写命令的流程图。在根据图11A的实施例中,响应于收到访问第一FTL表项的逻辑地址的写命令(1102),检查第一FTL表项是否被加锁(1104)。若第一FTL表项被加锁,中止对该第一FTL表项的后续处理,并等待第一FTL表项的锁被释放。对第一FTL表项的后续处理是该写命令的处理的一部分。若第一FTL表项未被加锁,或者第一FTL表项的锁被释放,为处理该写命令,对第一FTL表项加锁(1106),以使得访问第一FTL表项的其他写命令暂时挂起。为处理该写命令,为该写命令分配第一物理地址,以第一物理地址更新第一FTL表项,将更新后的FTL表项写入FTL表,并释放第一FTL表项上的锁(1108)。为写命令分配新的物理地址可利用所属领域中已知的多种方式。以及将该写命令对应的数据写入第一物理地址(1109)。
在另一个例子中,在响应于收到第二写命令而访问写命令的逻辑地址对应的第一FTL表项时,发现第一FTL表项被加锁,则完成对第二写命令的处理,而不再为第二写命令分配物理地址,也不将第二写命令对应的数据写入非易失存储器。
图11B是根据本发明的实施例的处理读命令的流程图。响应于收到读命令,读命令的逻辑地址也对应第一FTL表项(1110)。对于读命令,不检查第一FTL表项是否被加锁。即使由于处理写命令,第一FTL表项已被加锁(参见图11A的步骤1106),在处理读命令时,也从FTL表中获取并使用被加锁的第一FTL表项,获取第一FTL表项提供的第一物理地址(1120)。接下来,依据第一物理地址获取对应的物理块或块条带,并比较物理块或块条带的当前写入位置是否超前于第一物理地址(1130)。从写位置表(参见图10,写位置表1042)中获取物理块或块条带的当前写入位置,并与从第一FTL表项中获取的第一物理地址进行比较。若当前写入位置超前于第一物理地址,表明第一物理地址已经被写入数据,从而向第一物理地址发出读命令并读出数据(1140)。若当前写入位置不超前或落后于第一物理地址,表明第一物理地址尚未被写入数据,此时无法从第一物理地址读出正确的数据,因而暂停对该读命令的处理,等待当前写入位置超前于第一物理地址。在当前写入位置超前于第一物理地址后,再从第一物理地址读出数据(1140)。
图11C是根据本发明的再一实施例的处理IO命令的流程图。响应于收到读命令,读命令的逻辑地址也对应第一FTL表项(1150)。对于读命令,不检查第一FTL表项是否被加锁。即使由于处理写命令,第一FTL表项已被加锁(参见图11A的步骤1106),在处理读命令时,也从FTL表中获取并使用被加锁的第一FTL表项,获取第一FTL表项提供的第一物理地址(1160)。接下来,依据第一物理地址获取对应的物理块或块条带,从块状态表(参见图5A,540)或块条带状态表(参见图7,740)中获取对应的物理块或块条带的状态。若获取的状态指示第一物理地址所在的物理块或块条带处于被擦除状态(1170),则重放读命令,换句话说,通过步骤1150重新处理该读命令。若获取的状态指示第一物理地址所在的物理块或块条带处于已写入状态(1170),依据第一物理地址获取对应的物理块或块条带,并比较物理块或块条带的当前写入位置是否超前于第一物理地址(1180)。从写位置表(参见图10,写位置表1042)中获取物理块或块条带的当前写入位置,并与从第一FTL表项中获取的第一物理地址进行比较。若当前写入位置超前于第一物理地址,表明第一物理地址已经被写入数据,从而向第一物理地址发出读命令并读出数据(1190)。若当前写入位置不超前或落后于第一物理地址,表明第一物理地址尚未被写入数据,此时无法从第一物理地址读出正确的数据,因而暂停对该读命令的处理,等待当前写入位置超前于第一物理地址。在当前写入位置超前于第一物理地址后,再从第一物理地址读出数据(1190)。
图12A是根据本发明的另一实施例的处理IO命令的流程图。在图12A的实施例中,响应于收到读命令,读命令的逻辑地址对应第一FTL表项(1210)。对于读命令,不检查第一FTL表项是否被加锁。即使由于处理写命令,第一FTL表项已被加锁,在处理读命令时,也从FTL表中获取并使用被加锁的第一FTL表项,获取第一FTL表项提供的第一物理地址(1220)。接下来,依据第一物理地址向NVM发送读命令,以从第一物理地址读出数据(1225)。在读取数据的结果中指示第一地址对应的物理页是否处于擦除状态(1230)。若读取数据结果指示第一物理地址对应的物理页处于擦除状态,进一步判断当前写入位置是否超前于第一物理地址(1245)。作为举例,依据第一物理地址获取对应的物理块或块条带,并从写位置表(参见图10,写位置表1042)中获取物理块或块条带的当前写入位置。若当前写入位置超前于第一物理地址,表明第一物理地址已经被写入数据,从而向第一物理地址发出读命令并读出数据(1248)。若当前写入位置不超前或落后于第一物理地址,表明第一物理地址尚未被写入数据,此时无法从第一物理地址读出正确的数据,因而暂停对该读命令的处理,等待当前写入位置超前于第一物理地址。在当前写入位置超前于第一物理地址后,再从第一物理地址读出数据(1248)。若读取数据结果指示第一物理地址对应的物理页非处于已擦除状态(1230),则所读取的数据有效,以读取的数据作为对读命令的响应,读命令处理完成(1240)。
在图12A的实施例中,在获得第一物理地址后,不首先检查第一物理地址所在的物理块或块条带是否处于擦除状态。因为第一物理地址所在的物理块或块条带处于擦除状态的机率很低,在大多数情况下,检查是否处于擦除状态的操作将引入额外的延迟。在图12A的实施例中,在获得第一物理地址后,不首先检查第一物理地址所在的物理块或块条带是否处于擦除状态,而直接从第一物理地址读出数据,并依赖于读取数据结果提供的指示来判断所读取的物理页是否处于擦除状态。从而仅在所读取的物理页处于擦除状态时,进行额外的处理,降低了读命令的平均处理延迟。
图12B是根据本发明的另一实施例的处理IO命令的流程图。图12B的实施例同图9A的实施例相似,差别之处在于,当从第一物理地址读出数据,在读取数据的结果中判断第一地址对应的物理页是否处于擦除状态时(1230),若读取数据结果指示第一物理地址对应的物理页处于擦除状态,依据第一物理地址获取对应的物理块或块条带,从块状态表(参见图5A,540)或块条带状态表(参见图7,740)中获取对应的物理块或块条带的状态1250)。若第一物理地址所在的物理块或块条带处于已写入状态(1250),则进一步判断判断当前写入位置是否超前于第一物理地址(1260)。若当前写入位置超前于第一物理地址,表明第一物理地址已经被写入数据,从而向第一物理地址发出读命令并读出数据(1270)。若当前写入位置不超前或落后于第一物理地址,表明第一物理地址尚未被写入数据,此时无法从第一物理地址读出正确的数据,因而暂停对该读命令的处理,等待当前写入位置超前于第一物理地址。在当前写入位置超前于第一物理地址后,再从第一物理地址读出数据(1270)。若第一物理地址所在的物理块或块条带处于被擦除状态(1250),则再次访问第一FTL表项并从第一FTL表项获取更新后的第二物理地址(1255)。以及接下来,判断第二物理地址与当前写入位置的关系(1260)并进行后续处理。
本发明实施例还提供一种包含程序代码的程序,当被载入CPU并在CPU中执行时,程序使CPU执行上面提供的根据本发明实施例的方法之一。
本发明实施例还提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序使存储设备的处理器执行上面提供的根据本发明实施例的方法之一。
应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。
这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作操作,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的操作。
因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的操作的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或操作的、基于硬件的专用计算机系统实现,或由专用硬件和计算机指令的组合实现。
虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本发明的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本发明的范围。
这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本发明的很多修改和其他实施方式。因此,应该理解,本发明不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。
Claims (10)
1.一种处理IO请求的方法,包括:
响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;以及
若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
2.根据权利要求1所述的方法,还包括:
从第一物理地址读取数据以响应所述第一读请求。
3.一种处理IO请求的方法,包括:
响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;
若包含第一物理地址的物理块或大块处于已写入状态,以及若当前写入位置超前于第一物理地址,从第一物理地址读取数据以响应所述第一读请求。
4.根据权利要求3所述的方法,还包括:
若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
5.一种处理IO请求的方法,包括:
响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;
从第一物理地址读取数据;
若从第一物理地址读取数据的结果指示第一物理地址所在的物理页处于擦除状态,若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
6.一种处理IO请求的方法,包括:
响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;
从第一物理地址读取数据;
若从第一物理地址读取数据的结果指示第一物理地址所在的物理页处
于擦除状态,以及包含第一物理地址的物理块或大块处于已写入状态,若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
7.根据权利要求6所述的方法,还包括:
若从第一物理地址读取数据的结果指示第一物理地址所在的物理页处
于擦除状态,以及包含第一物理地址的物理块或大块处于被擦除状态,第一读请求对应的第一FTL表项,获取第一FTL表项记录的第二物理地址;以及
从第二物理地址读取数据。
8.根据权利要求7所述的方法,还包括:
从获取第一FTL表项记录的第二物理地址后,若当前写入位置落后于第二物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第二物理地址。
9.一种处理IO请求的方法,包括:
响应于收到写请求,访问写请求对应的第一FTL表项,若第一FTL表项未被加锁,则对第一FTL表项加锁;为所述写请求分配第一物理地址,以第一物理地址更新第一FTL表项,对第一FTL表项解锁,向第一物理地址写入数据,以及更新当前写入位置;以及
响应于收到读请求,访问读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
10.一种处理IO请求的装置,包括:
FTL表访问模块,用于响应于收到第一读请求,访问第一读请求对应的第一FTL表项,获取第一FTL表项记录的第一物理地址;以及
当前写入位置处理模块,用于若当前写入位置落后于第一物理地址,暂停对第一读请求的处理,直到当前写入位置超前于第一物理地址。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010887341.0A CN111831589A (zh) | 2016-07-01 | 2016-07-01 | 提高io命令处理并行性的方法与装置 |
CN201610509669.2A CN107562654B (zh) | 2016-07-01 | 2016-07-01 | Io命令处理方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610509669.2A CN107562654B (zh) | 2016-07-01 | 2016-07-01 | Io命令处理方法与装置 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010887341.0A Division CN111831589A (zh) | 2016-07-01 | 2016-07-01 | 提高io命令处理并行性的方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107562654A true CN107562654A (zh) | 2018-01-09 |
CN107562654B CN107562654B (zh) | 2020-10-09 |
Family
ID=60969177
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610509669.2A Active CN107562654B (zh) | 2016-07-01 | 2016-07-01 | Io命令处理方法与装置 |
CN202010887341.0A Pending CN111831589A (zh) | 2016-07-01 | 2016-07-01 | 提高io命令处理并行性的方法与装置 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010887341.0A Pending CN111831589A (zh) | 2016-07-01 | 2016-07-01 | 提高io命令处理并行性的方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN107562654B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110716691A (zh) * | 2018-07-13 | 2020-01-21 | 华为技术有限公司 | 调度方法、装置、闪存设备和系统 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113485641B (zh) * | 2021-06-29 | 2024-04-16 | 成都忆芯科技有限公司 | 处理io命令的方法及其控制部件 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103135945A (zh) * | 2013-03-25 | 2013-06-05 | 中国人民解放军国防科学技术大学 | 用于ssd的多通道动态读写调度方法 |
CN103336669A (zh) * | 2013-05-21 | 2013-10-02 | 华中科技大学 | 一种基于固态盘内部并行性的i/o调度方法及调度器 |
CN103631624A (zh) * | 2013-11-29 | 2014-03-12 | 华为技术有限公司 | 读写请求的处理方法和装置 |
CN104166634A (zh) * | 2014-08-12 | 2014-11-26 | 华中科技大学 | 一种固态盘系统中的映射表缓存管理方法 |
US8949835B2 (en) * | 2010-11-30 | 2015-02-03 | Red Hat, Inc. | Yielding input/output scheduler to increase overall system throughput |
CN104360965A (zh) * | 2014-12-09 | 2015-02-18 | 浪潮电子信息产业股份有限公司 | 一种cfq调度方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103150261B (zh) * | 2013-03-11 | 2017-02-08 | 北京忆恒创源科技有限公司 | 用于同时访问多个固态盘的方法与装置 |
CN105159622B (zh) * | 2015-10-22 | 2016-10-12 | 湖南国科微电子股份有限公司 | 一种减小ssd读写io时延的方法与系统 |
-
2016
- 2016-07-01 CN CN201610509669.2A patent/CN107562654B/zh active Active
- 2016-07-01 CN CN202010887341.0A patent/CN111831589A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8949835B2 (en) * | 2010-11-30 | 2015-02-03 | Red Hat, Inc. | Yielding input/output scheduler to increase overall system throughput |
CN103135945A (zh) * | 2013-03-25 | 2013-06-05 | 中国人民解放军国防科学技术大学 | 用于ssd的多通道动态读写调度方法 |
CN103336669A (zh) * | 2013-05-21 | 2013-10-02 | 华中科技大学 | 一种基于固态盘内部并行性的i/o调度方法及调度器 |
CN103631624A (zh) * | 2013-11-29 | 2014-03-12 | 华为技术有限公司 | 读写请求的处理方法和装置 |
CN104166634A (zh) * | 2014-08-12 | 2014-11-26 | 华中科技大学 | 一种固态盘系统中的映射表缓存管理方法 |
CN104360965A (zh) * | 2014-12-09 | 2015-02-18 | 浪潮电子信息产业股份有限公司 | 一种cfq调度方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110716691A (zh) * | 2018-07-13 | 2020-01-21 | 华为技术有限公司 | 调度方法、装置、闪存设备和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107562654B (zh) | 2020-10-09 |
CN111831589A (zh) | 2020-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI709073B (zh) | 分佈式儲存系統、分佈式儲存方法及分佈式設施 | |
CN102598019B (zh) | 用于分配存储的设备、系统和方法 | |
US10152501B2 (en) | Rollover strategies in a n-bit dictionary compressed column store | |
JP5603997B2 (ja) | ストレージ装置及びデータ制御方法 | |
CN104765575B (zh) | 信息存储处理方法 | |
CN109085997A (zh) | 用于非易失性存储器的存储器高效持续键值储存 | |
US9535628B2 (en) | Memory system with shared file system | |
US11461049B2 (en) | Method for controlling write and read operations in the nonvolatile memory by a host, using an identifier for a region | |
US10503424B2 (en) | Storage system | |
JP2008508596A (ja) | Nvramを使用するメモリ管理のためのシステム、方法、コンピュータ可読媒体、および装置 | |
CN107256196A (zh) | 基于闪存阵列的支持零拷贝的缓存系统及方法 | |
CN111078607A (zh) | 面向rdma与非易失性内存的网络访问编程框架部署方法及系统 | |
US20180307426A1 (en) | Storage apparatus and storage control method | |
CN106909516A (zh) | 存储系统及其操作方法 | |
CN107562648A (zh) | 无锁ftl访问方法与装置 | |
CN104778100A (zh) | 一种安全备份数据的方法 | |
CN107562654A (zh) | Io命令处理方法与装置 | |
US10282116B2 (en) | Method and system for hardware accelerated cache flush | |
CN107562639A (zh) | 擦除块读请求处理方法与装置 | |
TW201935247A (zh) | 目錄資料的管理方法與記憶體裝置 | |
WO2023165448A1 (zh) | 一种地址管理方法及存储装置 | |
CN109002265A (zh) | 一种数据处理的方法以及相关装置 | |
JP7238178B2 (ja) | メモリ装置及びメモリ装置を制御する方法 | |
CN105511811A (zh) | 一种提高文件系统吞吐量的方法与系统 | |
WO2024093090A1 (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing Patentee after: Beijing yihengchuangyuan Technology Co.,Ltd. Address before: 100192 Room 302, 3 / F, building B-2, Dongsheng Science Park, 66 xixiaokou Road, Haidian District, Beijing Patentee before: MEMBLAZE TECHNOLOGY (BEIJING) Co.,Ltd. |
|
CP03 | Change of name, title or address |