CN109901785B - 命令排序方法、降低读时延方法及固态硬盘ssd控制器 - Google Patents

命令排序方法、降低读时延方法及固态硬盘ssd控制器 Download PDF

Info

Publication number
CN109901785B
CN109901785B CN201711295818.0A CN201711295818A CN109901785B CN 109901785 B CN109901785 B CN 109901785B CN 201711295818 A CN201711295818 A CN 201711295818A CN 109901785 B CN109901785 B CN 109901785B
Authority
CN
China
Prior art keywords
command
tag
read
scheduling
die
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.)
Active
Application number
CN201711295818.0A
Other languages
English (en)
Other versions
CN109901785A (zh
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.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Cloud Computing Technologies 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 Huawei Cloud Computing Technologies Co Ltd filed Critical Huawei Cloud Computing Technologies Co Ltd
Priority to CN201711295818.0A priority Critical patent/CN109901785B/zh
Publication of CN109901785A publication Critical patent/CN109901785A/zh
Application granted granted Critical
Publication of CN109901785B publication Critical patent/CN109901785B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

一种命令排序方法、降低读时延方法及固态硬盘SSD控制器,用于降低读时延。其中,一种命令排序方法、降低读时延方法包括:确定接收到的或由SSD控制器生成的第一命令是否为读命令;若第一命令为读命令,根据系统虚拟时间及当前调度队列中上一次接收到的一个读命令的结束标签确定第一命令的开始标签;若第一命令为非读命令,根据系统虚拟时间及当前调度队列中上一次接收到的最后一个命令的结束标签确定第一命令的开始标签;根据第一命令的开始标签,确定第一命令的结束标签,并将第一命令的开始标签和结束标签赋予第一命令;根据当前调度队列中的各个命令的开始标签,将赋予了开始标签和结束标签的第一命令插入到当前调度队列中的相应位置。

Description

命令排序方法、降低读时延方法及固态硬盘SSD控制器
技术领域
本申请涉及计算机技术领域,尤其涉及一种命令排序方法、降低读时延及固态硬盘SSD控制器。
背景技术
随着大数据时代的到来,固态硬盘(Solid State Drives,SSD)在现有存储系统中的使用越来越广泛。请参见图1,SSD包括SSD控制器、FLASH存储阵列及主机接口(例如串行连接小型计算机系统接口(Serial Attached Small Computer System Interface,SAS)、总线和接口标准(Peripheral Component Interface Express,PCIE)接口或者是串行高阶硬盘架构接口(Serial Advanced Technology Attachment,SATA)等)。其中,FLASH存储阵列中包括多个Nand Flash Chip,每个Nand Flash Chip内部包括一个或多个裸片(DIE),每个DIE包括多个块(Block),每个Block包括多个页(Page)。
由于一个DIE上包括多个Block,SSD控制器可能会同时操作该DIE上的多个Block,这样针对多个Block的不同的命令,例如读、写、擦命令,可能会同时发到该DIE上,然而每个DIE在同一时刻只能执行一个命令,为此,请参见图2,SSD控制器为每个DIE设置一个先入先出(First Input First Output,FIFO)队列,用于暂时缓存DIE上的读、写、擦三种命令,也就是将接收到的读、写、擦命令按照先入先出顺序存储到FIFO队列中,等待SSD控制器的调度执行。
在此以DIE0为例,对于DIE0的调度队列中的写命令,由于SSD控制器通常有带掉电保护的缓存(cache)机制,数据只需写到cache,就可以给用户反馈写成功的指示,并不需要立即把写命令存储到DIE0的调度队列中,所以写时延通常是比较稳定的,各个写命令之间的时延差异较小。而对于DIE0的调度队列中的读命令,由于SSD控制器通常没有读cache,所以SSD控制器需要将接收到的读请求转换成读命令发送并存储到DIE0的调度队列中,待SSD控制器调度执行后才能得到相应的数据。若此时系统正在执行擦命令,且读命令之前还有待调度的写命令,则该读命令必须等擦命令及写命令执行完成后才能被调度执行,需要花费的时间较长。例如以单独执行读命令需消耗100微秒(us),执行写命令需消耗1500us,执行擦命令需消耗3-5毫秒(ms)为例,则调度执行该读命令实际消耗时长3ms++1.5ms+100us远远大于100us,尤其在该读命令之前存在多个擦、写命令时,调度执行该读命令实际消耗的时长会更长,进而导致严重的长尾效应,影响用户体验。
发明内容
本申请提供一种命令排序方法、降低读时延方法及固态硬盘SSD控制器,用以解决现有技术中SSD的读延时较长的技术问题。
第一方面,本申请提供了一种命令排序方法,固态硬盘SSD控制器确定接收到的或由所述SSD控制器生成的第一命令是否为读命令;若所述第一命令为读命令,所述SSD控制器根据系统虚拟时间及当前调度队列中上一次接收到的一个读命令的结束标签确定所述第一命令的开始标签;若所述第一命令为非读命令,所述SSD控制器根据系统虚拟时间及当前调度队列中上一次接收到的最后一个命令的结束标签确定所述第一命令的开始标签;其中,所述系统虚拟时间为系统当前正在执行的命令的开始标签,或为系统最近一次执行完的命令的结束标签;所述SSD控制器根据所述第一命令的开始标签,确定所述第一命令的结束标签,并将所述第一命令的开始标签和结束标签赋予所述第一命令;所述SSD控制器根据所述当前调度队列中的各个命令的开始标签,将赋予了开始标签和结束标签的所述第一命令插入到所述当前调度队列中的相应位置。
在本申请实施例中,第一命令可以是SSD控制器通过主机接口接收的命令,也可以是由SSD控制器自身生成的命令。以第一命令是SSD控制器通过主机接口接收的命令为例,若SSD控制器确定接收到的第一命令是读命令,则根据系统虚拟时间和当前调度队列中上一次接收到的一个读命令的结束标签确定第一命令的开始标签;若是非读命令,则根据系统虚拟时间和当前调度队列中上一次接收到的最后一个命令的结束标签确定第一命令的开始标签,由于当前调度队列中上一次接收到的一个读命令是在当前调度队列中上一次接收到的最后一个命令之前,而当前调度队列中在上一次接收到的最后一个命令之前的命令的开始标签与系统虚拟时间相关,系统虚拟时间又是系统最近一次执行完的命令的结束标签,那么随着系统不断执行新的命令,系统虚拟时间将不断增大,也就是说当前调度队列中排列靠前的命令的开始标签较小,相应的当前调度队列中排列靠前的命令的结束标签也就较小。所以,当前调度队列中上一次接收到的一个读命令的结束标签小于或等于当前调度队列中上一次接收到的最后一个命令的结束标签,从而保证在第一命令为读命令时,将第一命令插入到当前调度队列中上一次接收到的最后一个命令之前,在第一命令为写命令时,将第一命令插入到当前调度队列中上一次接收到的最后一个命令之后,进而可以降低读命令被调度执行时所消耗的时长。
在一个可能的设计中,所述SSD控制器根据当前调度队列中的各个命令的开始标签,将所述第一命令插入到所述当前调度队列中的相应位置时,所述SSD控制器可以在所述第一命令的开始标签小于所述当前调度队列中的头命令的开始标签时,将赋予了开始标签和结束标签的所述第一命令插入所述当前调度队列中的头命令之前;也可以将赋予了开始标签和结束标签的所述第一命令插入所述当前调度队列的第二命令和第三命令之间,其中,所述第二命令的开始标签小于或等于所述第一命令的开始标签,所述第三命令的开始标签大于所述第一命令的开始标签;还可以在所述第一命令的开始标签大于或等于所述当前调度队列中的尾命令的开始标签时,将赋予了开始标签和结束标签的所述第一命令插入所述当前调度队列中的尾命令之后。
在本申请实施例中,若第一命令为读命令,在第一命令的开始标签小于当前调度队列中的头命令的开始标签时,选择将赋予了开始标签和结束标签的第一命令插入到当前调度队列中的头命令之前;或者选择将第一命令插入到当前调度队列的第二命令和第三命令之间,以降低读时延;若第一命令为非读命令,选择将第一命令插入到当前调度队列的尾命令之后,可以进一步保证读命令在非读命令之前被调度执行,从而可以降低读时延。
在一个可能的设计中,若所述第一命令为读命令,所述SSD控制器可以将所述第一命令的开始标签加上第一预设长度值,得到所述第一命令的结束标签;若所述第一命令为非读命令,所述SSD控制器可以将所述第一命令的开始标签加上第二预设长度值,得到所述第一命令的结束标签;其中,所述第一预设长度值小于或等于所述第二预设长度值。
在本申请实施例中,若第一命令为读命令,第一命令的结束标签等于第一命令的开始标签加上第一预设长度值;若第一命令为非读命令,第一命令的结束标签等于第一命令的开始标签加上第二预设长度值,其中,第一预设长度值小于第二预设长度值,从而保证在当前调度队列上一次接收到的最后一个命令为写命令时,当前调度队列继上一次接收到的最后一个命令接收到的读命令的开始标签小于当前调度队列上一次接收到的最后一个命令的开始标签,以将后续接收到的读命令插入到在当前调度队列上一次接收到的最后一个命令之前,从而可以降低读命令被调度执行的时延。
在一个可能的设计中,所述第一预设长度值可以等于
Figure BDA0001500280510000031
其中,φf为预先为读命令设置的权重,
Figure BDA0001500280510000032
可以为常数值n,例如可以为1,或者为所述第一命令执行时所调取的数据的字节数;
在一个可能的设计中,所述第二预设长度值可以等于
Figure BDA0001500280510000033
其中,φg为预先为写命令设置的权重,
Figure BDA0001500280510000034
可以为常数值m,例如可以为1,或者为所述第一命令执行时所调取的数据的字节数,φf≥φg
在本申请实施例中,读命令和非读命令的权重设置可以根据读命令和非读命令的重要程度进行设置。例如读命令的重要程度为3级,非读命令的重要程度为1级,则可以将读命令的权重设置为3,将非读命令的权重设置为1,或者将读命令和非读命令的权重设置为其它值,只要读命令的权重与非读命令的权重比为3即可,例如将φf设置为2,φg设置为1/1.5,对应的,在n为1时,第一预设长度值为0.5,在m为1时,第二预设长度值为1.5。
在一个可能的设计中,若所述第一命令为读命令,所述当前调度队列为第一裸片DIE上的调度队列;所述SSD控制器可以进一步确定按照第一调度方式调度执行所述第一命令所消耗的时长为第一时长,及按照第二调度方式调度执行所述第一命令所消耗的时长为第二时长;其中,所述第一调度方式为在所述第一DIE上按照开始标签从小到大的顺序进行调度的方式,所述第二调度方式为通过调度除所述第一DIE外的其它DIE中各其它DIE上的读命令的方式,所述SSD控制器调度所述各其它DIE上的读命令后,其中,能够通过执行所述各其它DIE上的读命令所调取的数据重构出所述第一DIE上与所述第一命令对应的数据,所述第一DIE与所述各其它DIE分别位于SSD中的不同芯片上;若所述第一时长小于或等于所述第二时长,所述SSD控制器可以选择按照所述第一调度方式调度所述第一命令;若所述第一时长大于所述第二时长,所述SSD控制器可以选择按照所述第二调度方式调度所述第一命令。
在本申请实施例中,以第一命令是读命令为例,在调度执行第一命令之前,先确定按照第一调度方式,例如按照开始标签从小到大顺序调度执行第一命令所需消耗的时长为第一时长,及按照第二调度方式,例如调度除第一DIE外的其它DIE上各其它DIE上的读命令,通过执行各其它DIE上的读命令所调取的数据重构出第一DIE上的与第一命令对应的数据所消耗的时长为第二时长,在比较两种调度方式所消耗时长之后,再确定最终的调度方式,以进一步降低第一命令调度执行的时延,例如在第一时长大于第二时长时,则按照第二调度方式调度第一命令,在第一时长小于或等于第二时长时,则按照第一调度方式调度第一命令。
在一个可能的设计中,所述第一时长可以为单独执行所述第一命令的执行时长、调度执行所述当前调度队列中在所述第一命令之前的所有命令的执行时长,及系统当前正在执行的命令的剩余执行时长之和;所述第二时长可以为所述SSD控制器分别调度执行所述各其它DIE上的读命令所消耗的时长中的最大值。
在一个可能的设计中,所述SSD控制器可以独立计算所述第一DIE和所述各其它DIE上的系统虚拟时间。在本申请实施例中,SSD控制器为每个DIE设置一个调度队列,每个DIE就是一个命令处理系统,这样每个命令处理系统处理命令会有快有慢,所以SSD控制器计算第一DIE和各其它DIE上的系统虚拟时间相互独立时,能够保证计算第一时长和第二时长的准确性。
第二方面,本申请实施例提供一种降低读时延的方法,固态硬盘SSD控制器确定按照第一调度方式调度执行第一裸片DIE上的调度队列中的读命令所消耗的时长为第一时长,及按照第二调度方式调度执行所述读命令所消耗的时长为第二时长;其中,所述第一调度方式为在所述第一DIE上按照命令先入先出的顺序进行命令调度的方式,所述第二调度方式为通过调度除所述第一DIE外的其它DIE中各其它DIE上的读命令的方式,其中,所述SSD控制器调度所述各其它DIE上的读命令后,能够通过执行所述各其它DIE上的读命令所调取的数据重构出所述第一DIE上与所述读命令对应的数据,所述第一DIE与所述各其它DIE分别位于SSD中的不同芯片上;在所述第一时长大于所述第二时长时,所述SSD控制器可以按照所述第二调度方式从所述调度队列中调度所述读命令。
在本申请实施例中,在调度执行第一DIE上的调度队列中读命令之前,先确定按照第一调度方式,例如按照命令先入先出顺序调度执行第一DIE上的调度队列中的读命令所需消耗的时长为第一时长,及按照第二调度方式,例如调度除第一DIE外的其它DIE上各其它DIE上的读命令,并通过执行各其它DIE上的读命令所调取的数据重构出第一DIE上的与读命令对应的数据所消耗的时长为第二时长,在第一时长大于第二时长时,选择按照第二调度方式调度第一DIE上的调度队列中的读命令,可以降低读命令的读时延。
在一个可能的设计中,所述第一时长可以为单独执行所述读命令的执行时长、调度执行所述第一DIE上的调度队列中在所述读命令之前的所有命令的执行时长、及系统当前正在执行的命令的剩余执行时长之和;所述第二时长可以为所述SSD控制器分别调度执行所述各其它DIE上的读命令所消耗的时长中的最大值。
第三方面,本申请实施例提供了一种固态硬盘SSD控制器,该SSD控制器具有实现上述第一方面方法中SSD控制器行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现,所述硬件或软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,SSD控制器的结构中包括存储器和处理器。所述处理器被配置为支持SSD控制器执行上述第一方面方法中相应的功能。所述存储器与所述处理器耦合,其保存必要的指令和数据。
第四方面,本申请实施例提供了一种固态硬盘SSD控制器,该SSD控制器具有实现上述第二方面方法中SSD控制器行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现,所述硬件或软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,SSD控制器的结构中包括存储器和处理器。所述处理器被配置为支持SSD控制器执行上述第二方面方法中相应的功能。所述存储器与所述处理器耦合,其保存必要的指令和数据。
第五方面,本申请实施例提供了一种计算机存储介质,存储有用于执行上述第一方面、第一方面的任意一种设计的功能、第二方面及第二方面的任意一种设计的功能所用的计算机软件指令,或包含用于执行上述第一方面、第一方面的任意一种设计的方法、第二方面、第二方面的任意一种设计的方法所涉及的程序。
第六方面,本申请实施例提供了一种计算机程序产品,该程序产品在被计算机调用执行时,可以使得计算机执行上述第一方面、第一方面的任意一种设计的方法、第二方面及第二方面的任意一种设计的方法。
第七方面,本申请实施例提供了一种芯片系统,该芯片系统包括处理器,用于支持SSD控制器实现上述第一方面、第二方面所述的方法,例如生成或处理上述第一方面方法、第二方面方法中所涉及的数据和/或信息。在一个可能的设计中,该芯片系统还包括存储器,所述存储器用于保存SSD控制器必要的程序指令和数据,该芯片系统中的处理器可以调用该芯片系统中的存储器存储的程序指令和数据,以使该芯片系统可以实现上述SSD控制器能够实现功能。该芯片系统,可以由芯片构成,也可以包含芯片和其它分立器件。
附图说明
图1为现有技术中固态硬盘SSD的结构示意图;
图2为现有技术中按照先入先出顺序将命令存储到每个DIE上的调度队列中的示意图;
图3为本申请实施例提供的每个DIE上的输入输出模型的示意图;
图4为本申请实施例提供的一种命令排序方法的流程示意图;
图5为本申请实施例提供的在当前调度队列中已存储有写命令的情况下,按照命令排序方法将命令存储到当前调度队列的示意图;
图6为本申请实施例提供的在当前调度队列中已存储有读命令的情况下,按照命令排序方法将命令存储到当前调度队列的示意图;
图7为本申请实施例提供的按照第二调度方式调度第一命令的示意图;
图8为本申请实施例提供的在除第一DIE外的其它DIE上后续接收到写命令的情况下,按照命令排序方法将命令存储到该DIE上的前调度队列的示意图;
图9为本申请实施例提供的按照第一调度方式调度第一命令的示意图;
图10为本申请实施例提供的一种降低读时延的方法的流程示意图;
图11为本申请实施例提供的按照第二调度方式调度执行读命令的示意图;
图12为本申请实施例提供的一种固态硬盘SSD控制器的结构示意图;
图13为本申请实施例提供的另一种固态硬盘SSD控制器的结构示意图;
图14为本申请实施例提供的另一种固态硬盘SSD控制器的结构示意图;
图15为本申请实施例提供的另一种固态硬盘SSD控制器的结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。
以下,对本申请实施例中的部分用语进行解释,以便于本领域技术人员理解。
与SSD相关的概念,例如通道(Channel)、DIE、Block、Page。
(1)、读数据、写数据是以Page为单位,每个Page包括多个字节,例如2048+64字节,其中每512+16字节为一个检错/纠错单元,512字节用来保存数据,16字节用来保存检错/纠错码。当读取数据时,每512+16字节的单元会进行校验,如果出错的位数较少可以被纠正,如果出错的位数太多无法纠正就需要利用上层的纠错机制,例如RAID算法来解决;擦是以Block为单位的,每个Block包括多个页,例如64个。若要修改Nand Flash Chip中已经写入的数据,必须先将该数据所在的Block擦除,然后才能写入新数据。
(2)、Nand Flash Chip上的读、写、擦命令是同步命令,然而同一DIE上的读、写、擦命令不能并发执行,但不同DIE上的读、写、擦命令可以并发执行。
请参见图3,为本申请实施例的一种应用场景。每个DIE上输入输出(Input/Output,IO)模型,包括:
第一级,也就是图3中所示的第一列,也就是SSD控制器处理的不同业务类型,例如SSD控制器需要处理与SSD连接的主机发送的读、写请求,因此存在A1个业务读、B1个业务写;SSD控制器为了保证每个Nand Flash Chip中每个Block的擦次数相同及写次数的均衡以保证SSD的使用寿命,因此存在C1个垃圾回收;另外SSD控制器为了维系对外呈现的存储阵列,保证存储数据的可靠性,需要进行后台重构,也就是根据其它数据片上的数据及校验片的数据恢复出出错的数据,因此存在D1个后台重构;
第二级,也就是图3中所示的第二列,对每一类业务按照是前台业务还是后台业务,确定出与该业务对应的命令,例如A1个业务读对应A2个业务读;由于SSD带有掉电保护的缓存机制,在将数据写入到缓存中,即可给用户反馈写入成功的指示,因此,前台的业务写就转化为后台写,所以B1个业务写对应B2个后台写;C1个垃圾回收对应C2个后台读、D2个后台写、E2个后台擦;D1个后台重构对应F2个后台读、G2个后台写;
第三级,也就是图3中所示的第三列,不再区分具体的业务类型,简化为前台和后台命令,因此就对应A3个前台读、B3个后台读、C3个后台写、D3个后台擦;
第四级,也就是图3中所示的第四列,不再区分具体的业务类型及前台和后台的区别,因此进一步简化为A个读、B个写、C个擦。在本申请实施例中,以第四级为例来介绍本申请提供的技术方案。
请参见图4,本申请实施提供一种命令排序方法,该方法的流程描述如下:
S41:固态硬盘SSD控制器确定接收到的或由所述SSD控制器生成的第一命令是否为读命令。在本申请实施例中,第一命令可以是SSD控制器通过SSD的主机接口接收的命令,也可以是由SSD控制器自身生成的命令。在下面介绍中,以第一命令是SSD控制器通过主机接口接收的命令为例。
S42:若第一命令为读命令,SSD控制器根据系统虚拟时间及当前调度队列中上一次接收到的一个读命令的结束标签确定第一命令的开始标签。
在本申请实施例中,若第一命令为读命令,将第一命令的开始标签记为
Figure BDA0001500280510000071
系统虚拟时间记为v(t),当前调度队列中上一次接收到的一个读命令的结束标签记为
Figure BDA0001500280510000072
则第一命令的开始标签
Figure BDA0001500280510000073
可以表示为公式(1):
Figure BDA0001500280510000074
其中,f表示命令类型,例如读命令,i表示读命令中的第i个;读命令中的第i个命令的开始标签为系统虚拟时间和当前调度队列中上一次接收到的一个读命令的结束标签中的最大值。
S43:若第一命令为非读命令,SSD控制器根据系统虚拟时间及当前调度队列中上一次接收到的最后一个命令的结束标签确定第一命令的开始标签;其中,系统虚拟时间为系统当前正在执行的命令的开始标签,或为系统最近一次执行完的命令的结束标签。
在本申请实施例中,若第一命令为非读命令,将第一命令的开始标签记为
Figure BDA0001500280510000075
系统虚拟时间记为v(t),则第一命令的开始标签
Figure BDA0001500280510000076
可以表示为公式(2):
Figure BDA0001500280510000077
当前调度队列中上一次接收到的最后一个命令的结束标签}公式(2)
其中,g表示命令类型,例如非读命令,i表示非读命令中的第i个;非读命令中的第i个命令的开始标签为系统虚拟时间和当前调度队列中上一次接收到的最后一个命令的结束标签中的最大值。此处,当前调度队列中上一次接收到的最后一个命令可以是读命令,也可以是非读命令。
在本申请实施例中,SSD控制器在接收到第一命令时,若系统处于忙状态,v(t)等于系统当前正在处理的命令的开始标签;若系统处于空闲状态,v(t)等于系统最近一次执行完的命令的结束标签。
S44:SSD控制器根据第一命令的开始标签,确定第一命令的结束标签,并将第一命令的开始标签和结束标签赋予第一命令。
在本申请实施例中,在确定出第一命令的开始标签后,则根据第一命令的开始标签确定第一命令的结束标签。
若第一命令为读命令,SSD控制器将第一命令的开始标签加上第一预设长度值,得到第一命令的结束标签,记为
Figure BDA0001500280510000078
Figure BDA0001500280510000079
可以表示为公式(3):
Figure BDA00015002805100000710
若第一命令为非读命令,SSD控制器将第一命令的开始标签加上第二预设长度值,得到第一命令的结束标签,记为
Figure BDA00015002805100000711
Figure BDA00015002805100000712
可以表示为公式(4):
Figure BDA0001500280510000081
其中,第一预设长度值小于或等于第二预设长度值。在本申请实施例中,第一预设长度值和第二预设长度值可以用具体的数值表示,例如将第一预设长度值设置为1,将第二预设长度值3,第一预设长度值和第二预设长度值也可以用公式表示,例如第一预设长度值等于
Figure BDA0001500280510000082
第二预设长度值等于
Figure BDA0001500280510000083
在第一预设长度值和第二预设长度值分别以公式表示时,若第一命令为读命令,将第一预设长度值带入公式(3),第一命令的结束标签
Figure BDA0001500280510000084
则可以表示为公式(5):
Figure BDA0001500280510000085
其中,φf为预先为读命令设置的权重,
Figure BDA0001500280510000086
为常数n,例如在按照每秒请求数目(Input/Output Per Second,IOPS)方式调度时,
Figure BDA0001500280510000087
或者在按照每秒请求字节量(Mega Bytes Per Second,MBPS)方式调度时,
Figure BDA0001500280510000088
为第一命令执行时所调取的数据的字节数。
若第一命令为非读命令,将第二预设长度值带入公式(4),第一命令的结束标签
Figure BDA0001500280510000089
则可以表示为公式(6):
Figure BDA00015002805100000810
其中,φg为预先为非读命令设置的权重,
Figure BDA00015002805100000811
为常数m,例如在采用IOPS调度方式时,
Figure BDA00015002805100000812
或者在采用MBPS方式调度时,
Figure BDA00015002805100000813
为第一命令执行时所调取的数据的字节数。
在本申请实施例中,φf大于或等于φg,φf和φg可以根据读命令和非读命令的重要程度设置,例如读命令的重要程度为3级,非读命令的重要程度为1级,则可以将读命令的权重设置为3,将非读命令的权重设置为1,或者将读命令和非读命令的权重设置为其它值,只要读命令的权重与非读命令的权重比为3即可,例如将φf设置为2,φg设置为1/1.5,对应的,在n为1时,第一预设长度值为0.5,在m为1时,第二预设长度值为1.5。
基于上一段对φf和φg的分析可知,φf大于或等于φg,使得第一预设长度值小于或等于第二预设长度值,从而在当前调度队列最后一个接收到的最后一个命令为写命令时,当前调度队列后续接收到的读命令的开始标签小于当前调度队列上一次接收到的最后一个命令的开始标签,以将后续接收到的读命令插入到在当前调度队列上一次接收到的最后一个命令之前,从而降低读时延。
在本申请实施例中,在确定出第一命令的开始标签和结束标签后,将第一命令的开始标签和结束标签赋予第一命令。
S45:SSD控制器根据当前调度队列中的各个命令的开始标签,将赋予了开始标签和结束标签的第一命令插入到当前调度队列中的相应位置。
在具体实现过程中,SSD控制器可以在第一命令的开始标签小于当前调度队列中的头命令的开始标签时,将赋予了开始标签和结束标签的第一命令插入当前调度队列中的头命令之前;
也可以将赋予了开始标签和结束标签的第一命令插入当前调度队列的第二命令和第三命令之间,其中,第二命令的开始标签小于或等于第一命令的开始标签,第三命令的开始标签大于第一命令的开始标签;
还可以在第一命令的开始标签大于或等于当前调度队列中的尾命令的开始标签时,将赋予了开始标签和结束标签的第一命令插入当前调度队列中的尾命令之后。
下面结合具体的实例,介绍将第一命令插入到当前调度队列中的各种情况。
在SSD控制器接收第一命令时,当前调度队列中可以已存储有命令,也可以没有已存储的命令,在下面的介绍中以当前调度队列中已存储有命令为例,而当前调度队列中已存储的命令可以为非读命令,也可以为读命令,下面分别介绍。
1、当前调度队列中已存储有非读命令
在本申请实施例中,非读命令可以为写命令,也可以为擦命令。下面以写命令为例,介绍计算第一命令的开始标签的过程。请参见图5,当前调度队列中已存储的命令为写命令0、写命令1,其中,写命令0的开始标签为1.5、结束标签为3;写命令1的开始标签为3、结束标签为4.5。
(1)若接收到的第一命令是读命令,且系统当前处于忙状态,那么系统虚拟时间等于系统当前正在处理的命令的开始标签0。由于第一命令的开始标签为系统虚拟时间和当前调度队列中上一次接收到的一个读命令的结束标签中的最大值,而当前调度队列中没有读命令,所以,当前调度队列中上一次接收到的一个读命令的结束标签为0,第一命令的开始标签也就为0。在确定第一命令的开始标签后,则确定第一命令的结束标签=第一命令的开始标签0+第一预设长度值=0+0.5=0.5。
由于第一命令的开始标签为0,小于当前调度队列中首命令的开始标签,也就是当前调度队列中写命令0的开始标签,则将第一命令插入到当前调度队列中的首命令之前。
在本申请实施例中,φf大于或等于φg的目的就是为了使当前调度队列后续接收到的读命令能够插入到当前调度队列中非读命令之前,以降低读时延,下面将结合具体示例介绍。
若当前调度队列在第一命令之后接收到的第四命令为读命令,第四命令的开始标签为当前调度队列中上一次接收到的一个读命令的结束标签,也就是第一命令的结束标签0.5,第四命令的结束标签等于第四命令的开始标签加上0.5,也就是1。由于第四命令的开始标签小于当前调度队列中的写命令0的开始标签,大于第一命令的开始标签0,则将该命令插入到当前调度队列中的第一命令和写命令0之间。基于上述描述可知后续接收到的第四命令插入到写命令0之前,也就是说第四命令会在写命令0之前被调度执行,所以能够降低第四命令调度执行的时延。
若当前调度队列继第四命令后续接收到的第五命令仍为读命令,第五命令的开始标签为当前调度队列中上一次接收到的一个读命令的结束标签,也就是第四命令的结束标签1,第五命令的结束标签等于第五命令的开始标签加上0.5,也就是1.5。由于而第五命令的开始标签小于当前调度队列中的写命令0的开始标签,大于第四命令的开始标签,则将该命令插入到当前调度队列中的第四命令和写命令0之间,基于此后续接收到的第五命令是插入到写命令0之前,也就是说第五命令会在写命令0之前被调度执行,所以能够降低第五命令调度执行的时延。
若当前调度队列继第五命令后续接收到的第六命令仍为读命令,第六命令的开始标签为当前调度队列中上一次接收到的一个读命令的结束标签,也就是第五命令的结束标签1.5,等于当前调度队列中的写命令0的开始标签,而由于读命令与非读命令的权重比为3:1,所以,在该情况下,将第六命令插入到所述当前队列中的写命令0之后,以满足读命令与非读命令调度执行的比例。
(2)若接收到的第一命令是写命令,且系统当前处于忙状态,系统虚拟时间等于系统当前正在处理的命令的开始标签0,由于第一命令的开始标签为系统虚拟时间和当前调度队列上一次接收到的最后一个命令的结束标签中的最大值,而当前调度队列中上一次接收到的最后一个命令的结束标签,也就是当前调度队列中的写命令1的结束标签4.5,所以,第一命令的开始标签为4.5。在确定第一命令的开始标签后,则确定第一命令的结束标签=第一命令的开始标签4.5+第二预设长度值1.5=6。
由于第一命令的开始标签为6,大于当前调度队列尾命令的开始标签,也就是写命令1的开始标签,则将第一命令插入到当前调度队列中的尾命令之后,以保证先存储到当前调度队列中的读命令在写命令之前被调度执行。
2、当前调度队列中已存储有读命令
请参见图6,假设当前调度队列中存储有读命令0、读命令1、读命令2、读命令3,其中,读命令3的结束标签为2.5。
(1)若接收到的第一命令是读命令,且系统当前处于忙状态,系统虚拟时间等于系统当前正在处理的命令的开始标签0。由于第一命令的开始标签为系统虚拟时间和当前调度队列中上一次接收到的一个读命令的结束标签中的最大值,而当前调度队列中上一次接收到的一个读命令的结束标签中,也就是读命令3的结束标签2.5,所以第一命令的开始标签为2.5。在确定第一命令的开始标签后,则确定第一命令的结束标签=第一命令的开始标签2.5+第一预设长度值0.5=3。
由于第一命令的开始标签为3,大于当前调度队列中尾命令的开始标签,也就是读命令3的开始标签,则将第一命令插入到当前调度队列中的尾命令之后。
(2)若接收到的第一命令是写命令,且系统当前处于忙状态,系统虚拟时间等于系统当前正在处理的命令的开始标签0。由于第一命令的开始标签为系统虚拟时间和当前调度队列中上一次接收到的最后一个命令的结束标签中的最大值,而当前调度队列中上一次接收到的最后一个命令的结束标签,也就是当前调度队列中的读命令3的结束标签2.5,所以第一命令的开始标签为2.5。在确定第一命令的开始标签后,则确定第一命令的结束标签=第一命令的开始标签2.5+第二预设长度值1.5=4。
由于第一命令的开始标签大于当前调度队列中的尾命令的开始标签,也就是当前调度队列中的读命令3的开始标签,则将第一命令插入到当前调度队列中的尾命令之后。
若当前调度队列继第一命令后续接收到的第四命令仍为写命令,第四命令的开始标签为当前调度队列中上一次接收到的最后一个命令的结束标签,也就是第一命令的结束标签4,第四命令的结束标签等于第四命令的开始标签4加上第二预设长度值1.5,也就是5.5。由于第四命令的开始标签大于当前调度队列中的第一命令的开始标签,则将该命令插入到当前调度队列中的第一命令之后。在本申请实施例中,接收到的命令在为写命令时,都是将写命令存储在当前调度队列的上一次接收到的最后一个命令之后,以降低当前调度队列中的读时延。
若当前调度队列继第四命令后续接收到的第五命令为读命令,第五命令的开始标签为当前调度队列中上一次接收到的一个读命令的结束标签,也就是读命令3的结束标签2.5,所以第五命令的开始标签为2.5,小于第四命令的开始标签,则将该命令插入到当前调度队列中的第四命令之前。在本申请实施例中,若当前调度队列上一次接收到的最后一个命令为写命令,而在后续接收到的命令为读命令时,只要当前调度队列中上一次接收到的最后一个命令之前的读命令的个数小于读命令的权重与写命令的权重之比,则可以将读命令插入到当前调度队列中上一次接收到的最后一个命令之前,以降低读时延。
在具体实现过程中,在将命令插入到当前调度队列后,则等待调度执行。在本申请实施例中,当第一命令为读命令,当前调度队列为第一裸片DIE上的调度队列,所述方法还包括:
SSD控制器确定按照第一调度方式调度执行第一命令所消耗的时长为第一时长,及按照第二调度方式调度执行第一命令所消耗的时长为第二时长;其中,第一调度方式为在第一DIE上按照开始标签从小到大的顺序进行调度的方式,第二调度方式为通过调度除第一DIE外的其它DIE中各其它DIE上的读命令的方式,SSD控制器调度各其它DIE上的读命令后,能够执行通过各其它DIE上的读命令所调取的数据重构出第一DIE上与第一命令对应的数据,第一DIE与各其它DIE分别位于SSD的不同芯片上;
若第一时长小于或等于第二时长,SSD控制器可以按照第一调度方式调度第一命令;
若第一时长大于第二时长,SSD控制器可以按照第二调度方式调度第一命令。
在本申请实施例中,SSD控制器通过一个通道连接一个存储阵列,一个存储阵列中包括多个Nand Flash Chip,每个Nand Flash Chip的内部包括一个或多个DIE,例如以NandFlash Chip0为例,Nand Flash Chip0包括DIE0、DIE1、DIE2,每个DIE上维持一个调度队列,其中,以DIE0为例,DIE0上的调度队列为当前调度队列,当前调度队列中已存储如图5所示的命令。
若第一命令为读命令,SSD在调度第一命令之前,首先确定按照第一调度方式调度执行第一命令所消耗的时长为第一时长,按照第二调度方式调度执行第一命令所消耗的时长为第二时长。
其中,第一调度方式为在第一DIE上按照开始标签从小到大的顺序进行调度的方式,第一时长为单独执行第一命令的执行时长、调度执行当前调度队列中在第一命令之前的所有命令的执行时长及系统当前正在执行的命令的剩余执行时长之和。例如继续参见图5,按照第一调度方式调度执行第一命令所消耗的第一时长为单独执行第一命令的执行时长100us+调度执行当前调度队列中在第一命令之前的所有命令的执行时长2ms+2ms+系统当前正在执行的命令的剩余执行时长之和0=4ms+100us。
第二调度方式为通过调度除第一DIE外的其它DIE中各其它DIE上的读命令的方式,通过执行各其它DIE上的读命令所调取的数据重构出第一DIE上与第一命令对应的数据。第二调度方式适用于RAID场景,包括但不限于RAID1、RAID3、RAID4、或者RAID5等。在下面的介绍中以RAID3为例。
SSD控制器通过一个通道连接一个存储阵列,一个存储阵列中包括多个NandFlash Chip,每个Nand Flash Chip的内部包括一个或多个DIE,例如Nand Flash Chip0,包括DIE0、DIE1、DIE2;Nand Flash Chip1,包括DIE0、DIE1、DIE2;Nand Flash Chip2,包括DIE0、DIE1、DIE2,这样Nand Flash Chip0-Nand Flash Chip2上的DIE0为一组、Nand FlashChip0-Nand Flash Chip2上的DIE1为一组、Nand Flash Chip0-Nand Flash Chip2上的DIE2为一组,其中以Nand Flash Chip0-Nand Flash Chip2上的一组DIE0为例,在存储数据A时,将数据分为两部分,A1和A2,其中,将A1部分存储在Nand Flash Chip0的DIE0上,将A2部分存储在Nand Flash Chip1的DIE0上,Nand Flash Chip2上的DIE0用于存储校验数据,例如A=A1XOR A2,也就是在Nand Flash Chip0的DIE0上的数据损坏时,可以通过NandFlash Chip2的DIE0上的校验数据及Nand Flash Chip1的DIE0上的数据重构出Nand FashChip0的DIE0上的数据,或在Nand Flash Chip1的DIE0上的数据损坏时,可以通过NandFlash Chip2的DIE0上的校验数据及Nand Flash Chip0的DIE0上的数据重构出Nand FlashChip1的DIE0上的数据。
基于此,本申请实施例中的第二调度方式就是在Nand Flash Chip1上的DIE0的调度队列中存储读命令A1、在Nand Flash Chip2的DIE0的调度队列中存储读命令A2,在调度读命令A1和读命令A2之后,可以通过执行读命令A1所调取的数据及执行读命令A2所调取的数据重构出与Nand Flash Chip0的DIE0上与第一命令对应的数据。其中,通过第二调度方式调度第一命令所消耗的时长为SSD控制器分别调度执行各其它DIE上的读命令所消耗的时长中的最大值。
在此需要说明的是,将读命令A1插入到Nand Flash Chip1的DIE0上的调度队列中的方式及将读命令A2插入到Nand Flash Chip2的DIE0上的调度队列中的方式同将第一命令插入到Nand Flash Chip0的DIE0上的当前调度队列中的方式,在此不再赘述。
请参见图7,调度执行Nand Flash Chip1的DIE0上的读命令A1所消耗的时长为单独执行读命令A1的执行时长100us+调度执行Nand Flash Chip1的DIE0上的调度队列中在读命令A1之前的所有命令的执行时长100us+100us+系统当前正在执行的命令的剩余执行时长0=300us;调度执行Nand Flash Chip2的DIE0上的读命令A2所消耗的时长为单独执行读命令A2的执行时长100us+调度执行Nand Flash Chip2的DIE0上的调度队列中在读命令A2之前的所有命令的执行时长100us+100us+100us=400us,由于第二时长为SSD控制器分别调度执行各其它DIE上的读命令所消耗时长中的最大值。所以,通过第二调度方式调度第一命令所消耗的时长为400us。
由于第一时长4ms+100us大于第二时长400us,则采用第二调度方式调度第一命令,也就是通过调度执行Nand Flash Chip1的DIE0上的读命令A1所调取的数据和调度执行Nand Flash Chip2的DIE0上的读命令A2所调取的数据,重构Nand Flash Chip0的DIE0上的与第一命令对应的数据。
在此需要说明的是,请参见图8,对于除Nand Flash Chip0的DIE0外的其它DIE0,例如Nand Flash Chip1的DIE0的调度队列,若在读命令A1之后接收到命令,例如写命令,那么将该写命令插入到Nand Flash Chip1的DIE0的调度队列中的方式同将第一命令插入到Nand Flash Chip0的DIE0的调度队列中的方式,在此不再不赘述。
下面介绍另外一种情况,请参见图9,调度执行Nand Flash Chip1的DIE0上的读命令A1所消耗的时长为单独执行读命令A1的执行时长100us+调度执行Nand flash1的DIE0上的调度队列中在读命令A1之前的所有命令的执行时长4100us+系统当前正在执行的命令的剩余执行时长0=4200us;调度执行Nand Flash Chip2的DIE0上的读命令A2所消耗的时长为单独执行读命令A2的执行时长100us+调度执行Nand Flash Chip2的DIE0上的调度队列中在读命令A2之前的所有命令的执行时长100us+100us+100us=400us,由于第二时长为SSD控制器分别调度执行各其它DIE上的读命令所消耗时长中的最大值。所以,通过第二调度方式调度第一命令所消耗的时长为4200us。
由于第一时长4ms+100us小于第二时长4200us,则采用第一调度方式调度第一命令,也就是按照开始标签从小到大的顺序调度第一命令。
在本申请实施例中,通过第二调度方式调度第一命令所消耗的时长小于按照开始标签从小到大的顺序调度第一命令所消耗的时长,所以能够进一步降低读时延。
第二方面
请参见图10,本申请实施例提供一种降低读时延方法,该方法的流程描述如下:
S101:固态硬盘SSD控制器确定按照第一调度方式调度执行第一裸片DIE上的调度队列中的读命令所消耗的时长为第一时长,及按照第二调度方式调度执行读命令所消耗的时长为第二时长;其中,第一调度方式为在第一DIE上按照命令先入先出的顺序进行命令调度的方式,第二调度方式为通过调度除第一DIE外的其它DIE中各其它DIE上的读命令的方式,SSD控制器调度各其它DIE上的读命令后,能够通过执行各其它DIE上的读命令调取到的数据重构出第一DIE上与读命令对应的数据,第一DIE与各其它DIE分别位于SSD的不同芯片上;
S102:在第一时长大于第二时长时,SSD控制器按照第二调度方式从调度队列中调度读命令。
在本申请实施例中,在调度执行第一DIE的调度队列中的读命令之前,先确定按照第一调度方式,例如在第一DIE上按照命令先入先出的顺序调度执行调度队列中的读命令所需消耗的时长为第一时长,及按照第二调度方式,例如调度除第一DIE外的其它DIE上各其它DIE上的读命令,并通过执行各其它DIE上的读命令所调取的数据重构出第一DIE上的与读命令对应的数据所消耗的时长为第二时长,在第一时长大于第二时长时,按照第二调度方式调度第一命令,以降低读命令调度执行的时延。
在本申请实施例中,SSD控制器通过一个通道连接一个存储阵列,一个存储阵列中包括多个Nand Flash Chip,每个Nand Flash Chip的内部包括一个或多个DIE,例如以NandFlash Chip0为例,包括DIE0、DIE1、DIE2,每个DIE上维持一个调度队列。请参见图11,以DIE0为例,DIE0上的调度队列中的命令按照先入先出顺序排列,依次为读命令0、读命令1、读命令2、写命令0、读命令3,其中,读命令3就是需要被调度执行的读命令。在调度执行读命令3之前,首先确定按照第一调度方式调度执行读命令3所消耗的时长为第一时长,按照第二调度方式调度执行读命令3所消耗的时长为第二时长。
第一调度方式为在第一DIE上按照命令先入先出顺序调度执行调度队列中的读命令的方式,按照第一调度方式调度执行读命令所消耗的第一时长为单独执行读命令的执行时长、调度执行第一DIE上的调度队列中在读命令之前的所有命令的执行时长及系统当前正在执行的命令的剩余执行时长之和。例如参见图11,按照第一调度方式调度执行读命令3所消耗的时长为单独执行读命令的执行时长100us+调度执行调度队列中在读命令3之前的所有命令的执行时长2ms+300us+系统当前正在执行的命令的剩余执行时长之和0=2ms+400us。
第二调度方式为调度除第一DIE外的其它DIE中各其它DIE上的读命令的方式,通过执行各其它DIE上的读命令所调取到的数据重构出第一DIE上与读命令对应的数据。第二调度方式适用于RAID场景,包括但不限于RAID1、RAID3、RAID4、或者RAID5等。在下面的介绍中以RAID3为例。
SSD控制器通过一个通道连接一个存储阵列,一个存储阵列中包括多个NandFlash Chip,每个Nand Flash Chip的内部包括一个或多个DIE,例如Nand Flash Chip0,包括DIE0、DIE1、DIE2;Nand Flash Chip1,包括DIE0、DIE1、DIE2;Nand Flash Chip2,包括DIE0、DIE1、DIE2,这样Nand Flash Chip0-Nand Flash Chip2上的DIE0为一组、Nand FlashChip0-Nang Flash Chip2上的DIE1为一组、Nand Flash Chip0-Nand Flash Chip2上的DIE2为一组,其中以Nand Flash Chip0-Nand Flash Chip2上的一组DIE0为例,在存储数据A时,将数据分为两部分,A1和A2,其中,将A1部分存储在Nand Flash Chip0的DIE0上,将A2部分存储在Nand Flash Chip1的DIE0上,Nand Flash Chip2的DIE0上用于存储校验数据,例如A=A1XOR A2,也就是在Nand Flash Chip0的DIE0上的数据损坏时,可以通过NandFlash Chip2的DIE0上的校验数据及Nand Flash Chip1的DIE0上的数据重构出Nand FlashChip0的DIE0上的数据,或在Nand Flash Chip1的DIE0上的数据损坏时,可以通过NandFlash Chip2上的校验数据及Nand Flash Chip0的DIE0上的数据重构出Nand Flash Chip1上的数据。
基于此,本申请实施例中的第二调度方式就是在Nand Flash Chip1的DIE0的调度队列中存储读命令A1、在Nand Flash Chip2的DIE0的调度队列中存储读命令A2,在调度读命令A1和读命令A2之后,可以通过执行读命令A1所调取到的数据及执行读命令A2所调取到的数据重构出与Nand Flash Chip0的DIE0上与读命令对应的数据。其中,通过第二调度方式调度第一命令所消耗的时长为SSD控制器分别调度执行各其它DIE上的读命令所消耗的时长中的最大值。
在此需要说明的是,将读命令A1插入到Nand Flash Chip1的DIE0上的调度队列中的方式及将读命令A2插入到Nand Flash Chip2的DIE0上的调度队列中的方式同将读命令插入到Nand Flash Chip0的DIE0上的调度队列中的方式,也就是按照先入先出的顺序将读命令A1插入到Nand Flash Chip1的DIE0的调度队列中,将读命令A2插入到Nand FlashChip2的DIE0的调度队列中。
继续参见图11,假设在Nand Flash Chip1的DIE0的调度队列中已存储的命令为读命令0、读命令1、写命令0;Nand Flash Chip2的DIE0的调度队列中已存储的命令为读命令0、读命令1、读命令2。则调度执行Nand Flash Chip1的DIE0上的读命令A1所消耗的时长为单独执行读命令A1的执行时长100us+调度执行Nand Flash Chip1的DIE0的调度队列中在读命令A1之前的所有命令的执行时长2ms+100us+100us+系统当前正在执行的命令的剩余执行时长0=2ms+300us;调度执行Nand Flash Chip2的DIE0上的读命令A2所消耗的时长为单独执行读命令A2的执行时长100us+调度执行Nand Flash Chip2的DIE0的调度队列中在读命令A2之前的所有命令的执行时长100us+100us+100us+系统当前正在执行的命令的剩余执行时长0=400us。由于第二时长为SSD控制器分别调度执行各其它DIE上的读命令所消耗时长中的最大值。所以,采用第二调度方式调度读命令所消耗的时长为2ms+300us。
由于第一时长2ms+400us大于第二时长2ms+300us,所以采用第二调度方式调度读命令,以降低读时延。
下面结合附图介绍本申请实施例提供的设备。
图12示出了一种固态硬盘SSD控制器120的结构示意图。该SSD控制器120可以包括接收单元121、第一确定单元122、第二确定单元123、赋予单元124和插入单元125,其中,接收单元121也可以替代为生成单元,接收单元121、生成单元可以用于执行图4所示的实施例中的S41,和/或用于支持本申请实施例所描述的技术的其它过程,第一确定单元122可以用于执行图4所示的实施例中的S42和/用于支持本申请实施例所描述的技术的其它过程,第二确定单元123用于执行图4所示的实施例中的S43和/或用于支持本申请实施例所描述的技术的其它过程,赋予单元124可以用于执行图4所示的实施例中的S44和/用于支持本申请实施例所描述的技术的其它过程,插入单元125可以用于执行图4所示的实施例中的S45和/或用于支持本申请实施例所描述的技术的其它过程。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
图13示出了一种固态硬盘SSD控制器130的结构示意图。该SSD控制器130可以包括确定单元131和调度单元132。其中,确定单元131可以用于执行图10所示的实施例中的S101和/或用于支持本申请实施例所描述的技术的其它过程,调度单元132可以用于执行图10所示的实施例中的S102和/或用于支持本申请实施例所描述的技术的其它过程。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
图14示出了一种固态硬盘SSD控制器140的结构示意图。该SSD控制器140可以包括存储器141和处理器142,存储器141耦合至处理器142。其中,处理器142可以是中央处理器(CPU),或特定应用集成电路(Application Specific Integrated Circuit,ASIC),可以是一个或多个用于控制程序执行的集成电路,可以是基带芯片,等等。存储器的数量可以是一个或多个,存储器可以是只读存储器(Read only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)或磁盘存储器,等等。
通过对处理器142进行设计编程,将前述的命令排序方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行前述图4所示的实施例提供的命令排序方法,如何对处理器142进行设计编程为本领域技术人员公知的技术,这里不再赘述。
图15示出了一种固态硬盘SSD控制器150的结构示意图。该SSD控制器150可以包括存储器151和处理器152,存储器151耦合至处理器152。其中,处理器152可以是中央处理器(CPU),或特定应用集成电路(Application Specific Integrated Circuit,ASIC),可以是一个或多个用于控制程序执行的集成电路,可以是基带芯片,等等。存储器的数量可以是一个或多个,存储器可以是只读存储器(Read only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)或磁盘存储器,等等。
通过对处理器152进行设计编程,将前述的降低时延方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行前述图10所示的实施例提供的降低时延方法,如何对处理器152进行设计编程为本领域技术人员公知的技术,这里不再赘述。
本申请实施例还提供一种计算机存储介质,该存储介质可以包括存储器,该存储器可存储有程序,该程序执行时包括如前的图4及图10所示的方法实施例中记载的固态硬盘SSD控制器所执行的全部步骤。
本申请实施例还提供一种计算机程序产品,该程序产品在被计算机调用执行时,可以使得计算机执行图4及图10所示的方法实施例提供所述的方法。
本申请实施例还提供一种芯片系统,该芯片系统包括处理器,用于支持固态硬盘SSD控制器实现图4及图10所示的实施例提供所述的方法,例如生成或处理图4及图10所示的实施例提供的方法中所涉及的数据和/或信息。该芯片系统还包括存储器,所述存储器用于保存SSD控制器必要的程序指令和数据,该芯片系统中的处理器可以调用该芯片系统中的存储器存储的程序指令和数据,以使该芯片系统可以实现上述SSD控制器能够实现功能。该芯片系统,可以由芯片构成,也可以包含芯片和其它分立器件。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (15)

1.一种命令排序方法,其特征在于,包括:
固态硬盘SSD控制器确定接收到的或由所述SSD控制器生成的第一命令是否为读命令;
若所述第一命令为读命令,所述SSD控制器根据系统虚拟时间及当前调度队列中上一次接收到的一个读命令的结束标签确定所述第一命令的开始标签;
若所述第一命令为非读命令,所述SSD控制器根据系统虚拟时间及当前调度队列中上一次接收到的最后一个命令的结束标签确定所述第一命令的开始标签;其中,所述系统虚拟时间为系统当前正在执行的命令的开始标签,或为系统最近一次执行完的命令的结束标签;
所述SSD控制器根据所述第一命令的开始标签,确定所述第一命令的结束标签,并将所述第一命令的开始标签和结束标签赋予所述第一命令;
所述SSD控制器根据所述当前调度队列中的各个命令的开始标签,将赋予了开始标签和结束标签的所述第一命令插入到所述当前调度队列中的相应位置。
2.根据权利要求1所述的方法,其特征在于,所述SSD控制器根据当前调度队列中的各个命令的开始标签,将所述第一命令插入到所述当前调度队列中的相应位置,包括:
所述SSD控制器在所述第一命令的开始标签小于所述当前调度队列中的头命令的开始标签时,将赋予了开始标签和结束标签的所述第一命令插入所述当前调度队列中的头命令之前;或
所述SSD控制器将赋予了开始标签和结束标签的所述第一命令插入所述当前调度队列的第二命令和第三命令之间,其中,所述第二命令的开始标签小于或等于所述第一命令的开始标签,所述第三命令的开始标签大于所述第一命令的开始标签;或
所述SSD控制器在所述第一命令的开始标签大于或等于所述当前调度队列中的尾命令的开始标签时,将赋予了开始标签和结束标签的所述第一命令插入所述当前调度队列中的尾命令之后。
3.根据权利要求1所述的方法,其特征在于,所述SSD控制器根据所述第一命令的开始标签,确定所述第一命令的结束标签,包括:
若所述第一命令为读命令,所述SSD控制器将所述第一命令的开始标签加上第一预设长度值,得到所述第一命令的结束标签;
若所述第一命令为非读命令,所述SSD控制器将所述第一命令的开始标签加上第二预设长度值,得到所述第一命令的结束标签;
其中,所述第一预设长度值小于或等于所述第二预设长度值。
4.根据权利要求3所述的方法,其特征在于,
所述第一预设长度值等于
Figure FDA0003416342760000011
其中,φf为预先为读命令设置的权重,
Figure FDA0003416342760000012
为常数n或为所述第一命令执行时所调取的数据的字节数;
所述第二预设长度值等于
Figure FDA0003416342760000013
其中,φg为预先为写命令设置的权重,
Figure FDA0003416342760000014
为常数m或为所述第一命执行时所调取的数据的字节数,φf≥φg
5.根据权利要求1所述的方法,其特征在于,所述第一命令为读命令,所述当前调度队列为第一裸片DIE上的调度队列;
所述方法还包括:
所述SSD控制器确定按照第一调度方式调度执行所述第一命令所消耗的时长为第一时长,及按照第二调度方式调度执行所述第一命令所消耗的时长为第二时长;其中,所述第一调度方式为在所述第一DIE上按照开始标签从小到大的顺序进行调度的方式,所述第二调度方式为通过调度除所述第一DIE外的其它DIE中各其它DIE上的读命令的方式,所述SSD控制器调度所述各其它DIE上的读命令后,能够通过执行所述各其它DIE上的读命令所调取的数据重构出所述第一DIE上与所述第一命令对应的数据,所述第一DIE与所述各其它DIE分别位于SSD的不同芯片上;
若所述第一时长小于或等于所述第二时长,所述SSD控制器按照所述第一调度方式调度所述第一命令;
若所述第一时长大于所述第二时长,所述SSD控制器按照所述第二调度方式调度所述第一命令。
6.根据权利要求5所述的方法,其特征在于,所述第一时长为单独执行所述第一命令的执行时长、调度执行所述当前调度队列中在所述第一命令之前的所有命令的执行时长,及系统当前正在执行的命令的剩余执行时长之和;
所述第二时长为所述SSD控制器分别调度执行所述各其它DIE上的读命令所消耗的时长中的最大值。
7.根据权利要求5或6所述的方法,其特征在于,所述SSD控制器计算所述第一DIE和所述各其它DIE上的系统虚拟时间是相互独立的。
8.一种固态硬盘SSD控制器,其特征在于,包括:
存储器,用于存储指令;
处理器,与所述存储器耦合,所述处理器执行所述存储器中存储的指令执行:
确定通过接收到的或由所述处理器生成的第一命令是否为读命令;
若所述第一命令为读命令,根据系统虚拟时间及当前调度队列中上一次接收到的一个读命令的结束标签确定所述第一命令的开始标签;
若所述第一命令为非读命令,根据系统虚拟时间及当前调度队列中上一次接收到的最后一个命令的结束标签确定所述第一命令的开始标签;其中,所述系统虚拟时间为系统当前正在执行的命令的开始标签,或为系统最近一次执行完的命令的结束标签;
根据所述第一命令的开始标签,确定所述第一命令的结束标签,并将所述第一命令的开始标签和结束标签赋予所述第一命令;
根据所述当前调度队列中的各个命令的开始标签,将赋予了开始标签和结束标签的所述第一命令插入到所述当前调度队列中的相应位置。
9.根据权利要求8所述的控制器,其特征在于,所述处理器根据当前调度队列中的各个命令的开始标签,将所述第一命令插入到所述当前调度队列中的相应位置时,具体用于:
在所述第一命令的开始标签小于所述当前调度队列中的头命令的开始标签时,将赋予了开始标签和结束标签的所述第一命令插入所述当前调度队列中的头命令之前;或
将赋予了开始标签和结束标签的所述第一命令插入所述当前调度队列的第二命令和第三命令之间,其中,所述第二命令的开始标签小于或等于所述第一命令的开始标签,所述第三命令的开始标签大于所述第一命令的开始标签;或
在所述第一命令的开始标签大于或等于所述当前调度队列中的尾命令的开始标签时,将赋予了开始标签和结束标签的所述第一命令插入所述当前调度队列中的尾命令之后。
10.根据权利要求8所述的控制器,其特征在于,所述处理器根据所述第一命令的开始标签,确定所述第一命令的结束标签时,具体用于:
若所述第一命令为读命令,将所述第一命令的开始标签加上第一预设长度值,得到所述第一命令的结束标签;
若所述第一命令为非读命令,将所述第一命令的开始标签加上第二预设长度值,得到所述第一命令的结束标签;
其中,所述第一预设长度值小于或等于所述第二预设长度值。
11.根据权利要求10所述的控制器,其特征在于,
所述第一预设长度值等于
Figure FDA0003416342760000031
其中,φf为预先为读命令设置的权重,
Figure FDA0003416342760000032
为常数n或为所述第一命令执行时所调取的数据的字节数;
所述第二预设长度值等于
Figure FDA0003416342760000033
其中,φg为预先为写命令设置的权重,
Figure FDA0003416342760000034
为常数m或为所述第一命执行时所调取的数据的字节数,φf≥φg
12.根据权利要求8所述的控制器,其特征在于,所述第一命令为读命令,所述当前调度队列为第一裸片DIE上的调度队列;
所述处理器还用于:
确定按照第一调度方式调度执行所述第一命令所消耗的时长为第一时长,及按照第二调度方式调度执行所述第一命令所消耗的时长为第二时长;其中,所述第一调度方式为在所述第一DIE上按照开始标签从小到大的顺序进行调度的方式,所述第二调度方式为通过调度除所述第一DIE外的其它DIE中各其它DIE上的读命令的方式,所述处理器调度所述各其它DIE上的读命令后,能够通过执行所述各其它DIE上的读命令所调取的数据重构出所述第一DIE上与所述第一命令对应的数据,所述第一DIE与所述各其它DIE分别位于SSD的不同芯片上;
若所述第一时长小于或等于所述第二时长,按照所述第一调度方式调度所述第一命令;
若所述第一时长大于所述第二时长,按照所述第二调度方式调度所述第一命令。
13.根据权利要求12所述的控制器,其特征在于,所述第一时长为单独执行所述第一命令的执行时长、调度执行所述当前调度队列中在所述第一命令之前的所有命令的执行时长,及系统当前正在执行的命令的剩余执行时长之和;
所述第二时长为所述处理器分别调度执行所述各其它DIE上的读命令所消耗的时长中的最大值。
14.根据权利要求12或13所述的控制器,其特征在于,所述处理器计算所述第一DIE和所述各其它DIE上的系统虚拟时间是相互独立的。
15.一种计算机存储介质,其特征在于,所述计算机存储介质存储有指令,当所述指令在计算机上运行时,使得所述计算机执行如权利要求1-7任一项所述的方法。
CN201711295818.0A 2017-12-08 2017-12-08 命令排序方法、降低读时延方法及固态硬盘ssd控制器 Active CN109901785B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711295818.0A CN109901785B (zh) 2017-12-08 2017-12-08 命令排序方法、降低读时延方法及固态硬盘ssd控制器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711295818.0A CN109901785B (zh) 2017-12-08 2017-12-08 命令排序方法、降低读时延方法及固态硬盘ssd控制器

Publications (2)

Publication Number Publication Date
CN109901785A CN109901785A (zh) 2019-06-18
CN109901785B true CN109901785B (zh) 2022-04-05

Family

ID=66940536

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711295818.0A Active CN109901785B (zh) 2017-12-08 2017-12-08 命令排序方法、降低读时延方法及固态硬盘ssd控制器

Country Status (1)

Country Link
CN (1) CN109901785B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111966406B (zh) * 2020-08-06 2021-03-23 北京微核芯科技有限公司 乱序处理器中乱序执行队列的调度方法和装置
CN112000480B (zh) * 2020-08-25 2023-12-05 深圳忆联信息系统有限公司 提升ssd全盘扫描效率的方法、装置、设备及介质
CN115203116B (zh) * 2022-09-13 2022-12-06 南京芯驰半导体科技有限公司 一种axi总线传输方法、系统和芯片
CN117055820B (zh) * 2023-10-09 2024-02-09 苏州元脑智能科技有限公司 一种固态硬盘的命令处理方法、固态硬盘和存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101923522A (zh) * 2009-06-11 2010-12-22 中兴通讯股份有限公司 存储控制器及数据操作命令的处理方法
CN104572491A (zh) * 2014-12-30 2015-04-29 华为技术有限公司 一种基于固态硬盘的读缓存管理方法及装置
CN106339326A (zh) * 2016-08-26 2017-01-18 记忆科技(深圳)有限公司 一种提升固态硬盘顺序读性能的方法
CN106527967A (zh) * 2015-09-10 2017-03-22 蜂巢数据有限公司 减小存储设备中的读命令时延
CN106919520A (zh) * 2015-12-28 2017-07-04 龙芯中科技术有限公司 访存命令调度方法、装置和系统
CN107403639A (zh) * 2016-05-19 2017-11-28 三星电子株式会社 存储器控制器的操作方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6314471B1 (en) * 1998-11-13 2001-11-06 Cray Inc. Techniques for an interrupt free operating system
US7113942B2 (en) * 2003-06-27 2006-09-26 Microsoft Corporation Scalable storage and processing of hierarchical documents
US8060226B2 (en) * 2006-08-01 2011-11-15 Creative Technology Ltd Method and signal processing device to provide one or more fractional delay lines
US8638805B2 (en) * 2010-05-18 2014-01-28 Lsi Corporation Packet draining from a scheduling hierarchy in a traffic manager of a network processor
JP5296041B2 (ja) * 2010-12-15 2013-09-25 株式会社東芝 メモリシステムおよびメモリシステムの制御方法
US10089039B2 (en) * 2015-10-30 2018-10-02 Toshiba Memory Corporation Memory controller, memory device having the same, and memory control method

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101923522A (zh) * 2009-06-11 2010-12-22 中兴通讯股份有限公司 存储控制器及数据操作命令的处理方法
CN104572491A (zh) * 2014-12-30 2015-04-29 华为技术有限公司 一种基于固态硬盘的读缓存管理方法及装置
CN106527967A (zh) * 2015-09-10 2017-03-22 蜂巢数据有限公司 减小存储设备中的读命令时延
CN106919520A (zh) * 2015-12-28 2017-07-04 龙芯中科技术有限公司 访存命令调度方法、装置和系统
CN107403639A (zh) * 2016-05-19 2017-11-28 三星电子株式会社 存储器控制器的操作方法
CN106339326A (zh) * 2016-08-26 2017-01-18 记忆科技(深圳)有限公司 一种提升固态硬盘顺序读性能的方法

Also Published As

Publication number Publication date
CN109901785A (zh) 2019-06-18

Similar Documents

Publication Publication Date Title
US10042563B2 (en) Segmenting read requests and interleaving segmented read and write requests to reduce latency and maximize throughput in a flash storage device
CN109901785B (zh) 命令排序方法、降低读时延方法及固态硬盘ssd控制器
CN103377695B (zh) 存储系统、存储器件、存储控制器及操作其的方法
CN108958907B (zh) 用于数据存储系统的上下文感知动态命令调度
TWI483178B (zh) 包含記憶體系統控制器之裝置及相關方法
KR101560469B1 (ko) 메모리 시스템 컨트롤러들을 포함하는 장치 및 관련 방법들
JP5414656B2 (ja) データ記憶装置、メモリ制御装置及びメモリ制御方法
KR102079939B1 (ko) 데이터 저장 장치 및 그것의 명령어 스케줄링 방법
US9400603B2 (en) Implementing enhanced performance flash memory devices
US9304952B2 (en) Memory control device, storage device, and memory control method
CN106469126B (zh) 处理io请求的方法及其存储控制器
TW201303590A (zh) 包含記憶體系統控制器之裝置及相關方法
US9569381B2 (en) Scheduler for memory
US9264070B2 (en) Memory controller, memory system, and memory write method
JP2021125248A (ja) コントローラ、コントローラの動作方法及びそれを含む保存装置
US20220350655A1 (en) Controller and memory system having the same
US20100235566A1 (en) Flash memory apparatus and method of controlling the same
US20200218652A1 (en) Method and computer program product for performing data writes into a flash memory
US11494113B2 (en) Computer program product and method and apparatus for scheduling execution of host commands
US9208076B2 (en) Nonvolatile storage device and method of storing data thereof
CN106873901B (zh) 存储器管理方法、存储器控制电路单元与存储器存储装置
US20240118832A1 (en) Method and non-transitory computer-readable storage medium and apparatus for scheduling and executing host data-update commands
US20240118833A1 (en) Method and non-transitory computer-readable storage medium and apparatus for scheduling and executing host data-update commands
TWI822516B (zh) 執行主機寫入命令的方法及電腦程式產品及裝置
US10566062B2 (en) Memory device and method for operating the same

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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20220217

Address after: 550003 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an new area, Guiyang City, Guizhou Province

Applicant after: Huawei Cloud Computing Technology Co.,Ltd.

Address before: 710075 H104, qinfengge, Xi'an Software Park, No.68, Keji 2nd Road, high tech Zone, Xi'an City, Shaanxi Province

Applicant before: Huawei Technologies Co.,Ltd, Xi'an

GR01 Patent grant
GR01 Patent grant