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