大家好,繼上次分享了幾篇有關PCIE和NVME的文章,陸陸續續又撰寫了幾篇NVME的文章,
這幾年發現,對於剛畢業的新鮮人看spec可能是一個很高的門檻,常常一知半解,後來把
我撰寫的文章丟給他們看後,發現他們其實都能理解原理,所以意外發現撰寫Blog其實也
是可以當作教育訓練的教材,培養人才事半功倍,省時省力,雖然最近景氣不太好
,不過還是歡迎大家來做SSD controller,以下是文章分享,歡迎大家一起討論
■原理NVM Express - Admin Command Set
Admin Queue主要用來提交"管理和控制Controller行為"的指令,每個command會使用
Opcode來做區別,Admin Queue的create方式為host software會預先allocate一塊
memory buffer,並將buffer base address填入NVMe register的Admin Submission
Queue Base register(ASQ)和 Admin Completion Queue Base Address register(ACQ),
這樣host software提交Admin Command的時候,Controller就能從ASQ得知要去哪裡
fetch command回來執行。此篇將詳細介紹提交到Admin Queue的指令集有哪些,且詳細介
紹每個Admin Command的作用為何
https://reurl.cc/OjMNnR
■原理NVM Express - NVM Command Set
在NVM subsystem中,可能會存在多個controllers,每一個controller可能會去存取某些
特定namespace。Namespace由多個logical blocks所組成,而logical blocks是
controller存取data的最小單位。而一個logical blocks的size為何,可以為512
bytes, 1 KiB, 4 KiB…等等,主要透過Identify command的Identify Namespace data
structure的內容可以得知。此篇幅將會介紹Namespace的特性和狀態轉變,並且介紹
Namespace與Controller的關係如何透過Namespace Management而關聯起來,最後在介紹
提交到I/O Queue的指令集有哪些和每個I/O Command的作用為何。
https://reurl.cc/x6amAb
■解析 NVM Express - 透過Linux OS 解析M.2 NVMe SSD
由於我撰寫了"原理NVM Express - NVMe Submission Queue & Completion Queue (SQ &
CQ)"、"原理NVM Express - Admin Command Set"和"原理NVM Express - NVM Command
Set"這三篇文章,只有有了這三篇的基本知識,我們就有足夠的能力可以去解析我們主機
板上任何一個M.2 NVMe device的一些資訊和如何操作它。接下來這篇文章會使用x86系統
並安裝Ubuntu OS,然後隨意安裝市面上的一款M.2 NVMe SSD到主機板上,透過Linux
command line的方式來解析此M.2 NVMe SSD的能力和如何透過I/O command去讀寫
namespace,並且提供一些在Linux中非常實用的CLI。
https://reurl.cc/QZRqg2
※ 引述《Caramel715 (焦糖)》之銘言:
: 大家好,我目前任職於某家SSD韌體,主要是負責NVMe Front-end的部分,Front-end主要
: 負責PCIe和NVMe protocol的firmware porting,所以必須study這兩份spec。由於spec
: 的內容過於龐大,所以我習慣會用網誌做筆記,一方便怕自己忘記,一方面也可以在遇到
: 問題的時候快速查詢,當然我所寫的都是我對於spec的理解,所以希望有這方面的專家,
: 可以討論不同的見解,也歡迎大家討論與指教。
: PCIE:
: ■原理PCI Express - LTSSM Equalization狀態機推演
: 由於PCIe通道傳輸的特性,會有所謂的碼間干擾(Inter-Symbol Interference,ISI),而
: 導致資料無法被辨識,且隨著PCIe頻率越來越高,這個問題會更加明顯,因此必須透過
: Equalizer來調整彼此間的訊號,得到比較好的眼圖,搭建起溝通的橋樑,此篇為EQ
: LTSSM的推演。
: https://reurl.cc/VjGMzb
: ■原理PCI Express - LTSSM 狀態機推演 "Detect -> Polling -> Configuration ->
: L0"
: PCIe為point-to-point interconnects(點對點的連接),所以就算系統上由多層PCIe bus
: 所構成,每個component只要負責與他對面的component之間的link negotiation就可以了
: ,這篇文章主要會推演兩個端點之間的LTSSM是如何從Detect state演進到L0。
: https://reurl.cc/akpd4D
: ■簡介PCI Express: Link Training and Status State Machine( LTSSM 狀態機 )
: 由於工作上很容易會遇到PCIe Link上的問題或者我們需要驗證LTSSM state transition
: 有沒有符合預期 ,常常需要透過Protocol Analyzer錄製PCIe Trace來進一步分析。此篇
: 主要會介紹Traning Sequence,和各個LTSSM state主要目的為何。
: https://reurl.cc/9Od37x
: ■原理PCI Express: Advanced Error Reporting(AER)
: Advanced Error Report(簡稱AER)為PCIe 較為強健的錯誤回報機制,在PCI Express?
: Base Specification Revision 3.0 的6.2節"Error Signaling and Logging"章節有詳細
: 的介紹整個AER的logging與repoting機制,由於工作上常常遇到Linux Kernel log中,出
: 現AER error訊息,所以又把spec拿出來翻一翻,藉此寫一篇關於AER的機制,方便以後查
: 詢。
: https://reurl.cc/veyva1
: NVME:
: ■原理NVM Express - NVMe Submission Queue & Completion Queue (SQ & CQ)
: NVMe最基本的communicate架構主要是建立在Submission Queue和Completion Queue,
: Host Software透過Submission Queue來提交command讓NVMe Controller執行,
: Controller會透過Completion Queue來回報command執行狀況為何。此篇主要介紹NVMe基
: 本架構。
: https://reurl.cc/bkZYVd