掌桥专利:专业的专利平台
掌桥专利
首页

流量管理方法及系统,固态硬盘控制器及固态硬盘

文献发布时间:2023-06-19 09:54:18


流量管理方法及系统,固态硬盘控制器及固态硬盘

技术领域

本申请涉及计算机存储技术领域,特别涉及一种流量管理方法及系统,一种固态硬盘控制器及固态硬盘。

背景技术

目前,一般在固态存储器中,通过软件来控制存储器的数据处理速度,但由于软件运行过程中会受到温度、内存等不可控因素的影响,因此软件运行过程中无法保证处理速度稳定于理想情况。

因此,如何控制存储器的数据处理速度,是本领域技术人员需要解决的问题。

发明内容

有鉴于此,本申请的目的在于提供一种流量管理方法及系统,一种固态硬盘控制器及固态硬盘,以控制存储器的数据处理速度。其具体方案如下:

第一方面,本申请提供了一种流量管理方法,应用于存储器,包括:

查询流控队列和SQ是否均为非空状态;所述流控队列包括:至少一个流控标识,所述流控标识利用硬件逻辑电路按照预设速度产生;

若是,则按照读指针读取所述SQ中的消息,更新所述读指针后,删除位于所述流控队列的队头的流控标识。

优选地,还包括:

若所述流控队列和/或所述SQ为空状态,则等待第一预设时间后,执行所述查询流控队列和SQ是否均为非空状态的步骤。

优选地,还包括:

若获得新消息,则查询所述SQ是否已满;

若是,则等待第二预设时间后,执行查询所述SQ是否已满的步骤;

若否,则按照写指针写入消息至所述SQ,并更新所述写指针。

优选地,还包括:

若获得新流控标识,则查询所述流控队列是否已满;

若是,则等待第三预设时间后,执行查询所述流控队列是否已满的步骤;

若否,则将所述新流控标识添加至所述流控队列的队尾。

优选地,所述删除位于所述流控队列的队头的流控标识之后,还包括:

分别更新所述流控队列和所述SQ的状态,并执行所述查询流控队列和SQ是否均为非空状态的步骤。

优选地,还包括:

若达到产生速度调整条件,则调整所述预设速度。

第二方面,本申请提供了一种流量管理系统,应用于存储器,包括:至少一个流量管理器,所述流量管理器包括:

查询模块,用于查询流控队列和SQ是否均为非空状态;所述流控队列包括:至少一个流控标识,所述流控标识利用硬件逻辑电路按照预设速度产生;

执行模块,用于若所述流控队列和所述SQ均为非空状态,则按照读指针读取所述SQ中的消息,更新所述读指针后,删除位于所述流控队列的队头的流控标识。

优选地,所述流量管理器设置于所述固态硬盘中的不同硬件模块之间。

第三方面,本申请提供了一种固态硬盘控制器,包括:如上所述的系统。

第四方面,本申请提供了一种固态硬盘,包括:如上所述的固态硬盘控制器。

通过以上方案可知,本申请提供了一种流量管理方法,应用于存储器,包括:查询流控队列和SQ是否均为非空状态;所述流控队列包括:至少一个流控标识,所述流控标识利用硬件逻辑电路按照预设速度产生;若是,则按照读指针读取所述SQ中的消息,更新所述读指针后,删除位于所述流控队列的队头的流控标识。

可见,流控队列中的流控标识按照预设速度产生。并且,当流控队列和SQ均为非空状态,即流控队列中有流控标识,且SQ中有待处理消息时,则按照读指针读取SQ中的消息,也就是处理SQ中的一个消息(SQ中的消息是逐一处理的),而后更新所述读指针后,并删除位于所述流控队列的队头的一个流控标识。即:当流控队列和SQ同时有数据时,才读取SQ中的一个消息,而后删除一个流控标识,使得SQ中消息的读取速度在流控队列中流控标识的产生速度的控制下,从而达到控制存储器的数据处理速度的目的,即实现流量管理和控制。由于流控标识利用硬件逻辑电路按照预设速度产生,因此流控标识的产生速度更为稳定,那么SQ中消息的读取速度也就更稳定。故该控制过程不涉及温度、内存等不可控因素,故有利于控制数据处理速度处于稳定理想情况。

相应地,本申请提供的一种流量管理系统和一种固态硬盘控制器及固态硬盘,也同样具有上述技术效果。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请公开的一种流量管理方法流程图;

图2为本申请公开的一种流量管理器示意图;

图3为本申请公开的一种固态硬盘结构示意图;

图4为本申请公开的一种固态硬盘控制器示意图;

图5为本申请公开的一种基于流量管理系统进行流控的配置示意图;

图6为本申请公开的一种CPU和DP基于Doorbell进行数据交互的示意图;

图7和图8为本申请公开的一种Doorbell管理SQ和流控队列的示意图;

图9为本申请公开的一种Doorbell与外部模块进行交互的流程图;

图10为本申请公开的一种Doorbell更新队列状态的流程图;

图11为本申请公开的一种流控效果示意图;

图12为本申请公开的另一种基于流量管理系统进行流控的配置示意图;

图13为本申请公开的一种调整流控点中的流控速度的流程图。

具体实施方式

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

目前,一般在固态存储器中,软件来控制存储器的数据处理速度,但由于软件运行过程中会受到温度、内存等不可控因素的影响,因此软件运行过程中无法保证处理速度稳定于理想情况。为此,本申请提供了一种流量管理方案,控制存储器的数据处理速度。

参见图1所示,本申请实施例公开了一种流量管理方法,应用于存储器,包括:

S101、查询流控队列和SQ是否均为非空状态;若是,则执行S102;若否,则等待第一预设时间后,执行S101;

其中,流控队列包括:至少一个流控标识,流控标识利用硬件逻辑电路按照预设速度产生。也就是,流控队列中各个流控标识按照某一速度持续产生,例如:每3秒产生一个流控标识。

S102、按照读指针读取SQ中的消息,更新读指针后,删除位于流控队列的队头的流控标识。

需要说明的是,SQ(Submission Queue,消息提交队列)中的消息是逐一读取的,也就是每次只读取读指针标示的某一个消息。在读取一个消息后,读指针移动一位,同时删除位于流控队列的队头的流控标识。一般地,产生早的流控标识排列在流控队列的队头,后面产生的流控标识排列在流控队列的队尾。每读取一个消息,就消耗掉一个流控标识,使得SQ中消息的读取速度在流控队列中流控标识的产生速度的控制下,从而达到控制存储器的数据处理速度的目的。当然,若流控队列没有流控标识,就不能读取SQ中消息。

在一种具体实施方式,往SQ中添加新消息遵循如下步骤:若获得新消息,则查询SQ是否已满;若是,则等待第二预设时间后,执行查询SQ是否已满的步骤;若否,则按照写指针写入消息至SQ,并更新写指针。

在一种具体实施方式,往流控队列中添加新流控标识遵循如下步骤:若获得新流控标识,则查询流控队列是否已满;若是,则等待第三预设时间后,执行查询流控队列是否已满的步骤;若否,则将新流控标识添加至流控队列的队尾。

在一种具体实施方式,删除位于流控队列的队头的流控标识之后,还包括:分别更新流控队列和SQ的状态,并执行查询流控队列和SQ是否均为非空状态的步骤。

需要说明的是,流控标识的产生速度可以根据实际情况进行调整。具体可以预设多种调整条件,若达到产生速度调整条件,则调整预设速度。例如:当温度较高时,则减小预设速度,以减小工作负载,从而减小功耗,降低温度;当温度较低时,则增大预设速度,原理同上,不再赘述。

可见,在本申请实施例中,当流控队列和SQ同时有数据时,才读取SQ中的一个消息,而后删除一个流控标识,使得SQ中消息的读取速度在流控队列中流控标识的产生速度的控制下,从而达到控制存储器的数据处理速度的目的,即实现流量管理和控制。由于流控标识利用硬件逻辑电路按照预设速度产生,因此流控标识的产生速度更为稳定,那么SQ中消息的读取速度也就更稳定。故该控制过程不涉及温度、内存等不可控因素,故有利于控制数据处理速度处于稳定理想情况。

下面对本申请实施例提供的一种流量管理系统进行介绍,下文描述的一种流量管理系统与上文描述的一种流量管理方法可以相互参照。

本申请实施例公开了一种流量管理系统,应用于存储器,包括:至少一个流量管理器。

请参见图2,流量管理器包括:

查询模块201,用于查询流控队列和SQ是否均为非空状态;流控队列包括:至少一个流控标识,流控标识利用硬件逻辑电路按照预设速度产生;

执行模块202,用于若流控队列和SQ均为非空状态,则按照读指针读取SQ中的消息,更新读指针后,删除位于流控队列的队头的流控标识。

在一种具体实施方式,流量管理器设置于固态硬盘中的不同硬件模块之间。固态硬盘中的不同硬件模块如:前端模块(FE,Front End),数据处理模块(DP,DataProcess),算法模块(FTL,Flash Translation Layer),后端模块(BE,Back End)等,这些模块按照既定的数据处理逻辑设置在固态硬盘中,逻辑上相邻的两个模块之间可以设置一个流量管理器,用于控制逻辑上相邻的两个模块之间处理数据的速度。若前一个模块的输出为后一个模块的输入,则认为这两个模块逻辑上相邻。

在一种具体实施方式,流量管理器还包括:

轮询模块,用于若流控队列和/或SQ为空状态,则等待第一预设时间后,执行查询流控队列和SQ是否均为非空状态的步骤。

在一种具体实施方式,流量管理器还包括:消息管理模块,该消息管理模块具体用于:

若获得新消息,则查询SQ是否已满;

若是,则等待第二预设时间后,执行查询SQ是否已满的步骤;

若否,则按照写指针写入消息至SQ,并更新写指针。

在一种具体实施方式,流量管理器还包括:流控标识管理模块,该流控标识管理模块具体用于:

若获得新流控标识,则查询流控队列是否已满;

若是,则等待第三预设时间后,执行查询流控队列是否已满的步骤;

若否,则将新流控标识添加至流控队列的队尾。

在一种具体实施方式,流量管理器还包括:

状态更新模块,用于分别更新流控队列和SQ的状态,并执行查询流控队列和SQ是否均为非空状态的步骤。

在一种具体实施方式,流量管理器还包括:

速度调整模块,用于若达到产生速度调整条件,则调整预设速度。

其中,关于本实施例中各个模块、单元更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。

可见,本实施例提供了一种流量管理系统,该系统中的任一个流量管理器能够使SQ中消息的读取速度在流控队列中流控标识的产生速度的控制下,从而达到控制存储器的数据处理速度的目的,即实现流量管理和控制。

下面对本申请实施例提供的一种固态硬盘控制器进行介绍,下文描述的一种固态硬盘控制器与上文描述的一种流量管理方法及系统可以相互参照。

本申请实施例公开了一种固态硬盘控制器,包括:如上任意实施例公开的系统。该系统包括:至少一个流量管理器。流量管理器可以设置于固态硬盘中的不同硬件模块之间。

其中,流量管理器包括:

查询模块,用于查询流控队列和SQ是否均为非空状态;流控队列包括:至少一个流控标识,流控标识利用硬件逻辑电路按照预设速度产生;

执行模块,用于若流控队列和SQ均为非空状态,则按照读指针读取SQ中的消息,更新读指针后,删除位于流控队列的队头的流控标识。

在一种具体实施方式,流量管理器还包括:

轮询模块,用于若流控队列和/或SQ为空状态,则等待第一预设时间后,执行查询流控队列和SQ是否均为非空状态的步骤。

在一种具体实施方式,流量管理器还包括:消息管理模块,该消息管理模块具体用于:

若获得新消息,则查询SQ是否已满;

若是,则等待第二预设时间后,执行查询SQ是否已满的步骤;

若否,则按照写指针写入消息至SQ,并更新写指针。

在一种具体实施方式,流量管理器还包括:流控标识管理模块,该流控标识管理模块具体用于:

若获得新流控标识,则查询流控队列是否已满;

若是,则等待第三预设时间后,执行查询流控队列是否已满的步骤;

若否,则将新流控标识添加至流控队列的队尾。

在一种具体实施方式,流量管理器还包括:

状态更新模块,用于分别更新流控队列和SQ的状态,并执行查询流控队列和SQ是否均为非空状态的步骤。

在一种具体实施方式,流量管理器还包括:

速度调整模块,用于若达到产生速度调整条件,则调整预设速度。

在本实施例中,利用该系统中的任一个流量管理器就能够控制固态硬盘中的数据处理速度,实现流量管理和控制。

下面对本申请实施例提供的一种固态硬盘进行介绍,下文描述的一种固态硬盘与上文描述的一种流量管理方法及系统,一种固态硬盘控制器可以相互参照。

本申请实施例公开了一种固态硬盘,包括:如上任意实施例所述的固态硬盘控制器。具体可参照上述实施例的相关介绍,本实施例不再赘述。

为了更清楚地解释本申请,现结合固态硬盘的具体结构以及应用做如下介绍。

请参见图3,固态硬盘(SSD)一般包括:

固态硬盘控制器(SSD Controller):作为控制运算单元,用于管理SSD的内部。

闪存阵列(NAND Flash):用于存储数据(用户数据和系统数据)。一般呈现多个闪存通道(Channel,简写CH),一个通道独立连接一组NAND Flash,如图1中CH0、CH1……CHx。闪存的特性是:写入之前,必须进行数据擦除,且每个闪存擦除次数有限。

动态随机存储器(DDR,DRAM):作为缓存。

连接器(Connector):用于连接主机(PC或者服务器)或其他外围单元,如:OSC-晶振,JTAG-调试接口,串口(UART),传感器(Sensor),电源芯片(PMIC),串行外设接口(SPI)等。

请参见图4,固态硬盘控制器包括:主机接口控制器(PCIe/NVMe Controller/PHY),动态随机存储器控制器(DMAC,DDR Controller/PHY),数据通路(Data PathProcessor)模块,闪存控制器(FCH,Flash Controller/PHY),CPU模块,外设模块等。

其中,主机接口控制器用于处理固态硬盘和主机的通信协议;动态随机存储器控制器用于处理固态硬盘和动态随机存储器的通信协议;闪存控制器用于处理固态硬盘和闪存的通信协议;数据通路模块用于处理固态硬盘内部数据流。

一般地,固态硬盘处理数据读写由如下几个模块参与完成:

前端模块(FE,Front End):负责主机通信协议栈,命令数据分发处理。

数据处理模块(DP,DataProcess):负责数据通路的处理,如写缓存的管理。

算法模块(FTL,Flash Translation Layer):负责地址映射表的管理,写入闪存数据颗粒度的管理等。

后端模块(BE,Back End)负责闪存数据读写和相关闪存命令的管理。

本申请设计实现了Doorbell系统(即流量管理系统),其中的Doorbell(即流量控制器)数量可根据需求配置一个或者多个。如图5所示,虚线代表CPU和数据通路模块(DP)之间的通路,其二者通过Doorbell进行数据交互的。圆点代表流控点(即设置有Doorbell的点),通过控制读取消息的速度来控制IO处理速度。设置有流控点的通路上,均能控制流量,从而满足整个系统的流控需求。NVMe代表固态硬盘连接的主机端。

如图5所示,可以在多处进行流量控制。但如果在各个硬件模块中进行流控设计,那么必然需要修改这些硬件模块,一般这些硬件模块都是模块化的,不宜进行修改。为此,本发明将DoorBell模块化,可以不同需求点进行实例化,同时不会影响或者修改其他硬件模块的功能。

如图6所示,以CPU和DP之间信息交换为例。在Doorbell出口进行限制,SQ中的消息为CPU提交的请求消息,CQ(Completion Queue)中的消息是DP返回的完成消息。具体的,CPU写消息至SQ,以将待处理消息传递给DP,DP读取SQ中的消息并进行对应的IO操作。通过控制SQ被DP取走的速度,就能控制DP处理数据的速度。

Doorbell可以设置于CPU和硬件模块之间、硬件模块和CPU之间或者CPU和CPU之间,且支持双向消息交互,同时均采用消息队列方式进行交互,以便有效减少通信的堵塞和等待。

其中,SQ是生产者用于向消费者发送消息的命令队列。例如,CPU生成多个命令后,通过SQ下发给要执行该命令的硬件模块。CQ用于返回SQ中的消息的完成情况和相关信息。CQ返回的命令完成结果的顺序和SQ命令发放的顺序可以是乱序的,在每个CQ的消息里标记该Entry完成了SQ里的哪一个命令。通常使用SQ和CQ组合进行消息通信,即成对出现,如图6所示。当然,对于不需要完成状态的命令也可以只使用SQ。

请参见图7和图8,Doorbell管理两个队列,一个是SQ,另一个是流控队列。流控队列中的Flag(即流控标识)用于控制SQ中的消息是否能被读取。其中具体包括:

指针管理:SQ中消息的写入或读取,需要利用写指针和读指针,来指示消息的写入地址和读取地址。

队列管理:队列中的每个Entry的大小以及Entry个数,Entry存放的RAM地址。Entry指队列中任一个数据所占用的空间。对SQ而言,一个Entry中存放一个消息。对流控队列而言,一个Entry中存放一个Flag。

流控管理:包括Flag生产者管理器,Flag消费者管理器和队列状态管理器。

队列状态管理器用于管理流控队列和SQ的空状态或满状态,通过写满状态和读空状态来给CPU或者硬件模块进行指示SQ的可写可读状态。

流控队列中的Flag的控制逻辑包括:Flag由硬件逻辑电路匀速地自动产生,并写入至流控队列,硬件逻辑电路即Flag生产者。当有Flag时,才能开放取SQ中的消息的权限。外部模块每取走SQ中的一个消息,就消耗一个Flag,即消息的读取速度取决于Flag生产的速度。

其中,当流控队列和SQ均为非空状态(用DB_Rd_NonEmpty表示)时,指示SQ中的消息可读,且每次只读取一个。

DB_Rd_NonEmpty是DoorBell给外部模块(CPU或硬件模块)表现的非空状态,其非空状态必须满足SQ_FIFO_NonEmpty和Flag_FIFO_NonEmpty同时均为非空。外部模块是相当于DoorBell而言的。

其中,DB_Rd_CNT=Min(SQ_FIFO_RD CNT,Flag_FIFO_RD CNT)DB_Rd_CNT是DoorBell可读Entry数量的指示,其值取SQ和流控队列二者中的最小值。SQ_FIFO_RD CNT为SQ中的Entry数量,Flag_FIFO_RD CNT为流控队列中的Entry数量。

Flag生产者管理器可配置Flag生产速度。其中,流控队列可采用典型的硬件FIFO。Flag生产者管理器可以控制Flag的匀速产生和写入,以使Flag的产生速度更为稳定,那么SQ中消息的读取速度也就更稳定,其具体可以由逻辑电路,比如状态机和定时器实现,当然也可以有其他实现方式(如微码器等)。

Flag消费者管理器用于读取Flag,Flag本身没有具体意义,读取后丢弃即可。读取Flag的条件是SQ中有待处理消息,其具体可以由逻辑电路,比如状态机和定时器实现,当然也可以有其他实现方式(如微码器等)。若读取Flag的速度大于Flag的产生速度,那么读取的速度被限定到和产生速度相同。若读取Flag的速度小于Flag的产生速度,那么其读取速度取决于本身的读取速度,即Flag的产生速度不控制Flag的读取速度。Flag的读取速度即SQ中的消息的读取速度。对于Flag读取速度的控制,关键在于流控队列和SQ的状态管理。

如图9所示,对于一个DoorBell而言,其包括与外部模块进行交互的两种操作:一种是外部模块写DoorBell,一种外部模块读DoorBell。

例如:CPU查询SQ的满标记,非满,则准备向SQ中写入新消息,即:读取SQ的写指针(Wr_Ptr),将消息写入该指针指向的空间;否则等待一段时间后,再查询SQ的满标记。其中,如果写指针未使能或者不支持写指针自动更新,那么CPU在写入新消息后,需要更新写指针。若写指针使能或者支持写指针自动更新,则自动更新写指针。

与CPU交互的硬件模块检测SQ和流控队列的空标记,若二者均为非空,表示SQ有待处理的命令且允许读取,那么获得读指针(Rd_Ptr),并通过总线从读指针指向的空间取走消息,然后执行消息所表达的IO操作;否则,下次再检测。其中,若读指针未使能或者不支持读指针自动更新,那么硬件模块在读取消息后,要更新读指针。若读指针使能或者支持读指针自动更新,那么自动更新读指针。

硬件模块执行完IO操作后,检测CQ的满状态,非满时,准备向CQ写入消息,那么硬件读取CQ的写指针,将消息写入该指针指向的空间;否则,等待一段时间后,再查询CQ的满标记。其中,若写指针未使能或者不支持写指针自动更新,那么硬件模块在写入消息后,要更新写指针。若写指针使能或者支持写指针自动更新,那么自动更新写指针。

硬件模块写入消息至CQ后,CPU检测CQ的空标记,若非空,则表示CQ有待处理的消息,那么CPU获得读指针(Rd_Ptr),并通过总线从读指针指向的空间取走消息,以获知该消息所表达的IO操作的完成状态信息。否则下次再检测。同理,如果读指针未使能或者不支持读指针自动更新,那么CPU在读取新消息后,需要更新读指针。若读指针使能或者支持读指针自动更新,则自动更新读指针。

可见,外部模块(CPU或者硬件模块)对于流控是不可见的,即外部模块仅仅需要查询SQ和流控队列是否为非空状态,从而决定是否读取消息。据此,只需将DoorBell设置于某一通路,而无需修改该通路上的其他模块。因此对于DoorBell而言,其只需控制SQ和流控队列是否为非空状态即可,具体控制逻辑请参见图10。

通过上述可知,设置DoorBell后,根据需求配置DoorBell中的Flag的生产速度,即可满足流控的要求。例如:要控制DP模块的数据处理速度,首先计算处理IO的期望速度值,设置DP模块对应的Doorbell中的Flag的生产速度为该期望速度值即可。一般地,流控效果可参见图11,开始时由于有足够的Flag和待处理消息,其处理速度会比较高,随后消息处理速度和Flag产生速度一致,使得数据处理速度处于稳定理想情况。图11中横坐标表示时间,纵坐标表示数据处理速度。

一般情况下,对固态硬盘进行流控的性能要求为:保持主机读写数据的平稳性,这取决主机写数据和垃圾回收读写数据的速度比例关系。

一种具体流控应用实例,请参见图12,设定后端BE能够提供的带宽是12GB/s,垃圾回收需要先读后写,来腾挪空间给主机写入,考虑到读操作需求较大,那么设定垃圾回收读占用6GB/s,剩余带宽均分给垃圾回收写和主机写,即垃圾回收写占用3GB/s,主机写占用3GB/s。图12中的圆圈表示Doorbell,即流控点。

为了方便地进行流控,在后端分离至少3个Doorbell通道,分别对应垃圾回收读Doorbell通道,垃圾回收写Doorbell通道,主机写Doorbell通道。那么只对这3个DoorBell设定流控速度分别为6GB/s,3GB/s,3GB/s,使得对应的主机写速度较平稳的保持在3GB/s。进一步的,为了确保前端也有一个稳定的写入速度,对DP/NVMe进行流控,即控制DP/NVMe处理数据的速度,如设定流控速度分别为3GB/s和3GB/s,从而确保前端对于命令的处理速度。结合上述BE端的流控,DP/NVMe的流控,从而可使整体速度上限平稳保持在3GB/s。

闪存和DRAM是固态硬盘的主要存储介质,固态硬盘的工作功耗主要取决于这类器件,换句话说,闪存和DRAM的工作负载影响功耗,从而影响工作温度。在固态硬盘中,一般写DRAM主要是NVMe接收来自主机的数据,以及DP/DMAC转发数据给后端写入到NAND Flash中。固态硬盘温控的本质就是进行数据处理流控。

一种具体温控应用实例,请参见图12,调整各个流控点DoorBell中的Flag的生产速度,即可调整相应的数据处理速度。例如:当检测到温度超过温控阈值时,只要对NVMe,DP,FCH,DMAC对应的DoorBell进行Flag生产速度的降低,就能相应降低各处的数据处理速度。其中,温控阈值可以分为上限和下限,上限说明温度过高,需要限速,流控速度往下调整;反之,下限说明温度离安全工作温度较远,可以提速,流控速度往上调整。请参见图13,图13为调整各个流控点中的流控速度的流程图。

本实施例在Doorbell中设计流控机制,并全局使用Doorbell进行硬件流控。其流控直接与速度关联,流控的速度趋近于均速,且其速度是可配置的,为系统流控设计提供了有利的硬件基础,能够满足不同场景下的流控需求。不仅简化了软件设计的复杂度,而且流控基于硬件实现,大量减少了软件开销,减轻了CPU的负载。

本申请涉及的“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法或设备固有的其它步骤或单元。

需要说明的是,在本申请中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的可读存储介质中。

本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

相关技术
  • 流量管理方法及系统,固态硬盘控制器及固态硬盘
  • 固态硬盘垃圾回收任务的管理方法、控制器和固态硬盘
技术分类

06120112341768