nvidia的nvidia-peermem模块通常是配合驱动参数NVreg_RegistryDwords一起使用,作用是强制启用 GPU 对等映射,让GPU 间通信直接进行,避免CPU的介入从而降低CPU负载,且不占用主机内存作为中转缓冲区。
我们在实际的配置过程中也会偶尔遇到nvidia-peermem模块不能正常加载到内核中,加载这个模块到内核中还有前提,需要安装好nvidia驱动和RDMA网卡(OFED)驱动,所以实际产生这个的原因可能就是nvidia驱动问题和RDMA网卡驱动问题,接下来我们就来分析下造成这个问题的可能性问题。
1.RDMA 的子网管理服务冲突
nvidia-peermem模块需要与Mellanox的RDMA驱动(OFED)正确交互,openibd 服务状态应该为 active (exited),当 opensmd.service 意外运行时,会与 openibd 冲突导致 nvidia-peermem 加载失败,所以确保 opensmd.service 服务不应该为运行状态,或者是触发运行。经过调整这个服务我们可以再次手工加载下 nvidia-peermem 模块到内核。
sudo modprobe nvidia_peermem2.OFED 驱动安装本身就不完整
可以使用以下命令检查mellanox网卡安装的头文件是否缺失
find /usr/src -name "peer_mem.h"如果找不到,很可能OFED驱动安装有问题,如果dmesg日志中有以下相关的错误信息
nvidia-peermem refuses to load because it was built without IB peer memory symbols present说明了就是OFED驱动安装有问题,可以进行重装OFED驱动或者是更换一个版本安装再进行尝试
3.NVIDIA 驱动本身有异常
NVIDIA驱动安装包不完整,或者DKMS(动态内核模块支持)编译失败等问题导致相关的模块没有完整的进行安装
find /lib/modules/$(uname -r) -name "*peermem*"如果没有找到相关模块说明驱动有问题,建议进行重装
4.其他问题和事项
通常需要加载nvidia-peermem模块并使用,还需要GPU本身支持GDR,如果GPU本身就不支持,即使开启了也不会产生任何优化效果,一般高端卡都支持,例如游戏卡5090,4090这些都不支持。可以使用以下命令查询GPU卡是否支持GDR
nvidia-smi -q | grep "GPU Direct RDMA"
Supported: Yes #支持返回Yes另外加载此模块的方式可以写到内核模块的加载文件中,这样开机就能自动加载
echo "nvidia_peermem" | sudo tee /etc/modules-load.d/nvidia.conf
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/1162
评论列表