嵌入式OS设计策略解读|忆联企业级SSD高可靠、高性能的实现方法

日期:2023-08-03 浏览:1982 分享:

微信扫一扫:分享

使用微信扫一扫

http://unionmemory.com/news_detail.php?menuid=107&id=89

企业级SSD需要在大量企业数据读写下保持超高稳定性,以及24 小时全天候运行,SSD的读写速度、使用寿命、稳定性及可靠性是企业级用户关注的重点。为满足用户对企业级SSD高性能、低延时、轻量级、高可靠等需求,忆联设计并开发了适合SSD的嵌入式操作系统(Operating System,缩写:OS),并在其上构建了可复制性强的SSD 控制器软件系统。

嵌入式软件分为三个层次,即驱动层、OS层、业务层。业务层集结了庞大复杂的产品功能,负责处理业务逻辑的部分,通常包括接口协议、业务功能实现、系统数据保存等;驱动层把设备的硬件访问抽象成软件接口,为OS层和业务层服务;OS层为业务层提供软件平台服务,让业务层可以聚焦在实现庞大复杂的软件功能上。

图1


通用的OS功能很多,包括处理器管理、内存管理、设备管理、文件管理、作业管理等,而对于嵌入式OS来说,主要聚焦在处理器管理、内存管理等核心功能上,本文则重点阐述处理器管理、互斥、通信。


SSD系统的处理器架构和OS部署

在PCIe 4.0时,SSD的读写带宽达到8GB/s, PCIe 5.0时SSD的读写带宽可能达到16GB/s。为了实现SSD的高性能,通常SSD控制器会使用多CPU、甚至多Cluster的处理器架构,分别用于SSD业务计算和Nand flash操作。

图2


在多处理器、多Cluster架构下,业务部署时可以选择SMP模式、AMP模式、或者SMP和AMP混合模式。在SSD系统里,基本上都是SMP模式和AMP模式混合,OS要负责程序调度、互斥、通信功能。在嵌入式系统中的AMP模式的通信,可以类比为通用系统里多进程之间的通信,因为没有全局数据可用,要借助外部存储空间进行通信。


忆联OS的调度策略

常规的OS调度对象都是线程,且每个线程有自己的堆栈和优先级,具有抢占机制。忆联在设计SSD嵌入式系统时,通过分析发现,线程调度开销大、线程之间存在较为复杂的互斥问题、容易出现优先级逆转死锁问题,加之线程运行的随机性和无序性,让系统时刻处于“不确定”状态。因此,忆联SSD选择了自创的“功能代码(入口函数及其调用的全部函数)”调度策略。为了描述方便,本文把这些可以被OS调度的“功能代码(入口函数及其调用的全部函数)”,称为SSD系统里的“事务”。


在SSD系统里的程序,不再以线程方式组织,而是以一个个不会阻塞的独立“事务处理流程”方式组织。这些“事务处理流程”可以以各种方式被OS调度。


(1)不会阻塞。一个事务完成一个特定的计算,它在计算过程中,不需要等待外设动作,会一直运行到结束。如果一个流程会被阻塞,则需要在阻塞点切分为多个独立的事务。一旦一个事务被CPU执行,则一定会执行到事务结束。在系统里,除了每个CPU正在执行的事务是运行状态,其他事务都处在结束状态。比起线程的阻塞状态,事务状态变得极其简单。

(2) 事务共享堆栈。事务执行完成时,不再有局部变量需要保存在堆栈里。事务共享堆栈,堆栈需求小,调度时也没有了堆栈切换的开销。

(3)同一个CPU,事务串行执行。一个CPU里的事务,一定是执行完毕一个事务后,才能开始执行下一个事务。同一个事务,在一个CPU上不会重入。

(4)SMP模式下事务间互斥变得简单。见图3。

图3


备注:

(1)事务完成时,不会持有全局变量的访问锁。

(2)AMP之间不存在全局共享数据,不存在互斥。



图4


一次性事务具有事务优先级功能。OS接受一次性事务调度请求,通过高优先级来处理系统里一些紧急事务,以此达成特定事件的实时处理。

图5


前面已经讲述在忆联OS里,同一个CPU里事务之间不会出现抢占,只有当一个事务运行完成后,才会运行另外一个事务,但是中断依然具有抢占功能。


中断处理程序遵循常规的中断处理流程,中断到来时,还是会抢占当前事务。当中断到来时,OS会把当前运行的事务程序压栈,跳转到中断处理程序运行,中断处理程序完成后,被中断的事务程序被恢复运行。


中断处理程序运行时也是使用事务程序运行时的堆栈。


中断处理程序具备的抢占功能,可以满足系统里对于实时性要求高的场景,但同时也带来了中断和事务之间的互斥问题。中断和事务的互斥方式如图六。

图6


中断处理程序实现时,可分为中断上半部和下半部。上半部读取外设数据,下半部发送事务消息到OS调度处理。中断下半部的互斥就变成了事务之间的简单互斥方式了。中断发给OS的事务调度消息,可以根据需要选择使用“紧急、高、常规”优先级。


一般来说,IPC中断用于AMP与 CPU之间的通信。


发送方把数据写入共享的DDR后,发送IPC中断给接受方。


接收方的IPC中断程序读取DDR里的通信数据,然后发送事务消息到自己的OS,OS按照事务进行调度处理该事务消息。


中断处理程序读取DDR里的通信数据,就是中断上半部。读取通信数据并做具体处理,则是事务完成,是中断的下半部。


总结

通过事务调度思路,忆联实现了旗下企业级SSD产品的高性能和高可靠性,业务功能的设计、实现、扩展都变得更加简单和灵活,业务功能的代码复用也变得更简单,这让忆联在开发新代次SSD时,可以很好地继承已有代次SSD产品的功能和品质,保障忆联可以持续为客户提供高品质SSD产品与存储解决方案。

您可能对其它新闻感兴趣

  • 上一篇

    重磅发布:IDC联合记忆科技发布面向数据中心应用固态硬盘趋势白皮书

  • 下一篇

    PCIe®标准演进历史

     
  • 产品中心
    企业级固态硬盘
    数据中心级固态硬盘
    消费级固态硬盘
    嵌入式存储
    解决方案
    服务器
    数据中心
    个人电脑
    移动终端
    智能穿戴
    技术方案
    核心技术
    存储控制器开发
    固件设计
    封装测试
    服务支持
    下载中心
    咨询与投诉
    关于忆联
    企业简介
    大事记
    荣誉资质
    企业文化
    联系我们
    新闻资讯
    公司新闻
    媒体报道
    展会活动
    技术白皮书
    投资者关系
    公司治理
    管理团队
    财务报告
    最新公告
    加入我们
    社会招聘
    校园招聘

    深圳忆联信息系统有限公司

    地址:深圳市南山区记忆科技后海中心B座19楼

    电话:0755-2681 3300

    邮箱:support@unionmem.com

  • 微信:
  • 官方微博

  • Copyright © 2020-2024 All Rights Reserved. 粤ICP备18155700号 技术支持:深圳忆联信息系统有限公司 法律声明 隐私政策