作者 白丁
給SSD Fans原創投稿技術或市場文章,拿>=100元稿費。在ssdfans公眾號回復關鍵詞,可以搜索相關歷史文章。
在一個SSD中有多個chip,每個chip中有多個 plane,每個 plane 中又會包含多個 block。在訪問 SSD 時通常都會向設備發送需要訪問的 block number ,因此了解 block 在 SSD 中的編址方式十分重要。在基於disksim的ssdextension 中一共定義了三種 block 的編址方式。
在 ssd.h 文件中我們可以看到三條宏,分別是:
#define PLANE_BLOCKS_CONCAT 1
#define PLANE_BLOCKS_PAIRWISE_STRIPE 2
#define PLANE_BLOCKS_FULL_STRIPE 3
在配置文件中可以設置參數 plane block mapping 的值來表示將使用哪種類型的編址方式。下面分別介紹這三種編址方式:
PLANE_BLOCKS_CONCAT
這種編址方式中每個 plane 上的 block 是順序組織的,一個 plane 接著一個 plane ,整個是串在一起的,如下圖所示:
<img src="http://www.ssdfans.com/wp-content/uploads/2017/10/102417_1356_SSDDISKSIM1.png" alt=""/>
PLANE_BLOCKS_PAIRWISE_STRIPE
這種編址方式中,每一對 plane 上的 block 是交錯組織的,而對與對之間的組織是串聯的,如下圖所示:
<img src="http://www.ssdfans.com/wp-content/uploads/2017/10/102417_1356_SSDDISKSIM2.png" alt=""/>
PLANE_BLOCKS_FULL_STRIPE
這種方式下,block是按照條帶來組織的,如下圖所示:
<img src="http://www.ssdfans.com/wp-content/uploads/2017/10/102417_1356_SSDDISKSIM3.png" alt=""/>
在 ssd 的元數據 ssd_element_metadata 中有一個 char *free_block 的屬性。free_block 所代表的是一個連續的 bit 位,如果第 i 個 bit 為 0,那麼表示該 element 的第 i 個 block 是 free 狀態,否則就是處於正在使用狀態。關於第 i 個 block 的 i 是按上面第一種方式來組織的,也就是每個 plane 的串聯。所以對於給定的一個 block number 你只有知道 block 在 element 中的編址方式才能計算出它是第幾個 block。
在 ssd_clean.c 中提供了 ssd_block_to_bitpos() 這個函數,傳入參數 blkno,它根據當前 ssd 中 block 的編址方式返回出 blkno 在當前 element 中對應的編號是多少。然後調用 ssd_bit_on() 可以查看當前 block 處於 free 還是 in use 狀態。
想跳槽又怕老闆知道,怎麼辦?簡單又保密,SSD Fans幫你跳槽拿高薪
喜歡就請分享轉發!
怎麼閱讀ssdfans其他文章?點擊文末閱讀原文進入www.ssdfans.com,用搜索框搜索關鍵字即可。也可以直接在公眾號回復關鍵詞搜索。
不想錯過後續精彩文章?長按或掃描下面二維碼關注ssdfans就可以了!
ssdfans微信群介紹
想加入這些群,請加nanoarch為微信好友,介紹你的姓名-單位-職務,註明群名,拉你進群。