直奔主題:
為了讓更多的朋友對Open-Channel SSD 有所了解,補充介紹如下。
什么是Open-Channel SSD呢?
所謂Open-Channel SSD指的是FTL(Flash translation layer)不在device 端, 而是由Host的操作系統維護的SSD。Linux內核從4.4開始已經支持 Open-Channel SSD了, 并提供了符合NVMe協議的抽象層——lightNVM。 (維基百科)
目前,NVM Express (NVMe) 1.3, 定義了寄存器級別的接口可以讓host軟件通過PCI Express管理非易失性存儲介質。Open-Channel SSD2.0 的spec,使SSD將內部的并行機制暴露給Host,從而Host 可以控制數據的物理位置并進行I/O調度(這些原來是SSD內部Firmware的事情)。spec 可以從官網下載openchanelssd spec(http://lightnvm.io/docs/OCSSD-2_0-20180129.pdf),spec 提供了符合NVMe協議的物理地址命令集(Physical Page Address Command Set)。
基本術語
Logical block,邏輯塊,讀寫命令所面對的最小數據單位,這里的概念從NVMe來,而不是NAND上的物理block。PU (parallel unit),指的是存儲介質中的最小并行操作單元,SSD中擁有大量的PU,這個PU 與傳統SSD 中LUN或者DIE 的概念相似。Group,指的是一組共享同一傳輸總線的PU。與傳統SSD 中的Lane 或者Channel 的概念類似。
Chunk,
指一系列連續的邏輯塊(contiguous logical blocks)。chunk 是可以被reset(參見后面基本命令集)的最小單元。
Write unit,write unit 是一次寫的最少邏輯塊數目。LBA,即logical block address,指邏輯塊地址又稱為LBA。值得說明的是,Open-Channel SSD使用的LBA包含了SSD內部的拓撲信息,比如PU,Group,Chunk等信息。
SSD 里的物理拓撲結構可以用上述邏輯概念抽象出來,如下圖所示。
Open-Channel SSD有哪些好處?
Host 更主動
這是顯然的,對于open-channel SSD,drive 將自己的物理結構信息和內部控制能力開放給Host,使得Host可以精準的控制SSD里的并行單元。spec指出,Host 可以根據自己的業務來控制drive的并行度,SSD firmware不應當對任何形式的workload(比如傳統意義上的順序寫,隨機寫)進行優化處理。
I/O 隔離
對于多租戶的應用架構(multitenant architecture)中,I/O隔離有助于解決nosiy neighbor 問題(指的是由于物理資源的共享,本來邏輯隔離的業務性能上難以避免地彼此影響),而Open-ChannelSSD里面的每個PU在物理上是隔離的,先天適合這種應用場景。
可預測latency
Host 知道每一個PU上的正在執行的(或者pending的)所有命令,對latency就有準確的把握。
Physical Page Address Command Set基本命令
Admin Commands
Geometry 命令
Geometry 命令可以讓Host了解SSD 內部的物理信息,比如 Groups,PU和Chunks的個數。
Get Log Page - Chunk Information
SSD中所有Chunk的信息都可以通過Get Log Page命令獲得。
這里說一下chunk的管理:
一個chunk 可以接受的命令有Read, Write 和Reset等。(具體見下文I/O commands)。
在一個chunk中Host 必須順序寫(但是看上圖中,貌似為random 寫留了一條通道),而且寫的最小單位是write unit。
一個chunk寫完后,Host 要想重新往這個chunk寫數據必須先reset 這個chunk。
跟chunk相關的信息有:
SLBA,startLBA,每個chunk都有唯一的SLBA。
NLB,number of logical blocks,chunk里面的logical block 個數。
WP,write pointer。
SLBA, NLB 和 WP 的邏輯關系如下圖:
CS,chunkstate,又可以分為:
1. Free,WP 為0 的情況下,chuck的狀態為free。
2. Open, WP 不等于0,并且可以繼續寫入。
3. Closed,不可以繼續寫。
4. Offline,不可以再用的chunk。可能是wear leveling 的結果。
狀態切換如下圖所示:
I/O commands
命令集如下:
所有的命令都遵守正規NVMe的命令結構格式。其中Write 和 Read 命令可以直接從NVMe 1.3中可以看到具體描述。可以利用Dataset Management command中的deallocate多個chunk的lba range 來實現多個chunk的reset。
值得一提的是,Vector Chunk commands 系列是通過SGL(scatter-gather logical block address)指定一個或多個LBA list 來執行相應的reset,write,read 和 copy 命令。
以Vector Chunk Copy 命令為例子(其他commands 請參看spec),命令通過SSD 內部buffer實現數據從一個數據源LBA(可以是LBA list)到目標LBA(或者LBA list)的拷貝。
注:本文圖片摘選自 openchanelssd spec
-
寄存器
+關注
關注
31文章
5343瀏覽量
120369 -
SSD
+關注
關注
21文章
2862瀏覽量
117423
原文標題:一張圖了解Open-Channel SSD 2.0
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論