從主機PC端開始,用戶從操作系統應用層面對SSD發出請求,文件系統將讀寫請求經驅動轉化為相應的符合協議的讀寫和其他命令,SSD收到命令執行相應操作,然后輸出結果,每個命令的輸入和輸出經協議標準組織標準化,這是標準的東西,和HDD無異,只不過HDD替換成SSD硬件存儲數據,訪問的對象變成SSD。
圖1-13 SSD系統調用
SSD的輸入是命令(Command),輸出是數據(Data)和命令狀態(Command Status)。SSD前端(Front End)接收用戶命令請求,經過內部計算和處理邏輯,輸出用戶所需要的數據或狀態。
從圖1-13可以看出,SSD主要有三大功能模塊組成:
1. 前端接口和相關的協議模塊;
2. 中間的FTL層(Flash Translation Layer)模塊;
3. 后端和閃存通訊模塊。
SSD前端負責和主機直接通訊,接收主機發來的命令和相關數據,命令經SSD處理后,最終交由前端返回命令狀態或數據給主機。SSD通過諸如SATA、SAS和PCIe等接口與主機相連,實現對應的AHCI、SCSI和NVMe等協議。
表1-1 SATA/SAS/PCIe接口協議
我們看看SSD是怎么進行讀寫的。
主機通過接口發送寫命令給SSD,SSD接收到該命令后執行,并接收主機要寫入的數據。數據一般會先緩存在SSD內部的RAM中,FTL會為每個邏輯數據塊分配一個閃存地址,當數據湊到一定數量后,FTL便會發送寫閃存請求給后端,然后后端根據寫請求,把緩存中的數據寫到對應的閃存空間。
由于閃存不能覆蓋寫,閃存塊需擦除才能寫入。主機發來的某個數據塊,它不是寫在閃存固定位置,SSD可以為其分配任何可能的閃存空間寫入。因此,SSD內部需要FTL這樣一個東西,完成邏輯數據塊到閃存物理空間的轉換或者映射。
舉個例子,假設SSD容量為128GB,邏輯數據塊大小為4KB,所以該SSD一共有128GB/4KB = 32M個邏輯數據塊。每個邏輯塊都有一個映射,即每個邏輯塊在閃存空間都有一個存儲位置。閃存地址大小如果用4字節表示,那么存儲32M個邏輯數據塊在閃存中的地址則需要32M*4B = 128MB大小的映射表。
正因為SSD內部維護了一張邏輯地址到物理地址轉換的映射表,當主機發來讀命令時,SSD能根據需要讀取的邏輯數據塊,查找該映射表,獲取這些邏輯數據在閃存空間所在位置,后端便能從閃存上把對應數據讀到SSD內部緩存空間,然后前端負責把這些數據返回給主機。
由于前端接口協議都是標準化的,后端和閃存的接口及操作也是標準化的(閃存遵循ONFI或者Toggle協議),因此,一個SSD在前端協議及閃存確定下來后,差異化就體現在FTL算法上了。FTL算法決定了性能、可靠性、功耗等SSD的核心參數。
其實,FTL除了完成邏輯數據到閃存空間的映射,還需要做很多其它事情。
前面提到,閃存不能覆蓋寫,因此隨著用戶數據的不斷寫入,閃存空間會產生垃圾(無效數據)。FTL需要做垃圾回收(Garbage Collection)以騰出可用閃存空間用以寫用戶數據。
圖1-14 垃圾數據回收
以圖1-14為例,在Block x和Block y上有很多垃圾數據,其中Block x上A,B,C為有效數據,Block y上D, E,F,G為有效數據。垃圾回收就是把一個或者幾個Block上的有效數據搬出來集中寫到某個空閑Block (比如Block z)。當這些Block上的有效數據都搬走后,FTL便能擦除這些Block,然后這些Block又能拿出來供SSD寫入新的數據了。
還有,閃存都是有壽命的,每個閃存塊不能一直寫數據,因此,為保證最大的數據寫入量,FTL必須盡量讓每個閃存塊均衡寫入,這就是磨損平衡(Wear Leveling)。
除此之外,FTL還需要實現壞塊管理、讀干擾處理、數據保持處理、錯誤處理等等其它很多事情。理解了FTL,SSD的工作原理也就掌握了。關于FTL,本書有專門章節介紹,讀者可自行跳到第四章閱讀。
1.2 SSD產品核心參數
用戶在購買SSD之前,會關注它的一些參數指標,比如能跑多快、用的是什么閃存等等。特別是企業級用戶,需要全方位研究SSD的核心指標,解決關注什么指標,如何關注,競爭產品對比這些問題,最終逐一撥開產品內在本質。本節以SSD產品為例,帶大家一起解讀SSD產品的核心參數。
-
閃存
+關注
關注
16文章
1841瀏覽量
115897 -
SSD
+關注
關注
21文章
2965瀏覽量
119437
原文標題:購買固態硬盤看哪些核心參數?
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
評論