2023年10月11日 星期三

解析 NVM Express - 透過Linux OS 解析M.2 NVMe SSD

在之前,我撰寫了三篇有關NVMe的文章 ,分別是"原理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。


2023年9月13日 星期三

原理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(INDS)的內容可以得知,單位為bytes。


2023年2月19日 星期日

原理NVM Express - Admin Command Set

根據上一篇文章原理NVM Express - NVMe Submission Queue & Completion Queue (SQ & CQ),介紹了Host Software和Controller是如何透過Submission Queue和Completion Queue來溝通,而且還有提到Admin Queue和I/O Queue的差別,接下來的篇幅將會詳細介紹提交到Admin Queue的Command Set。

2022年4月10日 星期日

原理PCI Express - LTSSM Equalization狀態機推演

在之前,我撰寫了一篇簡介PCI Express: Link Training and Status State Machine( LTSSM 狀態機 )介紹有關LTSSM中各個state的作用和另外一篇原理PCI Express - LTSSM 狀態機推演 "Detect -> Polling -> Configuration -> L0推演了LTSSM如何從Detect state轉移到L0 state。接下來這篇文章,將會介紹Equalization的作用、規則、升速和LTSSM的推演。


2021年11月29日 星期一

原理PCI Express - LTSSM 狀態機推演 "Detect -> Polling -> Configuration -> L0"

在之前,我撰寫了一篇介紹PCIExpress: Link Training and Status State Machine(LTSSM)介紹有關LTSSM中各個state的介紹,接下來這篇文章會推演兩個端點之間的LTSSM是如何從Detect state演進到L0。PCIe的優點就是point-to-point interconnects(點對點的連接),所以就算系統上由多層PCIe bus所構成,每個component只要負責與他對面的component之間的link negotiation就可以了,大大的降低複雜程度。

2021年11月17日 星期三

原理NVM Express - NVMe Submission Queue & Completion Queue (SQ & CQ)

NVM Express,又簡稱NVMe,他提供了Host Software與non-volatile memory之間的介面規範,讓兩者搭起溝通橋梁,同時提供了優化SSD的方法及標準,並且充分運用PCIe的高頻寬,使得存取速度大幅的提升。本篇文章是基於NVMe Base Specification 1.4c版本的觀點去撰寫,相關的spec可以在NVMe協會網站上取得。

2021年3月29日 星期一

簡介PCI Express: Link Training and Status State Machine( LTSSM 狀態機 )

PCIe LTSSM,全名為Link Training and Status State Machine,主要是用在PCIe中Physical Layer Link的初始化與設置,讓device之間建立起溝通橋梁。整個LTSSM狀態機總共有11個state,每個state又可以分為多個substates,所以整個狀態機的跳轉可以說是非常的錯綜且複雜且完善,此篇主要是前情提要,介紹一些名詞,之後會在用另外一個篇幅講解實際兩個PCIe Device LTSSM是如何運做的(更新:連結如下)。

原理PCI Express - LTSSM 狀態機推演 "Detect -> Polling -> Configuration -> L0"

原理PCI Express - LTSSM Equalization狀態機推演

2021年3月5日 星期五

PCI Express: Uncorrectable AER - Surprise Down Case Study

在之前,我撰寫了淺談PCI Express: Advanced Error Reporting(AER)文章介紹了整個Advanced Error Report(AER)的錯誤回報機制,文中提到AER主要可以分為Uncorrectable Errors和Correctable Errors。

此篇文章主要描述最近機台上遇到的AER Case,那就是Uncorrectable Error中的Surprise Down,主要是透過LeCroy PCIe Analyzer截錄的LTSSM狀態機來分析,最終找到root cause。

2020年5月25日 星期一

原理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的機制,方便以後查詢,以下就是我對於spec的理解與淺見,如果有誤的地方還望指正。


2019年3月25日 星期一

原理Intel Virtualization Technology for Directed I/O(VT-d) for DMA Remapping


Intel 的Virtualization Technology有兩種,一種為CPU virtualization,稱為VMX(可以參考我寫的文章淺談Virtual Machine Extensions(VMX)近一步了解),另一個為I/O virtualization,簡稱為VT-d。

2019年3月23日 星期六

淺談Intel Virtual Machine Extensions(VMX)

VMX主要是由Intel所定義的architecture,可以再 "Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3B: System Programming Guide, Part 2" 這分文件的Chapter19去詳細了解,文中都是對於spec的翻譯或者是自己的見解,如果有誤還請多指教。

2018年8月20日 星期一

Generate PCI Configuration Cycles by CF8/CFC

當Study過PCI spec後,第一支會練習的程式就是如何去Access PCI device的Configuration space,看到spec的3.2.2.3.2節,

PCI Configuration Space

入行BIOS工程師,通常第一份spec就PCI Local Bus Specification Revision 3.0(簡稱PCI spec),PCI 最精髓的地方就是Configuration Space,PCI 的Configuration Space 有256-byte(0h - FFh),它可以被分為兩個部分,分別是"predefined header region" and a "device dependent region"。

2018年4月15日 星期日

Parse file in c, fopen, fgets, fgetc(如何使用c語言解析檔案)


最近因為寫tool時,需求要去Parse 檔案理面的字串,只用到fopen, fgetc和fgets三個function就達成了,這三個function在stdio.h這個header file有提供,所以必須在code裡include stdio.h,首先先介紹這三個function

解析 NVM Express - 透過Linux OS 解析M.2 NVMe SSD

在之前,我撰寫了三篇有關NVMe的文章 ,分別是" 原理NVM Express - NVMe Submission Queue & Completion Queue (SQ & CQ) "、" 原理NVM Express - Admi...