文章目录
快速回忆要点
- 2个内核模块:mst_pci, mst_pciconf
- 3个命令:mst start、mst status、mst stop。这三个命令围绕提供mst的服务,提供前端后端的能力。
- mst本质是提供一条通道,走pcie,提供用户态命令,内核驱动,以及网卡端提供对应的处理消息处理模块进行操作。
- mst需要start才会加载对应module,以及告知网卡将会做相关处理,相当于是这个功能的开关。
相关命令:
mst start
mst status
modprobe mst_pci #加载mst_pci
mst stop
报错
MST modules:
------------
MST PCI module is not loaded
MST PCI configuration module loaded

分析与解决办法
查看原因
原因是没有加载mst的相关内核driver。
查看方式:
lsmod |grep -i mst
看到只有mst_pciconf,没有mst_pci

加载mst依赖的ko
使用modprobe自动加载mst_pci,如果系统没有需要单独编译
modprobe mst_pci
再次查看lsmod:可以看到已经加载

再次执行mst status查看

注意
- mst_pci默认不会加载,mst start后注意查看status是否启动
原理解析
- 因为mst是操作通过pcie接入主机的网卡,所以mst提供内mst_pci和mst_pciconf的内核模块用来操作pcie总线,进而和网卡通信。就好比嵌入式的i2c操作设备,只是i2c是标准接口不用单独加载驱动。
- mst start会自动加载mst_pci和mst_pciconf,可以在加载前查看lsmod |grep mst
- mst stop会自动卸载mst_pci和mst_pciconf,可以在stop前后查看lsmod |grep mst
比如:可以看到stop前后mst的module被卸载了。

要点
- 2个内核模块:mst_pci, mst_pciconf
- 3个命令:mst start、mst status、mst stop。这三个命令围绕提供mst的服务,提供前端后端的能力。
- mst本质是提供一条通道,走pcie,提供用户态命令,内核驱动,以及网卡端提供对应的处理消息处理模块进行操作。
- mst需要start才会加载对应module,以及告知网卡将会做相关处理,相当于是这个功能的开关。
–2024-10-09 增加–
如果modprobe找不到解决办法
modprobe报错:
modprobe: FATAL: Module mst_pci not found in directory /lib/modules/4.18.0-553.22.1.0.1.an8.x86_64
可以看到modprobe后还是没有。

这是因为没有安装内核模块,内核模块是在lkernel-mft里面。
mst隶属于mft,mft除了四大金刚,在软件形态上是一个用户态库和内核态共同运行。
分析
可以看到只有用户态mft,没有安装kernel-mft。kernel-mft提供了ko的支持,mft工具通过pcie通路和底层通信。kernel-mft提供类似封装PCIe TLP报文的能力。
更多参考mft的介绍:
https://docs.nvidia.com/networking/display/mftv4290/user+manual

解决办法
下载最新版mft工具
https://network.nvidia.com/products/adapter-software/firmware-tools/
根据OS和arch选择代码下载并上传到服务器。

解压并且根据提示安装
解压后可以看到有mft的多个用户态包和kernel mft。并且还有一些安装脚本,这些rpm包不要手动一个个安装,使用标准安装。安装前使用他自带的脚本处理,先卸载原来的,然后安装新的。

安装:
./old-mft-uninstall.sh #卸载原来的
./install.sh #安装新的

安装后确认安装成功
mst status可以看到依然没有mst device,需要使用mst start启动后便可看见。(mst本质是网卡和host的PCIe管理通道)
mst status
mst start

综述
这个问题困扰了我一两年,总是有的服务器可以有的不可以。不可以可能是因为没有kernel-mft,也可能是因为版本不匹配。包括mft和fw,mft和kernel-mft。创建mst之后,就建立了一个通过专门的PCIe管理链路来通信,而不仅仅是通过pcie的busid。那么什么时候非他不可呢?比如pcie的busid 用flint升级因为DPU异常busid不可用,便可以用mstdev来处理。
&spm=1001.2101.3001.5002&articleId=138468957&d=1&t=3&u=e27e0ea679c447b3924ac855860b8b1c)
842





