作者 X
給SSD Fans原創投稿,拿>=100元稿費。
在進行SSD相關的研究和開發時,比如SSD架構和FTL的優化改進時,直接在SSD上實現設計所花費的高昂成本和大量時間多數情況下是不可接受的,這時如果先把設計在模擬器上實現驗證,不但能夠快速地得到功能、性能、能耗等方面的估測數據,加快設計迭代周期,還有助於深入理解設計改進對於SSD各個部分工作的影響,來指導進一步改進設計方案。因此,對於設計SSD的工程師,掌握一款SSD模擬器的使用是非常重要的。
現有的SSD模擬器實際上已有不少種,像是Flashsim[1],SSDSim[2],Disksim加上微軟的SSD Extension[3],等等。這次我主要介紹Flashsim。Flashsim是一款開源的SSD模擬器,可以在作者網站[4]或者GitHub上面下載到原始碼,它是一款事件驅動的、模塊化的基於C++的模擬器,內置了多種FTL策略,能夠提供響應時間、能耗的模擬及許多額外的統計信息,新版本的Flashsim還提供了SSD RAID的模擬,功能上算是比較完善了。Flashsim有基於Disksim的版本和可以獨立使用的版本,比較推薦大家使用獨立的版本。
下面就為大家更加詳細的介紹一下Flashsim的軟硬體結構模型。
利用C++的面向對象特性,Flashsim實現了很好的模塊化特性,使其內部結構與SSD的實際結構有著很好的映射關係,很便於我們理解。我們知道,SSD本身由控制器、RAM等硬體和運行在其上的FTL組成,而Flashsim模擬器也由這兩部分組成,如圖 1所示。實際上,新版的Flashsim還提供了數個圖中所示的SSD連接組成RAID陣列進行模擬的功能。
<img src="http://www.ssdfans.com/wp-content/uploads/2017/08/081717_1406_SSDFlashsim1.png" alt="SSD模擬器之Flashsim" />
圖 1 Flashsim結構框圖
Flashsim的硬體部分由處理器、內存、總線和flash晶片組成。首先簡單介紹一下硬體部分的層級和功能,方便大家對模擬器與實際SSD的對應關係有個直觀的認識。模擬器定義了以下模塊:
SSD:用於例化整個模擬器並提供對外的調用接口,事件的建立、統計信息的獲取等。
Package:包含一組共享總線通道的Die。
Die:一片Flash晶片,包含一組Plane。
Plane:包含許多Block,每個Plane具有一個與Page等大的寄存器,用來緩存數據和Plane內的merge操作。此處會產生寄存器讀寫延遲和merge延遲。(Merge操作是指FTL進行垃圾回收時,把多個塊裡面部分有效的數據合併到一個或者多個塊的操作,按更新的類型還可以細分為Switch Merge、Partial Merge、Full Merge三種,具體情況因為FTL類型不同而有所不同。這是SSD產生寫入放大的直接原因)
Block(塊):由許多Page組成,是擦除操作的最小操作單位。一個Block被擦除的次數是有限的,這項信息也可以被Flashsim統計。擦除Block會產生擦除操作延遲。
Page(頁):維護每個Page的狀態並且計算讀寫操作延遲。Page在Flashsim中有free(擦除後),valid(寫後),invalid(Merge操作被複製到其他位置後)三種狀態。是否模擬實際數據內容可以通過配置Flashsim選項來選擇。
Controller(控制器):控制器是Flashsim軟體部分和硬體部分的對接部件,它接收SSD發來的事件,向FTL查詢如何處理之後,計算所耗的時間。控制器發送數據到總線時會先將其在RAM中緩存,會產生讀寫RAM的延遲。
RAM(內存):計算讀寫RAM的延遲。
Bus(總線):把事件分發到合適的通道。
Channel(通道):調度事件。每個通道維護一個調度表來記錄通道的使用,新事件在依賴滿足之後會被安置到下個可用的時間槽內。通道的調度將在之後做具體講解。
從SSD開始,上層的部件負責下層部件的例化,用戶只需要通過修改配置文件來配置每個層級包含多少個下層單元。
Flashsim的軟體部分也就是FTL,另外,為了對事件進行描述和記錄,Flashsim還定義了Event和Address兩個類,用於在各層之間傳送操作信息和記錄事件處理狀態,在此不再詳述。SSDFans先前已有文章介紹過,FTL全稱Flash Translation Layer,用於做邏輯地址和物理地址的轉換,提供SSD這種具有讀、寫、擦除三種操作的存儲設備和傳統僅具有讀、寫兩種操作的硬碟之間的兼容轉換,考慮到SSD的壽命問題,FTL還有磨損平衡(Wear Leveling)、垃圾回收(Garbage Collect)及壞塊管理(Bad Block Management)的功能。Flashsim的FTL包含了磨損平衡和垃圾回收功能。現在Flashsim內置的FTL有Page-level,BAST,FAST,DFTL和Bimodal幾種。
各個模塊具體包含哪些信息,留出了哪些接口,可以參考Flashsim的類圖,對各個模塊本身和模塊間的關係有比較清晰的展現。由於類圖比較複雜,在此不再給出,它已經包含在Flashsim的源碼包中,可以下載查看。
下面展開講解一下總線通道交叉存取,這是Flashsim調度中比較複雜的部分。上面提到,每個總線通道由一個Package中的多片Die共享,而各個總線通道之間是獨立的、並行工作的。於是,連續到來的多個事件在一個總線通道上的操作處理有時是交叉進行的,總線通道上的交叉存取操作如圖 2所示。總線上有數據傳輸時總線會被鎖定。對於讀操作,如圖 2(a),會首先發送控制信號讓Flash Die準備數據(Ctrl);Flash Die接收到讀命令後會讀取數據(Rd),此操作不佔用總線,總線可以處理其他請求;然後鎖定總線,發送控制信號請求Flash Die發送數據;最後,鎖定總線,傳輸實際數據(Data)。可以看到當請求R1處於Rd階段時,它不佔用總線,因此請求R2發送了控制信號,而此時R1的第二次Ctrl開始之前剩餘的時間不足以發送R3的Ctrl,於是它不能開始。對於寫操作,如圖2(b),首先鎖定總線,發送控制信號通知Flash Die它將接收到數據(Ctrl);然後,繼續鎖定總線,發送實際數據(Data);最後,Flash Die寫入數據(Wr)。類似地,在R1的Wr階段,它不佔用總線,可以處理R2的Ctrl和Data。即,當前一個請求雖然未完成,但是未佔用總線時(讀操作的Rd階段,寫操作的Wr階段),總線會評估是否有充足的時間處理其他請求,如果可以的話,處理請求,否則,令其他請求等待。這種調度方式使請求在總線上交叉處理,能使總線得到更高效的利用。
<img src="http://www.ssdfans.com/wp-content/uploads/2017/08/081717_1406_SSDFlashsim2.png" alt="SSD模擬器之Flashsim" />
圖 2 Flashsim總線交叉存取
總結一下Flashsim的事件處理流程:首先,SSD接收到事件,傳遞給Controller,Controller通過FTL把一個多Page的請求轉換成一個事件列表,並把列表中的每個事件發送到對應的總線通道,總線通道處理分發各個請求。最終,Merge事件可以在Flash Die或者Plane模塊處理,Erase事件在Block中處理,Read和Write事件在Page中處理。
表 1 模擬參數配置及實際SSD參數
<img src="http://www.ssdfans.com/wp-content/uploads/2017/08/081717_1406_SSDFlashsim3.png" alt="SSD模擬器之Flashsim" />
對用表 1所示配置(由於實際SSD資料不充分,有些配置是假定的)的Flashsim和兩款實際的SSD進行測試後,得到的結果如圖 3所示。可以看到,在各種的激勵條件下,Flashsim和實際SSD顯示出相似的趨勢變化,說明Flashsim能夠有效的模擬SSD的特性。
<img src="http://www.ssdfans.com/wp-content/uploads/2017/08/081717_1406_SSDFlashsim4.png" alt="SSD模擬器之Flashsim" />
圖 3 測試結果對比(Real SSD1: MTron, Real SSD2: Super Talent, Flashsim1: page-based FTL, Flashsim2: DFTL)
綜上,可以看到,Flashsim是一款功能豐富、結構清晰、模擬效果真實的SSD模擬器,大家可以試著使用一下,也許能對你理解SSD有不小的促進作用。不過,Flashsim本身的文檔資料不夠充分,希望改進它或者把它用到開發研究中的話,就需要好好地調研並讀一下它的代碼了。
參考文獻:
[1] Kim, Youngjae, et al. 「Flashsim: A simulator for nand flash-based solid-state drives.」 Advances in System Simulation, 2009. SIMUL』09. First International Conference on. IEEE, 2009.
[2] Hu, Yang, et al. 「Performance impact and interplay of SSD parallelism through advanced commands, allocation strategy and data granularity.」 Proceedings of the international conference on Supercomputing. ACM, 2011.
[3] Prabhakaran, Vijayan, and Ted Wobber. 「SSD extension for DiskSim simulation environment.」 Microsoft Research (2009).
[4] http://csl.cse.psu.edu/hybridstore
喜歡就請分享轉發!
怎麼閱讀ssdfans其他文章?點擊文末閱讀原文進入www.ssdfans.com,用搜索框搜索關鍵字即可。
不想錯過後續精彩文章?長按或掃描下面二維碼關注ssdfans就可以了!
ssdfans微信群介紹
想加入這些群,請加nanoarch為微信好友,介紹你的暱稱-行業-職務,註明群名,拉你進群。