嵌入式OS設計策略解讀|憶聯(lián)企業(yè)級SSD高可靠、高性能的實現方法
企業(yè)級SSD需要在大量企業(yè)數據讀寫下保持超高穩(wěn)定性,以及24 小時全天候運行,SSD的讀寫速度、使用壽命、穩(wěn)定性及可靠性是企業(yè)級用戶關注的重點。為滿足用戶對企業(yè)級SSD高性能、低延時、輕量級、高可靠等需求,憶聯(lián)設計并開發(fā)了適合SSD的嵌入式操作系統(tǒng)(Operating System,縮寫:OS),并在其上構建了可復制性強的SSD 控制器軟件系統(tǒng)。
嵌入式軟件分為三個層次,即驅動層、OS層、業(yè)務層。業(yè)務層集結了龐大復雜的產品功能,負責處理業(yè)務邏輯的部分,通常包括接口協(xié)議、業(yè)務功能實現、系統(tǒng)數據保存等;驅動層把設備的硬件訪問抽象成軟件接口,為OS層和業(yè)務層服務;OS層為業(yè)務層提供軟件平臺服務,讓業(yè)務層可以聚焦在實現龐大復雜的軟件功能上。

圖1
通用的OS功能很多,包括處理器管理、內存管理、設備管理、文件管理、作業(yè)管理等,而對于嵌入式OS來說,主要聚焦在處理器管理、內存管理等核心功能上,本文則重點闡述處理器管理、互斥、通信。
SSD系統(tǒng)的處理器架構和OS部署
在PCIe 4.0時,SSD的讀寫帶寬達到8GB/s, PCIe 5.0時SSD的讀寫帶寬可能達到16GB/s。為了實現SSD的高性能,通常SSD控制器會使用多CPU、甚至多Cluster的處理器架構,分別用于SSD業(yè)務計算和Nand flash操作。

圖2
在多處理器、多Cluster架構下,業(yè)務部署時可以選擇SMP模式、AMP模式、或者SMP和AMP混合模式。在SSD系統(tǒng)里,基本上都是SMP模式和AMP模式混合,OS要負責程序調度、互斥、通信功能。在嵌入式系統(tǒng)中的AMP模式的通信,可以類比為通用系統(tǒng)里多進程之間的通信,因為沒有全局數據可用,要借助外部存儲空間進行通信。
憶聯(lián)OS的調度策略
常規(guī)的OS調度對象都是線程,且每個線程有自己的堆棧和優(yōu)先級,具有搶占機制。憶聯(lián)在設計SSD嵌入式系統(tǒng)時,通過分析發(fā)現,線程調度開銷大、線程之間存在較為復雜的互斥問題、容易出現優(yōu)先級逆轉死鎖問題,加之線程運行的隨機性和無序性,讓系統(tǒng)時刻處于“不確定”狀態(tài)。因此,憶聯(lián)SSD選擇了自創(chuàng)的“功能代碼(入口函數及其調用的全部函數)”調度策略。為了描述方便,本文把這些可以被OS調度的“功能代碼(入口函數及其調用的全部函數)”,稱為SSD系統(tǒng)里的“事務”。
在SSD系統(tǒng)里的程序,不再以線程方式組織,而是以一個個不會阻塞的獨立“事務處理流程”方式組織。這些“事務處理流程”可以以各種方式被OS調度。
事務的主要特征:
(1)不會阻塞。一個事務完成一個特定的計算,它在計算過程中,不需要等待外設動作,會一直運行到結束。如果一個流程會被阻塞,則需要在阻塞點切分為多個獨立的事務。一旦一個事務被CPU執(zhí)行,則一定會執(zhí)行到事務結束。在系統(tǒng)里,除了每個CPU正在執(zhí)行的事務是運行狀態(tài),其他事務都處在結束狀態(tài)。比起線程的阻塞狀態(tài),事務狀態(tài)變得極其簡單。
(2) 事務共享堆棧。事務執(zhí)行完成時,不再有局部變量需要保存在堆棧里。 事務共享堆棧,堆棧需求小,調度時也沒有了堆棧切換的開銷。
(3)同一個CPU,事務串行執(zhí)行。一個CPU里的事務,一定是執(zhí)行完畢一個事務后,才能開始執(zhí)行下一個事務。同一個事務,在一個CPU上不會重入。
(4)SMP模式下事務間互斥變得簡單。見圖3。

圖3
備注:
(1)事務完成時,不會持有全局變量的訪問鎖。
(2)AMP之間不存在全局共享數據,不存在互斥。
事務的調度方式

圖4
事務優(yōu)先級和實時性
一次性事務具有事務優(yōu)先級功能。OS接受一次性事務調度請求,通過高優(yōu)先級來處理系統(tǒng)里一些緊急事務,以此達成特定事件的實時處理。

圖5
中斷與事務
前面已經講述在憶聯(lián)OS里,同一個CPU里事務之間不會出現搶占,只有當一個事務運行完成后,才會運行另外一個事務,但是中斷依然具有搶占功能。
中斷處理程序遵循常規(guī)的中斷處理流程,中斷到來時,還是會搶占當前事務。當中斷到來時,OS會把當前運行的事務程序壓棧,跳轉到中斷處理程序運行,中斷處理程序完成后,被中斷的事務程序被恢復運行。
中斷處理程序運行時也是使用事務程序運行時的堆棧。
中斷處理程序具備的搶占功能,可以滿足系統(tǒng)里對于實時性要求高的場景,但同時也帶來了中斷和事務之間的互斥問題。中斷和事務的互斥方式如圖六。

圖6
中斷處理程序實現時,可分為中斷上半部和下半部。上半部讀取外設數據,下半部發(fā)送事務消息到OS調度處理。中斷下半部的互斥就變成了事務之間的簡單互斥方式了。中斷發(fā)給OS的事務調度消息,可以根據需要選擇使用“緊急、高、常規(guī)”優(yōu)先級。
中斷處理舉例:IPC中斷
一般來說,IPC中斷用于AMP與 CPU之間的通信。
發(fā)送方把數據寫入共享的DDR后,發(fā)送IPC中斷給接受方。
接收方的IPC中斷程序讀取DDR里的通信數據,然后發(fā)送事務消息到自己的OS,OS按照事務進行調度處理該事務消息。
中斷處理程序讀取DDR里的通信數據,就是中斷上半部。讀取通信數據并做具體處理,則是事務完成,是中斷的下半部。
總結
通過事務調度思路,憶聯(lián)實現了旗下企業(yè)級SSD產品的高性能和高可靠性,業(yè)務功能的設計、實現、擴展都變得更加簡單和靈活,業(yè)務功能的代碼復用也變得更簡單,這讓憶聯(lián)在開發(fā)新代次SSD時,可以很好地繼承已有代次SSD產品的功能和品質,保障憶聯(lián)可以持續(xù)為客戶提供高品質SSD產品與存儲解決方案。