电子说
SSD主控芯片
除了做SSD还能干点啥?
DPU600是DapuStor业内首创的智能存储SoC,基于最新的12nm FinFET工艺,可作为SSD主控提供业界领先的性能,还集成了可计算存储平台,用于ASIC加速的机器学习架构等。
上期讲到得益于DPU600内置的应用处理器平台,可以将DPU600作为SSD Tester的Client平台。本期小编再说道说道,其他非传统SSD功能-关于计算存储的功能,这是研发小伙伴们努力后的干货。
同样地,小编需要先说道说道一下背景:
在大数据应用的背景下,海量的数据传输占用了各类总线,网络带宽,与此同时,固态硬盘(SSD)本身含有的CPU的算力也越来越强。为了减少大数据量的传输,从而衍生出各类对存储计算一体化(PIS-Processing In Storage)的需求,即在数据端固态硬盘内进行计算处理,仅传输结果和部分数据,从而减少海量数据传输,减轻总线和网络负载(Offloading)。一般而言,对I/O通信带宽敏感(I/O intensive)和对数据敏感(Data-intensive)的两类操作;而需要高效计算、对CPU计算敏感的操作则不适合Offloading到SSD中。
有人肯定想问,小编你说这么多,光有想法好像有点空泛,有没有具体方案和应用场景?
小编必须承认:存算一体化固态硬盘(PIS-SSD)的相关架构和实现技术,目前确实相当少见被公布,毕竟在SSD领域,这里比较前沿的技术。在小编送出N个鸡腿情况下,研发小伙伴还是给了一些材料,以便进行探讨;
首先说说现有的技术,如图1,存储器端运行的是裸系统(Bare Metal)-固件(Firmware),系统偏重于进行硬件支持的相关数据处理,而对应计算相关的需求,一般仅能承接部分简单的数据计算,这主要是引入过多的数据计算,会影响存储功能的实时处理。一般地,当有相关计算需求(主要是边缘计算(Edge Computing),机器学习(Machine Learning),主机通过自定义命令的形式通知SSD系统进行处理,此种方式不够灵活,且偏重于定制化,其开发应用效率低,无法满足更多计算应用的需求。
图1
说到这里,大家想到了DPU600肯定有什么东东,可以在此类应用上发挥作用?没错,大普微正在探索在DPU600上实现一种存储计算一体的固态硬盘。
先看一下,相对于图1,我们的设计基于如图2,服务器或者本地CPU成为主机(Host)系统,主机系统可以同一个系统,也可以是不同的主机系统(如本地+网络)。同样地,一般存储管理和计算管理是同一系统,也可以是不同系统。主机系统不在本文谈论范围,只是为了说明相关性,主要是将服务器或者本地CPU的相关计算(存算应用程序)进一步减轻负载(Offloading)到存储器(固态硬盘)内,同时必须减少对固件实时处理影响。故而为了使计算应用程序在存储器内能发挥更多更灵活的作用,且不影响存储本身功能的实时性,在存储器(固态硬盘)系统内设计成至少两个独立的软件系统,一个用于存储数据,一个用于计算应用。
基于此这种需求,那么设计需求上:
1.由于DPU600具有双CPU Cluster架构,可以满足运行双系统的需求。同样地, DPU600有2个主机接口(PCIe),满足数据的存储和计算两种通路需求,即一个主机接口用于数据存储,另一个主机接口用于数据计算。
2.系统架构上,采用异构并行系统,包含两个系统:实时处理系统和应用操作系统。一个CPU Cluster上运行实时处理系统,一般是固件(BareMetal Firmware),专门处理存储事务;另一个CPU Cluster上运行计算应用系统,一般是应用操作系统,如Linux,专门处理计算应用事务。基于各自不同特性系统独立并行运行,提高其各自对应的事务的处理效率。
图2
为了隔离软件系统的不同特性,软件系统之间,通过IPC(Inter-Process Communication)机制进行通信,完成数据和信息的交互,即通过IPC传递IO操作。其在CPU上软件布局如图3,其IPC的实现包括软件FIFO,硬件 FIFO,共享内存,硬件IPC逻辑电路等。
图3
小编根据研发小伙伴的建议,这里把关键IO操作处理流程进行探讨一下:
如图4,描述了2个软件系统的IO操作在主要模块流向,其中
1. PIS应用系统,除了OS Kernel之外, 包括:
数据计算应用层,用于进行和主机任务相关应用处理。由于基于操作系统(OS),应用层的开发具有非常高的通用性,可以脱离相关硬件特性,应用包括搜索引擎的求列表交集(List Intersection),MySQL的检索等。数据计算中间层,处理底层驱动和应用层的衔接事务。如将数据计算任务转化成特定的IO操作。专用驱动层,主要处理和硬件特性相关驱动处理,如IPC相关接口出来,同时负责发送或者接收特定的IO操作。
2.存储RTOS/FW系统,是典型的存储处理模块系统,包括:
前端模块(FE)负责主机通信协议栈,命令数据分发处理。数据处理模块(DP)负责数据通路的处理,如写(读)缓存的管理。算法模块(FTL)负责映射表的管理,闪存数据分布管理等。后端模块(BE)负责闪存数据读写和相关闪存命令的管理。
两个系统均有分层结构,那么两个系统之间传递的IO操作,可以在底层设定的特定数据处理单元,该数据单元通过IPC系统进行传递。数据单元包括数据,操作信息等。对应驱动而言,派发或者读取IO操作是把IO操作的信息写入或者读取到“FIFO/共享内存/硬件IPC逻辑电路”的接口,从而较好的隔离两个系统。
图4
存储相关典型操作流程,除了其中计算需求的IO视作另一种FE的数据需求,其他处理方式可以通用化,即总体流程和现有技术大同小异,不再累述。整个系统设计时(指主机系统+存算系统)会将计算应用需求中分解出成适用于存算的计算应用到存算系统。当有存算系统计算需求时,主机系统将发操作任务给存储器内的存算系统,其中相关任务包括但不限于数据搜索(Search),数据比较(Compare),数据标签(Tag),数据索引(Index)。存算系统收到任务后,在应用系统进行任务分解,转化为IO操作给存储系统进行数据操作(主要是从闪存颗粒读数据),存储系统完成数据操作后,将数据返回给应用系统进行数据计算,完成所有任务对应的数据计算后,其中由于DPU600包含硬件PIS处理能力,故而处理时硬件PIS处理通过专用驱动完成,而软件PIS处理则在计算应用系统的应用层程序完成。应用系统回报计算结果给主机系统,而不需要报整IO数据回给主机。
小编在这里Copy过来:一种计算应用场景,在DPU600的加持下,下面所述的计算需求更容易Offloading到存储器内部的应用系统。
服务器一种典型的搜索应用,传统的所有步骤步骤均是在主机计算完成。在引入存算一体化存储器之后,可以把部分计算移入到存取器内。如图5,“获得倒排序表”“计算列表操作”,存储器内完成后仅返回结果。我们的设计采用计算应用独立系统之后,对于哪些步骤(具有应用可扩展性)移入存储器内,可以更灵活:可以把对应步骤的程序实时在线地移植到存储器内OS上,而不是通过更新固件才能迁入。比如步骤获得元数据和计算相似度和排序,可以根据存储器内CPU算力,或者存取器内系统负载程度,来决定来是否有存储器内进行承接计算。
图5
原文标题:SSD主控芯片,除了做SSD还能干点啥?-II
文章出处:【微信公众号:大普微】欢迎添加关注!文章转载请注明出处。
责任编辑:haq
全部0条评论
快来发表一下你的评论吧 !