蛋蛋讀NVMe之一

原創內容,轉載請注明:  [http://www.od-music.com]  謝謝!

沒有前戲,直接進入。蛋蛋就是這么個人。

NVMe是一種Host與SSD之間通訊的協議,它在協議棧中隸屬高層。

NVMe在協議棧中處于應用層或者命令層,它是指揮官,軍師,在三國的話,就是諸葛亮的角色。”運籌帷幄之中,決勝千里之外”。軍師設計好計謀,就交由手下五虎大將去執行。NVMe的手下大將就是PCIe,它所制定的任何命令,都交由虎將PCIe去完成。雖然NVMe的命令可能可以由別的接口協議完成,但NVMe與PCIe合作形成的戰斗力無疑是最強的。

NVMe是為SSD所生的。NVMe出現之前,SSD絕大多數走的是AHCI和SATA的協議,后者其實是為傳統HDD服務的。與HDD相比,SSD具有更低的延時和更高的性能,AHCI已經不能跟上SSD性能發展的步伐了,已經成為制約SSD性能的瓶頸。所有SATA接口的SSD,你去看性能參數,會發現都不會超過600MB/s。如果碰到有人跟你說它的SATA SSD讀取性能可以超過600MB/s,直接撥打110報警。不是底層Flash帶寬不夠,是SATA接口速度限制了,因為SATA現在最高帶寬就是600MB/s。OK,既然SATA接口速度太慢,我用PCIe好了,不過上層協議還是AHCI。五虎上將有了,由劉備指揮,讓人不禁感嘆暴殄天物呀。劉備什么水平,諸葛亮出現之前,居無定所,一會跟著曹操混,一會又跟著呂布混,誰肯收留就跟誰混。慘呀!AHCI和劉備一個德行,只有一個命令隊列,最多同時只能發32條命令,HDD時代(群雄逐鹿)還能混混,SSD時代(三足鼎立)就只有被滅的份。劉備需要三顧茅廬,需要諸葛亮的輔佐。同樣,SSD需要PCIe,更需要NVMe。

在這樣的背景下,Intel等巨頭攜天子以令諸侯,集大家智慧,制定出了NVMe規范,目的就是釋放SSD性能潛力,解SSD倒懸之苦。

Capture

上面只列了幾個巨頭,參與的公司遠不止這些。沒有上榜的公司不要見怪。

NVMe制定了Host與SSD之間通訊的命令,以及命令如何執行的。

NVMe有兩種命令,一種叫Admin Command,用以Host管理和控制SSD;另外一種就是I/O Command,用以Host和SSD之間數據的傳輸。下面是NVMe1.2支持的命令列表:

NVMe支持的Admin Command:

NVMe支持的I/O Command:


跟ATA spec中定義的命令相比,NVMe的命令個數少了很多,完全是為SSD量身定制的。大家現在別糾結于具體的命令,了解一下就好。老板交代干活的時候,再找spec一個一個看吧。

命令有了,那么,Host又是怎么把這些命令發送給SSD執行呢?

NVMe有三寶:Submission Queue (SQ),Completion Queue(CQ)和Doorbell Register (DB)。 SQ和CQ位于Host的內存中,DB則位于SSD的控制器內部。上圖:

這張圖信息量比較大,除了讓我們知道SQ和CQ在Host的memory中以及DB在SSD端外,而且讓我們對一個PCIe系統有一個具體的認識。上圖中的NVMe Subsystem一般就是SSD。請看這張圖幾秒鐘,然后閉上眼,腦補SSD所處的位置:SSD作為一個PCIe Endpoint通過PCIe連著Root Complex (RC), 然后RC連接著CPU和內存。RC是什么?我們可以認為RC就是CPU的代言人,助理,或者小蜜。作為系統中最高層,CPU說:我很忙的,你SSD有什么事情先跟我小蜜說!盡管如此,SSD的地位還是較過去提升了一級,過去SSD別說直接接觸霸道總裁,就是連小蜜的面都見不到,SSD和小蜜之間還隔著一座南橋呢。滾蛋吧,南橋君!

扯遠了,剛才要說什么來著。對了,是三寶。SQ位于Host內存中,Host要發送命令時,先把準備好的命令放在SQ中,然后通知SSD來??;CQ也是位于Host內存中,一個命令執行完成,成功或失敗,SSD總會往CQ中寫入命令完成狀態。DB(大寶?)又是干什么用的呢?Host發送命令時,不是直接往SSD中發送命令的,而是把命令準備好放在自己的內存中,那怎么通知SSD來獲取命令執行呢?Host就是通過寫SSD端的大寶寄存器來告知SSD的:飯已OK了,下來密西吧!

OK,具體的我們來看看NVMe是如何處理命令的,看圖說話:

這是NVMe1.2規范中的第207張圖。不知道是人家圖畫得好呢,還是NVMe就是這么簡單,抑或是我比較聰明,反正上面的命令處理流程我一看就明白了。好吧,給沒我聰明的人再解釋一下。

說,把大象放冰箱一共要幾步?答:三步。

第一步,打開冰箱門;

第二步,放進大象;

第三步,關上冰箱門。

說,NVMe處理命令需要幾步?答:八步:

第一步:Host寫命令到SQ;

第二步:Host寫DB,通知SSD取指;

第三步:SSD收到通知,于是從SQ中取指;

第四步:SSD執行指令;

第五步:指令執行完成,SSD往CQ中寫指令執行結果;

第六步:然后SSD發短信通知Host指令完成;

第七步:收到短信,Host處理CQ,查看指令完成狀態;

第八步:Host處理完CQ中的指令執行結果,通過DB回復SSD:指令執行結果已處理,辛苦您了!

 

曹植七步作詩,NVMe就比曹植差一點,需要八步。

關于NVMe,到現在相信大家有了一些基本認識。關于更多技術細節,今天我不打算講了。我要吸取之前的教訓,比如在一篇文章里就把SSD基本原理介紹了,而不是分別介紹。這樣很不討巧,一口氣寫完,對自己寫文章是壓力,對讀者讀文章也是壓力,對網站的瀏覽量也不好。阿呆的做法值得學習,一個話題,采用連載的方式推出,有朋友也這么向我建議,于是我決定采取類似方式來談NVMe,畢竟NVMe是個大話題。于是,我把標題從”蛋蛋讀NVMe”改成”蛋蛋讀NVMe之一”,后面還有之二,之三。。。接下來《蛋蛋讀NVMe之二》我會詳細解讀NVMe的三寶 (SQ,CQ,DB),敬請期待。

ssdfans_qrcode_flash

分類目錄 SSD, 技術文章.
掃一掃二維碼或者微信搜索公眾號ssdfans關注(添加朋友->點最下面的公眾號->搜索ssdfans),可以經??吹絊SD技術和產業的文章(SSD Fans只推送干貨)。
ssdfans微信群介紹
技術討論群 覆蓋2000多位中國和世界華人圈SSD以及存儲技術精英
固件、軟件、測試群 固件、軟件和測試技術討論
異構計算群 討論人工智能和GPU、FPGA、CPU異構計算
ASIC-FPGA群 芯片和FPGA硬件技術討論群
閃存器件群 NAND、3D XPoint等固態存儲介質技術討論
企業級 企業級SSD、企業級存儲
銷售群 全國SSD供應商都在這里,砍砍價,會比某東便宜20%
工作求職群 存儲行業換工作,發招聘,要關注各大公司招聘信息,趕快來
高管群 各大SSD相關存儲公司高管和創始人、投資人

想加入這些群,請微信掃描下面二維碼,或搜索nanoarchplus,加阿呆為微信好友,介紹你的昵稱-單位-職務,注明群名,拉你進群。SSD業界需要什么幫助,也可以找阿呆聊。