SSD模擬器之Flashsim

2021-02-14 SSDFans


作者  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微信群介紹

技術討論群覆蓋2000多位中國和世界華人圈SSD以及存儲技術精英固件、軟體、測試群固件、軟體和測試技術討論異構計算群討論人工智慧和GPU、FPGA、CPU異構計算ASIC-FPGA群晶片和FPGA硬體技術討論群快閃記憶體器件群NAND、3D XPoint等固態存儲介質技術討論企業級企業級SSD、企業級存儲銷售群全國SSD供應商都在這裡,砍砍價,會比某東便宜20%!工作求職群存儲行業換工作,發招聘,要關注各大公司招聘信息,趕快來高管群
各大SSD相關存儲公司高管和創始人、投資人

想加入這些群,請加nanoarch為微信好友,介紹你的暱稱-行業-職務,註明群名,拉你進群。

相關焦點

  • Marvell HMB SSD 控制器將重定義SSD設計
    由於TLC和3D flash設計原因,在寫的時候需要緩存更多的數據,有更多緩存需求,DRAM-less的設計很難滿足。拿隨機讀來說,DRAM-Less訪問映射表的時間是讀Flash的時間(flash page讀時間+數據傳輸時間=~60us);帶DRAM的,其訪問映射表的時間是讀DRAM的時間;而對HMB來說,其訪問映射表的時間是訪問主機DRAM的時間,具體時間不太清楚,但肯定落在前面兩個時間的中間,接近DRAM SSD,遠遠好於DRAM-Less SSD。
  • 基於vs2019的lvgl模擬器使用
    這篇分享一下lvgl 的PC模擬器的使用。PC 模擬器的好處一方面是我們沒有實際硬體的時候也可以學習lvgl,另一方面就是我們在實際設計GUI界面的時候可以大大減少燒錄代碼地次數。我們可以先在PC模擬器上設計好,然後再把代碼移到嵌入式工程裡,編譯、燒錄到板子裡。
  • 給iOS 模擬器「安裝」app文件
    2.把debug包拷貝到另一個模擬器中我們運行完上面的ditto命令會產生一個zip文件,解壓出來,會得到一個app文件,這個就是debug包了。debug包就是我們要給設計師的app包了。如何能讓設計師傻瓜式的安裝這個app呢?這裡介紹一個命令行工具,ios-sim命令行工具。ios-sim 是一個可以在命令控制iOS模擬器的工具。
  • 目標檢測算法之SSD
    首先定義SSD的參數:self.ssd_params = SSDParams(img_shape=(300, 300),   # 輸入圖片大小                                num_classes=21,     # 類別數+背景                                no_annotation_label=21
  • 目標檢測算法之SSD訓練過程
    訓練過程(1)先驗框匹配        在訓練過程中,首先要確定訓練圖片中的ground truth(真實目標)與哪個先驗框來進行匹配,與之匹配的先驗框所對應的邊界框將負責預測它
  • 【論文詳解】目標檢測算法之SSD 深入詳解
    首先定義SSD的參數:self.ssd_params = SSDParams(img_shape=(300, 300),   # 輸入圖片大小                                num_classes=21,     # 類別數+背景                                no_annotation_label=21
  • Linux驅動之Nand Flash原理及硬體操作
    復用,這幾個引腳即傳數據也傳地址怎麼分別是數據還是地址呢,有個ALE信號,當ALE是高電平時,傳輸的是地址但是它不僅只傳輸地址和數據,還傳輸命令,在nand flash晶片手冊可知,要操作nandflash要先發出命令,只有八條數據線,怎麼傳輸命令呢???
  • 【模友之吧】全球首款中文穿越機模擬器MR Drone公測活動~
    華科爾公司委託模友之吧論壇對全球首款中文穿越機模擬器MR Drone展開公測活動~1、11月1日起開始發放
  • 模擬器的入門級應該怎麼選?推薦羅技G29 | 酷樂電競
    Author / 嗷嗚最近很多讀者諮詢我們玩模擬器有什麼推薦,於是這次我們請到資深模擬器玩家嗷嗚同學,為我們講解關於模擬器的一些知識,當然,嗷嗚同學也為我們推薦了一款模擬器入門級裝備 —— 羅技G29,並以G29為例,為我們詳細講解模擬器內部構造以及如何能讓模擬器更加適配遊戲的一些方法。
  • LVGL PC模擬器初體驗
    LVGL全稱Light and Versatile Graphics Library,輕量化和多功能的圖形庫,遵循MIT開源許可協議,具有以下特性(what LVGL can do for you)。1.
  • 分享一個詞 | flashpoint
    今天我們要學的詞是 flashpoint.音標:英 [ˈflæʃpɔɪnt]  美 [ˈflæʃpɔɪnt] 釋義:flashpoint 的意思是燃點、爆發點。The Pakistani Prime Minister accused India of planning military action in the disputed Kashmir region that has long been a flashpoint between the two nuclear-armed neighbors.
  • 手機SIM卡安裝教程及常見問題解答[完整版]
    現在7哥就來科普一下吧,解救一下你們這些漏網之魚哈哈哈哈~右邊的小卡便是普通的SIM卡~下面7哥給大家講解一下我們日常所見的三種卡mini sim卡是標準的sim卡,它的尺寸為25mm*15mm,容量有8K、16K、32K、64K,其中512K以上的大容量
  • 在 SSD 上使用 btrfs 文件系統的相關優化
    優化掛載參數在 Linux 中掛載 SSD 上的 btrfs,可以採用各種參數進行優化:# <file system> <
  • Batocera Plus 可能是現如今最強最全最好用的模擬器集成系統!
    自batocera發布以來,很快取代了復古佬手中LAKKA的位置,batocera能比lakka模擬更多的平臺,不管是界面美觀度還是模擬器的運行效率都遠超lakka,在不斷更新迭代中,所有用的功能越來越多,覆蓋的模擬器越來越廣,並且系統在GitHub上完全開源的優勢,越來越多的人選擇了batocera。可以說batocera是復古平臺的未來。
  • 花1分鐘記住一個詞 | flashpoint
    今天我們要學的詞是 flashpoint音標:英 [ˈflæʃpɔɪnt]  美 [ˈflæʃpɔɪnt] flashpoint 的意思是燃點、爆發點。The Pakistani Prime Minister accused India of planning military action in the disputed Kashmir region that has long been a flashpoint between the two nuclear-armed neighbors.
  • 算法系列 | MobileNet V2—SSD 的車道線檢測方法剖析
    圖 3.3 fine_tune_model 示意圖配置三:配置管道文件,找到目錄research\object_detection\samples\configs\ssdlite_mobilenet_v2_coco.config 文件,將此文件複製到 dataset/data 文件夾下,並將前面生成的 train.record、 eval.record 放置於 dataset
  • SSD性能測試第一神器——FIO
    amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;http://www.ssdfans.com
  • 首個 AI 宇宙模擬器面世,效果令人驚豔!
    這個模擬器不僅速度快而且精度高,調參後無需訓練仍能準確模擬,甚至連它的創造者都不知道它是如何做到的。  幾十年來,科學家們一直使用計算機模擬來嘗試並用數位技術對我們宇宙的起源和演化進行逆向工程。使用現代技術的最佳的傳統方法需要幾分鐘時間來產生良好的結果。現在,這個全球首個AI宇宙模擬器在幾毫秒內,就能產生更高精度的結果。