除了做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,存儲器端運行的是裸系統(BareMetal)-固件(Firmware),系統偏重于進行硬件支持的相關數據處理,而對應計算相關的需求,一般僅能承接部分簡單的數據計算,這主要是引入過多的數據計算,會影響存儲功能的實時處理。一般地,當有相關計算需求(主要是邊緣計算(EdgeComputing),機器學習(MachineLearning),主機通過自定義命令的形式通知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應用系統,除了OSKernel之外, 包括:
數據計算應用層,用于進行和主機任務相關應用處理。由于基于操作系統(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
-
芯片
+關注
關注
454文章
50444瀏覽量
421936 -
SSD
+關注
關注
20文章
2851瀏覽量
117240
原文標題:SSD主控芯片,除了做SSD還能干點啥?-II
文章出處:【微信號:dputech,微信公眾號:DapuStor】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論