Host是如何读取NVMe SSD上数据的?一个读I/O又有多少步操作?
“八步。”NVMe协议这样回答。这是个非常底层的问题,其整个流程不仅涉及NVMe协议本身,其中命令和I/O数据传输的机制还与PCIe协议等内容息息相关。理解一个NVMe SSD的I/O处理流程将为SSD使用和优化打下基础。今天我们就走进一个NVMe SSD的读I/O。
在介绍NVMe SSD的读IO处理流程之前,需要往下一层到达PCIe层。无论是NVMe的命令本身,还是要传输的数据,最终都会被封装成为TLP包进行传输。AIC、U.2以及M.2等形态的NVMe SSD也都是借助PCIe插槽与host进行交互的。
为了更好的理解上图中命令处理过程的细节,我们总结如下:
前文介绍了一些概念和部分操作细节,接下来是更为形象和深入的解读。在此我们还要借助协议分析仪,分析仪的职责是将host和SSD传输的0和1翻译成人话,借助支持NVMe协议的分析仪,我们获得了一条读I/O的Trace记录,如下图(每行信息记录都可以进一步展开看到相应的TLP包和DLLP包的信息):
命令信息被存放在ID为0x004C的Submission Queue(SQID)中,SSD处理完毕的信息会存放在ID为0x004C的Completion Queue(CQID)中。此外,这条记录还标注出了SSD在服务器上的ID(Device ID)等信息。