一种SSD主控内部负载均衡系统及方法与流程

文档序号:19589469发布日期:2020-01-03 10:04阅读:878来源:国知局
一种SSD主控内部负载均衡系统及方法与流程

本发明涉及ssd主控,特别是一种ssd主控内部负载均衡系统及方法。



背景技术:

ssd主控为ssd固态硬盘的关键部件,其处理性能决定了ssd固态硬盘能够达到的最高性能。近几年,企业级pciessd主控性能已经进入百万级iops,而业界主流设计厂商在不断追求ssd主控极致性能的过程中,主要产生了两种架构类型:偏硬件型,以逻辑rtl实现ssd主控的ftl表项管理,cpu主要用于各种异常处理;偏软件型,表项管理主要由软件实现,采用非常强大的cpu来支撑算法实现。

偏硬件性系统设计的特点就是,整个io路径的所有主要功能,包括ftl表项管理这块,都由硬件逻辑门电路实现,cpu主要用于极少发生的异常处理。这种设计方式由于主要关键功能都采用硬件门电路实现,一方面会增加芯片面积提升芯片成本,一方面还会增加芯片功耗。同时该类型设计的技术复杂度非常高,稳定周期长,会对产品带来更多的技术风险和商业风险。

偏软件型系统设计的特点就是,硬件主要负责数据通路,cpu负责控制调度io命令在硬件模块间的交互和数据传输。由于cpu参与了更多io处理,在追求最高iops的同时,通常面临处理资源瓶颈,进而限制了系统的最大iops规格。

综上,偏硬件型表项管理设计,无法避免的问题就是功耗过高,稳定周期偏长,技术门槛高的问题;而偏软件型主要面临的就是cpu资源不够,通常受限cpu资源瓶颈,而无法达到最大性能。

为了突破cpu资源瓶颈问题,当前软件型主流方案主要通过增加片内cpu个数来解决。将io处理的主流程分解为多个子流程,每个子流程由1个cpu单独处理,所有cpu一起完成整个io的处理,进而达到提升整个系统性能的目的。这种方法需要进行cpu间信息交互,交互次数取决于分解的子流程。如果分解的子流程到单个cpu太少,则达不到增加cpu资源的目的;而分解太多,则cpu间交互太多,总的cpu内部消耗也会增大,那么每个io的时延也就增大了。



技术实现要素:

本发明所要解决的技术问题是,针对现有技术不足,提供一种ssd主控内部负载均衡系统及方法,解决偏硬件型系统设计面临的芯片面积和功耗问题,同时解决通常软件型系统方案中,多cpu处理带来的时延增加问题。

为解决上述技术问题,本发明所采用的技术方案是:一种ssd主控内部负载均衡系统,包括:

主机接口:用于负责接收来自主机的命令和数据,同时向主机返回响应和向主机传送数据;

nfc:负责完成ssd主控和nandflash之间的命令交互和数据传输;

io命令均衡引擎:负责分发来自主机接口的io命令请求到cpu处理,同时转发来自cpu的响应到主机接口;

多个cpu:用于负责对io命令均衡引擎分发过来的io命令的调度处理,并控制数据传输。

所述io命令均衡引擎包括:

cmdslot:硬件ram资源,用于存放cmd上下文信息,将命令请求和响应进行匹配;;cmd上下文信息即io命令上下文;

处理引擎:用于管理cpu资源和cmdslot资源,并为io命令选择合适的cpu;

iorouter:用于根据处理引擎为io命令选择目的cpu,将io命令通过多路复用器/多路分配器分发到对应的cpu;

多路复用器/多路分配器:用于将io命令分发到不同的cpu,并将各个cpu处理的io响应复用给处理引擎做进一步处理。

io命令均衡引擎分发io命令的过程包括:

1)收到io命令后,判断是否还存在cmdslot资源,若存在,则进入步骤2);否则,处理结束,即挂起当前io命令;

2)遍历下一个cmdslot记录的正在处理的io命令;

3)若待处理的io命令与cmdslot记录的正在处理的io命令存在访问lba(logicalblockaddress)地址冲突,则选择后者对应的cpu来处理该当前待处理的io命令,同时分配新的cmdslot资源来存放当前io命令上下文,进入步骤4);否则,分配新的cmdslot资源给当前待处理的io命令,并选择当前处理io命令数最少的cpu处理该当前待处理的io命令,进入步骤4);

4)将当前待处理的io命令通过iorouter转发给选出的cpu处理;

5)在cmdslot记录当前io命令的上下文信息,并将所述选出的cpu处理的io命令个数加1;

6)结束。

将各个cpu处理的响应复用给处理引擎做进一步处理的步骤包括:

1)多路复用器/多路分配器收到cpu发来的io响应;

2)将对应的cpu的io处理个数减1,并释放io响应对应的cmdslot资源;

3)处理引擎转发io响应到主机接口,并判断是否有挂起的待处理io命令在等待队列中;若有,则读取并处理等待队列里的io命令,进入步骤4);否则,进入步骤4);

4)结束。

本发明还通过了一种利用上述系统均衡ssd主控内部负载的方法,该方法主要实现过程为:通过io命令均衡引擎在cpu间分发io命令,每个cpu独立处理分发给自己的整个io命令,各cpu间互不交互。

保证cpu间互不交互的方法包括以下步骤:

1)若当前待处理的io命令与cmdslot记录的正在处理的io命令存在访问lba地址冲突,则分配新的cmdslot资源给当前待处理的io命令,则选择后者对应的cpu来处理该当前待处理的io命令,同时分配新的cmdslot资源来存放当前io命令上下文,进入步骤2);否则,分配新的cmdslot资源给当前待处理的io命令,并选择当前处理io命令数最少的cpu处理该当前待处理的io命令,进入步骤2);

2)将当前待处理的io命令转发给选出的cpu处理。

与现有技术相比,本发明所具有的有益效果为:本发明在ssd主控内部利用io命令负载均衡引擎,在多个cpu间分发io命令,各cpu间互不交互,通过内部io命令负载均衡引擎的io地址冲突机制,来保证各个cpu间的io处理真正独立,互不干扰,解决了偏硬件型系统设计面临的芯片面积和功耗问题,同时解决了通常软件型系统方案中,多cpu处理带来的时延增加问题。本发明通过使用io均衡引擎,能够在使用多cpu资源处理io命令的同时,让多个cpu能够独立、完整的处理每一个io,有效避免了cpu间消息交互的开销给单个io命令所带来的时延增加;本发明的ssd主控系统,各个cpu独立完成相同功能,互不影响。可以通过简单配置io均衡引擎管理的cpu资源个数和实际物理布局的cpu资源,不用更改io路径和处理流程,就能够设计实现出各种性能规格的ssd主控芯片。

附图说明

图1为本发明ssd主控内部负载均衡整体框图;

图2为本发明io命令均衡引擎结构示意图;

图3为本发明io分发响应时序图;

图4为本发明io均衡引擎分发io命令流程图;

图5为本发明io均衡引擎处理io命令响应流程图。

具体实施方式

本发明利用一个io命令均衡引擎,负责将来自hif接口的io命令分发到内部各个cpu,各cpu再负责自己所接收到的io进行处理。每个cpu在系统内都有唯一编号。

如图1,本发明的各模块功能如下:

hif:hostinterface,主机接口,负责接收来自主机的命令和数据,同时向主机返回响应和向主机传送数据。

nfc:nandflashcontroller,nandflash控制器,负责完成ssd主控和nandflash之间的命令交互和数据传输。

iocommandbalanceengine:io命令均衡引擎,负责完成分发来自hif模块的io命令请求到内部cpu处理,同时转发来自内部cpu的响应到hif。io命令均衡引擎可以灵活配置系统内部用于处理io命令的cpu资源个数来适应不同的ssd主控性能要求。

datapath:数据通路,hif和nfc之间的数据传输通路,主要包括数据总线和dma引擎等。

dataram:用于数据通路传输数据过程中的数据缓存。

cpux:负责io命令均衡引擎分发过来的io命令的调度处理和控制数据传输。每个cpu都完成相同的计算和控制功能。

如图2,io命令均衡引擎负责为io选择用于处理该io的合适的cpu,并将该io转发给该cpu,同时记录包括io地址范围、目的cpu标识、目的cpu当前正处理命令个数等上下文信息。

cmdslot:commandslot,命令槽位,用于存放io命令上下文的空间。cmdslot记录的io命令上下文包括,cmdslot是否有效标识,io标识,io地址范围。

processengine:处理引擎,负责管理cpu资源和cmdslot资源,并根据策略为io命令选择合适cpu资源。

iorouter:io路由器,根据processengine为io选择的目的cpu,将io通过demux分发到对应的cpu。

mux/demux:多路复用器/多路分配器,负责将io命令分发到不同的cpu以及将各个cpu处理的响应复用给processengine做进一步处理。

本发明通过在ssd主控内部利用io命令负载均衡引擎,在多个cpu间分发io命令,各cpu间互不交互。本发明的ssd主控,通过内部io命令负载均衡引擎的io地址冲突机制,来保证各个cpu间的io处理真正独立,互不干扰。可通过简单配置io命令均衡引擎管理的cpu资源来适应不同的性能需求。io命令均衡器引擎能够检测当前均衡处理器待分发处理io和各个cpu正在处理的io间是否存在地址冲突。io命令均衡器引擎能够将待分发处理的io分发给地址存在冲突的io所对应的cpu进行处理。io命令均衡器引擎通过commandslot的方式,记录前后正在处理的io上下文信息,包括目的cpu编号,io地址范围等。在io命令均衡器引擎与cpu间交互的控制消息中,携带commandslot编号来关联均衡引擎分发给cpu的io请求消息和cpu发给均衡引擎的io响应消息。io命令负载均衡引擎记录当前各个cpu正在处理的io个数,并选择最小io处理个数的cpu来处理当前待处理io。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1