从PCIe trace中分析NVMe

       笔者也是第一次使用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)地址。

补充下更更直观的图:

PCIe枚举协议NVMe Class是指用于PCIe总线上的存储设备的一种规范。NVMe(Non-Volatile Memory Express)是一种高性能、低延迟的存储设备接口协议,专为固态硬盘(SSD)设计而成。NVMe Class是PCIe枚举协议的一种特定类别,用于实现NVMe设备在PCIe总线上的枚举和通信。 PCie枚举协议指的是PCIe总线上设备的识别和配置过程。当系统启动时,PCIe总线会对连接的设备进行枚举,识别每个设备并为其分配资源。NVMe Class则是一种在PCIe总线上进行枚举的设备类别。它采用一种特定的寄存器和数据结构,用于描述和配置NVMe设备。 NVMe Class在PCIe枚举过程,首先通过检测PCIe总线上的设备标识来识别出NVMe设备。然后,通过读取和写入相应的NVMe寄存器,获取设备的特定信息,例如设备ID、固件版本、命名空间和队列等。最后,系统根据这些信息分配相应的资源给NVMe设备,使其可以被操作系统和应用程序访问。 在NVMe Class,还定义了一些特定的命令和操作,用于与NVMe设备进行通信。这些命令包括读取、写入、擦除等操作,可实现对存储设备的数据访问和管理。此外,NVMe Class还规定了设备状态和错误处理等方面的规则,确保设备的稳定性和可靠性。 总之,PCIe枚举协议NVMe Class是一种用于PCIe总线上NVMe存储设备的规范,通过设备的识别、配置和通信,实现对存储设备的管理和操作。它提供了高性能和低延迟的存储解决方案,广泛应用于服务器和高性能计算领域。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值