板载一个M.2接口,上接了一块三星消费级NVME盘,Samsung 970 EVO Plus,按照M.2转接板那样适配以及从VPD中读取信息两种方式适配,都没有硬盘信息,手上该硬盘的数据手册中并未提到VPD相关的信息,请问这种情况该如何适配,硬盘信息来源是?还是说要像适配一张PCIe卡一样适配这个硬盘?
i2c6-pca9545(0xe2)-channel:2-connector
OS下查询硬盘信息:
板载一个M.2接口,上接了一块三星消费级NVME盘,Samsung 970 EVO Plus,按照M.2转接板那样适配以及从VPD中读取信息两种方式适配,都没有硬盘信息,手上该硬盘的数据手册中并未提到VPD相关的信息,请问这种情况该如何适配,硬盘信息来源是?还是说要像适配一张PCIe卡一样适配这个硬盘?
i2c6-pca9545(0xe2)-channel:2-connector
OS下查询硬盘信息:
1.要保证M.2正常
2.其次看NVME数据获取是否正常
建议发一份一键式收集的日志进一步看看
OS下能认到该硬盘,且能正常使用(作为系统盘),M.2接口没问题,看NVME数据使用lshw -class storage | grep nvme 是有序列号等数据的,用busctl 查看ibma也获取到了一些硬盘信息
busctl --user introspect bmc.kepler.host_agent /bmc/kepler/Systems/1/Sms/1/ComputerSystem/Systems/1/Storage/1/PCIE_5FSSD/0000_3A00_3A05_2E0_5F0000_3A06_3A00_2E0
需要CSR里正确配置vpdconnector 加载NVME盘的CSR,才能通过vpd或者bma匹配SN获取硬盘信息
该NVME盘为消费级,数据手册没有VPD相关描述,根据sr配的vpd芯片地址0xa6使用i2cread,busctl等读写读不到信息,怀疑没有vpd芯片。于是强制加载Connector_VPD和Connector_ComVPD,强制加载后drive_collection.lua识别到nvme盘,handler_nvme.lua find_object 日志打印没有获取到SN号。在代码处暂时赋值序列号跳过该匹配,并在handler_pass_through_drive.lua暂时赋值丝印,硬盘依旧没信息,相关日志如下:
handler_base.lua(116): c_handler_base: regist object, bma path=/bmc/kepler/Systems/1/Sms/1/ComputerSystem/Systems/1/Storage/1/PCIE_SSD/0000:00:05.0_0000:06:00.0, object=false
handler_nvme.lua(116): Update nvme(S4EUNMFN840626J) info by bma
handler_base.lua(116): c_handler_base: regist object, bma path=/bmc/kepler/Systems/1/Sms/1/ComputerSystem/Systems/1/Storage/1/Drives/PCH_0000:74:03.0_ata2, object=/bmc/kepler/Systems/1/Storage/Drives/Drive_50_01010A
handler_pass_through_drive.lua(409): Update Disk50 info by bma
对象配对错了,没有显示NVMe信息,反而配对上了另外一块HDD硬盘,但我其实把HDD相关的PcieAddrInfo_SAS_1下的rootbdf改掉了。
目前没信息的关键应该在object=false,继续添加日志跟踪,刚开始觉得可能是因为pciessd is disabled导致:
nvme_object.lua(239): nvme51 pciessd is disabled
nvme_object.lua(193): [pciessd_is_enable] Slot=51, port0_pcie_link_active=0, drive_functional=0, drive_not_ready=1, reset_not_required=0
nvme_object.lua(196): [pciessd_is_enable] port0_pcie_link_active == 0, return false
暂时屏蔽该验证if not self:pciessd_is_enable() then,还是没信息
请问序列号是从哪里同步到NVMe对象的,当前我怀疑handler_base.lua object=false这个方向正确吗?能否提供一些继续往下排查定位的思路?
正常的NVME盘加载流程为
硬盘背板指定槽位的在位寄存器和PCIEType寄存器读的值满足条件,Connector_ComVPD带着Slot 加载下一级sr,直到包含NVMe对象的PROTOCOL_X.sr,并且这个Slot后续用于关联对应的Drive对象。
后续NVMe对象通过CSR里配的VPDChip读取到SN等信息,并把这些信息通过上述的Slot更新到对应的Drive对象上。
如果环境上ibma,通过SN匹配资源,匹配上了后,会把ibma传来的NVME盘的信息更新到NVMe对象上,再更新到Slot对应的Disk对象上。
1、据我了解,消费级M.2 NVME一般是不支持nvme-mi带外管理协议的。另据我们公司在模组上适配的经验,如果要通过IBMA来获取m.2的信息,需要配置一个PcieAddrInfo跟M.2 磁盘对象绑定,这样IBMA推送信息过来时可以根据BDF号去寻找到与之关联的磁盘对象,然后将信息刷新到磁盘对象上
有的,有配置PcieAddrInfo下的RootBDF,但从日志看的话并没有走直通盘匹配BDF获取丝印配对,从而从bma拿到数据
这两个lua文件分别是直通和nvme:handler_pass_through_drive.lua、handler_nvme.lua,假定该nvme没有vpd的情况,是否可以走直通盘的逻辑呢?但是初始时我按直通盘配的,好像没有因此配对成功
调用链
handler_base.lua function c_handler_base:match_object(path, data)——handler_nvme.lua function c_handler_nvme:find_object(, data)——function c_handler_base:regist_object(path, object, data)——init.lua function c_bma:process(method, path, all_path_data)——function c_bma:add(path, resource)——handler_nvme.lua function c_handler_nvme:add(, data, object)——function c_handler_nvme:update_nvme(obj, data) data即path,没有path数据,更新数据失败
或许你可以在这个匹配函数中新增一段通过BDF来匹配NVME对象的逻辑,现有的社区代码中应该是通过SN来进行匹配的,而消费级M.2 NVMe是无法通过带外方式获取SN的,因此在你的环境上这个匹配函数不会返回有效对象
请问V2上NVME盘的上电时间、容量、温度等信息是从iBMA还是从VPD获取的?能够匹配上Hdd对象,web上也有显示,但是从iBMA传过来没有容量等数据
都是从iBMA传给BMC的,需要nvme-cli工具iBMA才能获取到信息
遇到了相同的场景,当前配置了Drive对象和PcieAddrInfo对象,iBMA的信息没有刷新到Drive对象上,还缺少什么配置吗?