ingram14
原博客地址:https://blog.csdn.net/wangpeng22

       笔者也是第一次使用PCIe协议分析仪这么高大上的设备,倒腾了不少时间才摸得其中门道,如有差错望指正一二,且先总结如下。

       第一次打开PCIe trace,可以看到如图所示:

       如果你和我一样觉得摸不着头脑,那么请往下看;上图中时PCIe 的TLP/DLLP包,确实看不出和NVMe有半毛钱的关系。我们知道NVMe 命令包是16Dword,而NVMe又是将自己的命令隐藏为PCIe Data的,所以我们从trace中看能不能找到DATALength为16Dword的TLP包,如下图笔者终于逮到一只这样的TLP包:

 

       打开其中的DATA区为:0100780001000000 00000000 00000000 00000000 00000000 00B0FC37 04000000 0000000000000000 E89A6600 00000000 07000000 00000000 00000000 00000000;由于大小端关系命令可翻译为:00780001 00000001 00000000 00000000 00000000 00000000 0000000000000000 00000004 37FCB000 00000000 00669AE8 00000007 00000000 0000000000000000。

       有没有觉得很熟悉,这就是标准的NVMe写命令,解析如下:

Opcode:01,FUSE:0,PSDT:0,CID:0x78,NSID:1,MPTR:0,PRP2:0,PRP1:0x437FCB000,SLBA:0x00669AE8,LR:0,FUA:0,PRINFO:0,NLB:07,DSM:0,ILBRT:0,LBATM:0,LBAT:0。

       那么这条NVMe命令的意思就是:从内存地址PRP1(0x437FCB000)写NLB((7+1)* sector = 4K)数据到盘片SLBA(0x00669AE8)地址。

补充下更更直观的图:

posted on 2017-10-26 16:13  ingram14  阅读(330)  评论(0编辑  收藏  举报