降低锁引起的io命令冲突的方法与存储设备

文档序号:1708464 发布日期:2019-12-13 浏览:5次 >En<

阅读说明:本技术 降低锁引起的io命令冲突的方法与存储设备 (method for reducing IO command conflict caused by lock and storage device ) 是由 张志青 秦汉张 徐凯 于 2018-06-06 设计创作,主要内容包括:本申请公开了降低锁引起的IO命令冲突的方法与存储设备。所公开的IO命令处理方法包括以下步骤:获取第一IO命令;若同第一IO命令访问的地址对应的等待队列中有第二IO命令,从等待队列中获取并处理所述第二IO命令;将第一IO命令添加到所述等待队列。(the application discloses a method and storage equipment for reducing IO command conflict caused by locks. The disclosed IO command processing method includes the steps of: acquiring a first IO command; if a second IO command exists in a waiting queue corresponding to the address accessed by the first IO command, acquiring and processing the second IO command from the waiting queue; adding a first IO command to the wait queue.)

降低锁引起的IO命令冲突的方法与存储设备

技术领域

本申请涉及存储设备,具体涉及在存储设备中对多个IO命令的并发处理中减少因请求锁而引起的冲突。

背景技术

图1是现有技术的固态存储设备的框图,如图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-programmable gatearray,现场可编程门阵列)、ASIC(Application Specific Integrated Circuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器。控制部件104在运行时从固件存储器110加载固件。固件存储器110可以是NOR闪存、ROM、EEPROM,也可以是NVM芯片105的部分。NAND闪存、相变存储器、FeRAM、MRAM等是常见的NVM。

存储器目标(Target)是NAND闪存封装内的共享芯片使能(CE,Chip Enable)信号的一个或多个逻辑单元(LUN,Logic UNit)。NAND闪存封装内可包括一个或多个管芯(Die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(Plane)。逻辑单元内的多个平面可以并行存取,而NAND闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。在可从http://www.micron.com/~/media/Documents/Products/Other%20Documents/ON FI3_0Gold.ashx获得的“Open NAND Flash Interface Specification(Revision3.0)”中,提供了关于目标(target)、逻辑单元、LUN、平面(Plane)的含义,其为现有技术的一部分。

存储介质上通常按页来存储和读取数据。而按块来擦除数据。块包含多个页。块包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。物理页中可以包括多个数据段,数据段具有指定的尺寸,例如4096或4416字节。

在固态存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。

存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。FTL表包括多个FTL表条目(或称表项)。

来自主机的IO命令包括例如读命令与写命令。在处理来自主机的读命令时,固态存储设备利用读命令中携带的逻辑地址从FTL表中获得对应的物理地址,并依据物理地址向NVM芯片发出读请求,并接收NVM芯片响应于读请求输出的数据。在处理来自主机的写命令时,固态存储设备为写命令分配物理地址,在FTL表中记录写命令的逻辑地址与分配的物理地址的对应关系,并依据分配的物理地址向NVM芯片发出写请求。

发明内容

在存储设备中,同时处理多个IO命令,几乎每个IO命令都需要访问FTL表。使用锁机制为访问相同FTL表项两个或更多IO命令消除访问冲突。然而,在一些情况下,因频繁请求同一锁而导致一些IO命令长期得不到锁而显著增大了这些IO命令的处理时间,对用户体验带来不良影响。

根据本申请的实施例确保IO命令能在指定时间内被处理,而提升存储设备的服务质量。

根据本申请的第一方面,提供了根据本申请第一方面的第一IO命令处理方法,其中,包括如下步骤:获取第一IO命令;若同第一IO命令访问的地址对应的等待队列中有第二IO命令,从等待队列中获取并处理所述第二IO命令;将第一IO命令添加到所述等待队列。

根据本申请第一方面的第一IO命令处理方法,提供了本申请第一方面的第二IO命令处理方法,其中,若等待队列中没有待处理的第二IO命令,则处理第一IO命令。

根据本申请第一方面的第二IO命令处理方法,提供了本申请第一方面的第三IO命令处理方法,其中,根据第一IO命令访问的逻辑地址请求同第一IO命令访问的逻辑地址对应的FTL表项的锁,响应于得到锁,而继续处理第一IO命令。

根据本申请第一方面的第三IO命令处理方法,提供了本申请第一方面的第四IO命令处理方法,其中,若请求锁失败,将第一IO命令添加到所述等待队列的队尾。

根据本申请第一方面的第一至四任一项的IO命令处理方法,提供了本申请第一方面的第五IO命令处理方法,其中,若所述等待队列中有待处理的第二IO命令,则优先处理第二IO命令,而将第一IO命令添加到所述等待队列的队尾。

根据本申请第一方面的第一至五任一项的IO命令处理方法,提供了本申请第一方面的第六IO命令处理方法,其中,为处理第二IO命令,根据第二IO命令访问的逻辑地址请求对应的FTL表项的锁。

根据本申请第一方面的第六IO命令处理方法,提供了本申请第一方面的第七IO命令处理方法,其中,若响应于为第二IO命令访问的逻辑地址得到锁,将第二IO命令从所述等待队列移除。

根据本申请第一方面的第六IO命令处理方法,提供了本申请第一方面的第八IO命令处理方法,其中,若为第二IO命令访问的逻辑地址请求锁失败,将第二IO命令保留在等待队列的队头。

根据本申请第一方面的第一至八任一项的IO命令处理方法,提供了本申请第一方面的第九IO命令处理方法,其中,从一个或多个等待队列的队头获取第二IO命令。

根据本申请第一方面的第一至九任一项的IO命令处理方法,提供了本申请第一方面的第十IO命令处理方法,其中,沿地址递增的方向,IO命令访问的地址空间被分为多个区域,每个区域被映射到多个等待队列之一。

根据本申请第一方面的第十IO命令处理方法,提供了本申请第一方面的第十一IO命令处理方法,其中,将各逻辑地址区域轮流映射到等待队列之一。

根据本申请第一方面的第十或十一IO命令处理方法,提供了本申请第一方面的第十二IO命令处理方法,其中,每个逻辑地址区域具有可配置的大小。

根据本申请第一方面的第十IO命令处理方法,提供了本申请第一方面的第十三IO命令处理方法,其中,将逻辑地址空间分为同等待队列数量相同的区域,每个区域被映射到一个等待队列。

根据本申请第一方面的第十IO命令处理方法,提供了本申请第一方面的第十四IO命令处理方法,其中,不论IO命令的逻辑地址范围,而将IO命令轮流映射到等待队列之一。

根据本申请第一方面的第十至十四任一项的IO命令处理方法,提供了本申请第一方面的第十五IO命令处理方法,其中,以随机的方式将逻辑地址区域映射到各等待队列。

根据本申请的第二方面,提供了根据本申请第二方面的第一IO命令处理方法,其中,包括如下步骤:选择IO命令来源,从被选择的IO命令来源获取IO命令;根据IO命令访问的逻辑地址,请求同逻辑地址对应FTL表项的锁;若请求锁失败,判断IO命令是否来自等待队列;若IO命令来自等待队列,将IO命令留在等待队列队头。

根据本申请第二方面的第一IO命令处理方法,提供了本申请第二方面的第二IO命令处理方法,其中,各个IO命令来源具有优先级,根据优先级选择IO命令来源。

根据本申请第二方面的第一或二IO命令处理方法,提供了本申请第二方面的第三IO命令处理方法,其中,等待队列具有更高的优先级。

根据本申请第二方面的第一至三任一项的IO命令处理方法,提供了本申请第二方面的第四IO命令处理方法,其中,若请求锁成功,将所述IO命令从等待队列移除。

根据本申请第二方面的第一至三任一项的IO命令处理方法,提供了本申请第二方面的第五IO命令处理方法,其中,响应于将所述IO命令留在等待队列队头,再次选择IO命令来源以获取IO命令。

根据本申请第二方面的第一至五任一项的IO命令处理方法,提供了本申请第二方面的第六IO命令处理方法,其中,若请求锁失败,反复尝试为所述IO命令请求锁,直到成功请求到锁,将所述IO命令从等待队列移除。

根据本申请第二方面的第一至五任一项的IO命令处理方法,提供了本申请第二方面的第七IO命令处理方法,其中,当没有任何等待队列的队头的IO命令可被处理时,从其他来源获取IO命令。

根据本申请第二方面的第二至七任一项的IO命令处理方法,提供了本申请第二方面的第八IO命令处理方法,其中,CPU每处理N个来自等待队列的IO命令,才处理M个来自其他命令来源的IO命令,其中M与N均为整数,N大于M。

根据本申请第二方面的第一IO命令处理方法,提供了本申请第二方面的第九IO命令处理方法,其中,轮流或依据权值轮流地选择IO命令来源。

根据本申请第二方面的第二IO命令处理方法,提供了本申请第二方面的第十IO命令处理方法,其中,若短时间内的IO命令集中访问小的逻辑地址范围,为等待队列设置较高的优先级。

根据本申请第二方面的第一IO命令处理方法,提供了本申请第二方面的第十一IO命令处理方法,其中,若IO命令不是来自等待队列,根据所述IO命令访问的逻辑地址确定与所述逻辑地址对应的等待队列,将所述IO命令添加到所述等待队列的队尾,并再次选择IO命令来源以获取IO命令。

根据本申请的第三方面,提供了根据本申请第三方面的第一IO命令处理方法,其中,包括如下步骤:将待处理的IO命令拆分为多个子命令;若同第一子命令访问的地址对应的等待队列中有第二子命令,从等待队列中获取并处理所述第二子命令;将第一子命令添加到所述等待队列。

根据本申请的第三方面的第一IO命令处理方法,提供了根据本申请第三方面的第二IO命令处理方法,其中,每个子命令的地址对应FTL表的一个表项。

根据本申请的第三方面的第一至二任一项的IO命令处理方法,提供了本申请第三方面的第三IO命令处理方法,其中,当IO命令的所有子命令被处理完成,IO命令被处理完成。

根据本申请的第三方面的第一IO命令处理方法,提供了本申请第三方面的第四IO命令处理方法,其中,选择子命令来源,从被选择的子命令来源获取子命令;若子命令暂时无法被处理,且子命令来自等待队列,将子命令留在等待队列队头。

根据本申请的第三方面的第四IO命令处理方法,提供了本申请第三方面的第五IO命令处理方法,其中,若子命令暂时无法被处理,且子命令并非来自等待队列,将子命令添加到同子命令访问的地址对应的等待队列的队尾。

根据本申请第四方面,提供了根据本申请第四方面的第一存储设备,其中,包括控制部件和非易失性存储器,所述控制部件用于执行根据本申请第一到第三方面的IO命令处理方法。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1为本申请提供的现有技术的存储设备的内部结构示意图;

图2为本申请实施例的存储设备的控制部件的内部结构示意图;

图3为本申请实施例的IO命令访问的逻辑地址与等待队列的映射的示意图;

图4为本申请实施例的处理IO命令示意图;

图5为本申请实施例的处理IO命令的流程图;

图6为本申请又一实施例的处理IO命令的流程图;

102—存储设备;103—接口;104—控制部件;

105—非易失性存储器;110—外部存储器;210—主机接口;

220—介质接口;230—命令分配单元;240—CPU;

250—CPU;260—FTL表;270—FTL表。

具体实施方式

下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图2展示了存储设备的控制部件的框图。控制部件104包括主机接口210、命令分配单元230、用于处理IO命令的多个CPU(例如,CPU 240与CPU 250)、用于访问NVM芯片105的介质接口220。

主机接口210用于同主机交换命令与数据。在一个例子中,主机与存储设备通过NVMe/PCIe协议通信,主机接口210处理PCIe协议数据包,提取出NVMe协议命令,并向主机返回NVMe协议命令的处理结果。

命令分配单元230耦合到主机接口210,接收主机发送给存储设备的IO命令,并将IO命令分配给用于处理IO命令的多个CPU之一。命令分配单元230可由CPU或专用硬件实现。控制部件104还耦合到外部存储器(例如,DRAM)110。存储器110的部分空间被用于存储FTL表(例如,FTL表260与FTL表270)。在图2的例子中,将存储设备提供的完整逻辑地址空间分成多个部分,每个部分由FTL表之一(FTL表260或FTL表270)提供。可选地,使用单一的FTL表来映射存储设备的完整逻辑地址空间。

可选地,FTL表与处理IO命令的CPU一一对应。例如,FTL表260仅由CPU 240访问,而FTL表270仅由CPU 250访问。命令分配单元230根据IO命令访问的逻辑地址,将IO命令发送给管理包含IO命令所访问的逻辑地址的FTL表的CPU。

依然可选地,CPU 240与CPU 250的任何一个都可访问完整的FTL表。

可以理解的,可提供一个或更多数量的CPU处理IO命令。

对于写命令,在例如CPU 240的指示下,要写入的数据被通过主机接口210从主机传输到NVM芯片105。CPU 240为写命令分配用于NVM芯片105的物理地址,将写命令的逻辑地址与分配的物理地址构成FTL表项并记录在FTL表中。

对于读命令,在例如CPU 240的指示下,依据读命令的逻辑地址访问FTL表获取同逻辑地址对应的物理地址,并依据物理地址从NVM芯片105读取数据,并将数据通过主机接口210传输给主机。

CPU对每个IO命令的处理需占据一定时间并使用存储设备的部分资源(例如,存储数据的存储器、记录IO命令上下文的缓存、和/或访问FTL表项)。对IO命令的处理的部分环节(例如,访问FTL表,访问NVM芯片,同主机传输数据等)采用异步方式执行。在异步处理IO命令期间,CPU处理其他IO命令,从而即使单一的CPU,也并发地处理多个IO命令。

将固态存储设备中已经开始处理而尚未处理完成的IO命令,称为处理中的IO命令。以及需要避免多个处理中的IO命令访问相同的逻辑地址引起的冲突。

根据本申请的实施例,为FTL表的每个表项提供锁来避免多个处理中的IO命令访问相同的FTL表项而产生冲突。为访问FTL表项,要先请求同待访问表项对应的锁。锁指示同其对应的FTL表项是否已被使用。对于已被使用的锁,在锁被释放前,无法被再次请求到,从而确保对于一FTL表项,在同一时刻,仅被用于处理一个IO命令。可选地,仅为处理写命令而请求FTL表项的锁,而对于读命令,无须请求FTL表项的锁。

继续参看图2,CPU 240耦合到等待队列1,而CPU 250耦合到等待队列2。作为举例,CPU 240从命令分配单元230收到IO命令后,若为IO命令请求FTL表项的锁失败,将该IO命令添加到等待队列1。以及CPU 240可继续处理从分配单元220获取的其他IO命令。CPU 240还从等待队列1中获取IO命令,并再次为获取的IO命令请求FTL表项的锁。若为从等待队列1获取的IO命令请求FTL表项的锁再次失败,该IO命令依然被置于等待队列1中。若为从等待队列1获取的IO命令请求FTL表项的锁成功,CPU 240将该IO命令从等待队列中取出,并对该IO命令进行处理。

为防止因对等待队列中的IO命令请求FTL表项的锁反复失败而导致对该IO命令的处理时间显著增加,在根据本申请的实施例中,CPU使用适当的策略来选择来自等待队列的IO命令与来自命令分配单元230的IO命令。

在一个例子中,在等待队列有待处理IO命令的情况下,CPU相对于命令分配单元230而优先从等待队列获取IO命令。当从等待队列获取的IO命令无法得到FTL表项的锁时,再处理来自命令分配单元230的IO命令。此时若从命令分配单元230获取的IO命令也无法得到FTL表项的锁,将该IO命令添加到等待队列的队尾。而在从等待队列获取IO命令时,从队头获取。

在又一个例子中,CPU相对于命令分配单元230而优先从等待队列获取IO命令。在等待队列有待处理IO命令的情况下,CPU每处理N个来自等待队列的IO命令,才处理M个来自命令分配单元230的IO命令,其中M与N均为整数,N大于M。

图3展示了根据本申请实施例的IO命令访问的逻辑地址与等待队列的映射的示意图。存储设备向主机展示了可访问的逻辑地址。在图3中,沿逻辑地址(LBA)递增的方向,逻辑地址空间被分为多个区域(302、304……324),每个区域被映射到多个等待队列(等待队列1、等待队列2、等待队列3与等待队列4)之一。

可选地,将各逻辑地址区域轮流映射到等待队列之一。例如,将区域302映射到等待队列1,将区域304映射到等待队列2,将区域306映射到等待队列3,将区域308映射到等待队列4。接下来发生回绕,将区域310映射到等待队列1,使得来自主机的IO命令被尽量均匀地映射给各个等待队列。每个逻辑地址区域的大小可配置。例如,每个逻辑地址区域同每个FTL表项指示的逻辑地址范围大小相同,例如4KB。

可以理解地,逻辑地址空间有其他划分方式。例如,将逻辑地址空间分为同等待队列数量相同的区域,每个区域被映射到一个等待队列。或者不论IO命令的LBA范围,而将IO命令轮流映射到等待队列之一。

图3中,作为举例,具有相同图案的区域被映射到相同的等待队列。可选地,以随机的方式将逻辑地址区域映射到各等待队列。

将逻辑地址区域映射到各等待队列,以降低临近时间内收到的访问不同逻辑地址的多个IO命令被映射到相同等待队列的几率。从而避免等待队列中在后的IO命令,因在前的IO命令申请不到锁,而长期得不到处理。以及由于一个等待队列中的多个IO命令可能访问相同的逻辑地址,依次处理这些IO命令,在前的IO命令被处理后对应的锁被释放,使得在后的IO命令将容易得到锁,从而降低了申请锁失败的几率,降低了IO命令处理延迟,也避免了频繁申请锁引起的处理资源浪费。

图4展示了根据本申请实施例处理IO命令的示意图。

CPU(例如,CPU 240,也参看图2)从多种来源获取待处理的IO命令。多种来源包括命令分配单元230,一个或多个等待队列。CPU选择来源之一获取IO命令。作为举例,为各来源设置优先级,CPU根据优先级处理从来源之一获取的IO命令。

在一个例子中,等待队列相对于命令分配单元230,具有更高的优先级。在一个或多个等待队列中有待处理IO命令时,从等待队列获取IO命令并处理。进一步地,从等待队列的队头获取IO命令。对从等待队列获取的IO命令,请求同其访问的逻辑地址对应的锁。若请求锁成功,将该IO命令从等待队列移除,并处理该IO命令。若请求锁失败,将该IO命令留在等待队列中,并选择其他来源获取IO命令。在可选的实施方式中,若请求锁失败,反复尝试为该IO命令请求锁,直到成功请求到锁,将该IO命令从等待队列移除,并处理该IO命令。当没有任何等待队列的队头的IO命令可被处理时(等待队列为空,或者非空的等待队列的队头的IO命令请求不到锁),从命令分配单元230获取IO命令。

在又一个例子中,轮流从各来源获取IO命令。对于从等待队列队头获取的IO命令,请求同其访问的逻辑地址对应的锁。若请求锁成功,将该IO命令从等待队列移除,并处理该IO命令。若请求锁失败,将该IO命令留在等待队列中。对于从命令分配单元230获取的IO命令,请求同其访问的逻辑地址对应的锁。若请求锁成功,处理该IO命令;若请求锁失败,将该IO命令添加到等待队列之一的队尾。根据IO命令访问的逻辑地址与等待队列的映射关系,选择容纳该IO命令的等待队列(也参看图3)。

在依然又一个例子中,在各来源有待处理IO命令的情况下,CPU每处理N个来自等待队列的IO命令,相应地处理M个来自命令分配单元230的IO命令,其中M与N均为整数。通过设置M与N的值,来实现从命令处理单元与等待队列获取IO命令的优先级。在此情况下,将多个等待队列视为整体,同命令处理单元来源可设置差异化的获取IO命令的优先级,来适应不同的业务场景。例如,若短时间内的IO命令集中访问小的逻辑地址范围,导致有较大几率发生IO命令请求不到锁,为作为整体的等待队列设置较高的优先级,以避免等待队列中的IO命令被来自命令分配单元230的IO命令频繁抢占。

以此方式,因得不到锁而暂时无法处理的IO命令被置入等待队列。各等待队列中的IO命令被按进入等待队列的顺序依次处理。从而避免了在先获得的IO命令被在后获得的IO命令抢占锁,而导致在先的IO命令长期得不到处理。

图5是根据本申请实施例的处理IO命令的流程图,由CPU 240或CPU 250(也参看图2)执行。

示例性地,CPU 240从命令分配单元230获取第一IO命令(510),并获得第一IO命令访问的逻辑地址,根据第一IO命令访问的逻辑地址得到该逻辑地址被映射到的第一等待队列(例如,等待队列2)。CPU 240检查第一IO命令的逻辑地址被映射的等待队列(例如,等待队列2)是否有待处理的IO命令(520)。若等待队列2中没有待处理的IO命令,则处理第一IO命令(550),根据第一IO命令访问的逻辑地址请求同第一IO命令访问的逻辑地址对应的FTL表项的锁,响应于得到锁,而继续处理第一IO命令。若请求锁失败,将第一IO命令添加到等待队列2的队尾。

CPU 240检查等待队列2时,若发现等待队列2中有待处理的IO命令(520),则优先处理等待队列2中的待处理的IO命令(530),而将第一IO命令添加到等待队列2的队尾(540)。

例如,为处理等待队列2中的待处理的IO命令,从等待队列2的队头获取第二IO命令,根据第二IO命令访问的逻辑地址请求对应的FTL表项的锁,响应于为第二IO命令访问的逻辑地址得到锁,而继续处理第二IO命令。若为第二IO命令访问的逻辑地址请求锁失败,将第二IO命令保留在等待队列2的队头。

接下来CPU 240继续从命令分配单元230获取IO命令。若命令分配单元230尚无待处理命令,也从一个或多个等待队列的队头获取IO命令。

图6是根据本申请又一实施例的处理IO命令的流程图,也由CPU 240或CPU 250(也参看图2)执行。

为处理IO命令,例如CPU 240选择从中获取IO命令的IO命令来源(610)。IO命令来源可以是命令分配单元230,或者一个或多个等待队列。可选地,为各个IO命令来源设置优先级,根据优先级来选择IO命令来源,并从选中的IO命令来源获取IO命令。依然可选地,轮流或依据权值轮流地选择IO命令来源。

对于从选中的命令来源获取的IO命令,根据IO命令访问的逻辑地址,请求同逻辑地址对应FTL表项的锁(620)。若请求锁成功,根据获取到的物理地址继续处理IO命令(640)。

若请求锁失败,依据IO命令的来源是等待队列还是命令分配单元采用不同的处理方式。若IO命令来自命令分配单元,根据IO命令访问的逻辑地址确定对应的等待队列,将IO命令添加到该等待队列的队尾(630)。再次选择IO命令来源以获取IO命令。若IO命令来自等待队列,则将IO命令留在等待队列的队头而不对其进一步处理,再次选择IO命令来源以获取IO命令。

在可选的实施方式中,从命令分配单元获取的IO命令访问对应一个或多个FTL表项的逻辑地址。例如CPU 240还将从命令分配单元获取的IO命令拆分为子命令,每个子命令访问FTL表的一个表项。对每个子命令进行处理,请求对应的FTL表项的锁,若请求锁成功,根据从FTL表项获取到的物理地址继续处理子命令。若为子命令请求对应的FTL表项的锁失败,将子命令依据其逻辑地址添加到等待队列之一。以及当IO命令的所有子命令被处理完成,IO命令被处理完成。

在依然可选的实施方式中,以根据本申请提供的实施方式仅处理读命令或者仅处理写命令。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

13页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种数据处理装置及方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类