当前位置: 首页 > news >正文

【问题记录】如何编译nv_peer_memory模块?依赖OFED的4个目录和2类文件?如何解决没有rdma/peer_mem.h文件?

背景

GDR:GPUDirect RDMA。这项新技术在 GPU 内存之间直接与 NVIDIA HCA/NIC 设备之间提供直接的 P2P(点对点)数据路径。这显着降低了 GPU-GPU 通信延迟,并完全减轻了 CPU 的负担。nv_peer_memory模块是网卡提供给GPU使用GDR技术的模块,介于GPU驱动和OFED之间。 nv_peer_memory依赖OFED的接口。

代码仓库

https://github.com/Mellanox/nv_peer_memory

编译安装方法

git clone https://github.com/Mellanox/nv_peer_memory.git
cd nv_peer_memory
make -j

在这里插入图片描述

编译问题

nv_peer_mem.c:46:10: 致命错误:rdma/peer_mem.h:没有那个文件或目录

问题现象:
在这里插入图片描述
问题原因:
可以看到前面有编译告警:

/root/workspace/nv_peer_memory/Makefile:17: "WARNING: Compilation might fail against Inbox InfiniBand Stack as it might lack needed support; in such cases you need to install MLNX_OFED package first."

上面<rdma/peer_mem.h>这个文件是由Mellanox网卡驱动OFED提供的。
根据nv_peer_memory模块的编译Makefile得知,nv_peer_memory编译依赖OFED放到指定的位置,具体是:

# nv_peer_memory/Makefile文件
KVER := $(shell uname -r) #比如4.19.91-26.an8.x86_64
OFA_ARCH := $(shell uname -m) #比如x86_64 

OFA_DIR ?= /usr/src/ofa_kernel
OFA_CANDIDATES = $(OFA_DIR)/$(OFA_ARCH)/$(KVER) $(OFA_DIR)/$(KVER) $(OFA_DIR)/default /var/lib/dkms/mlnx-ofed-kernel
OFA_KERNEL ?= $(shell for d in $(OFA_CANDIDATES); do if [ -d "$$d" ]; then echo "$$d"; exit 0; fi; done; echo $(OFA_DIR))
...
ccflags-y += -I$(OFA_KERNEL)/include/ -I$(OFA_KERNEL)/include/rdma
...
        /bin/cp -f $(OFA_KERNEL)/Module.symvers my.symvers
...
cat nv.symvers >> my.symvers
make -C $(KDIR) $(MAKE_PARAMS) M=$(PWD) KBUILD_EXTRA_SYMBOLS="$(PWD)/my.symvers" modules

根据文件可以得知,nv_peer_memory编译依赖OFED的Module.symvers以及OFED的头文件:-I$(OFA_KERNEL)/include/-I$(OFA_KERNEL)/include/rdma这两个目录。
并且nv_peer_memory会从4个可能存在OFED驱动的目录中去寻找OFED相关的2类文件

  • /usr/src/ofa_kernel/x86_64/4.19.91-26.an8.x86_64
  • /usr/src/ofa_kernel/4.19.91-26.an8.x86_64
  • /usr/src/ofa_kernel/default
  • /var/lib/dkms/mlnx-ofed-kernel
    如果这些目录没有OFED并且没有编译就会出现异常。没有OFED会造成没有头文件,也就是上面的问题,没有编译会造成没有Module.symvers文件。
    可以看一下编译后的效果

如何解决,参考兄弟篇Mellanox OFED编译方法详细步骤
,然后把OFED的编译目录放到/usr/src/ofa_kernel/default中,比如安装后的效果:
在这里插入图片描述
可以看到依赖的头文件路径在这里:
在这里插入图片描述

其他

nv_peer_memory依赖OFED的哪些接口?

ib_core.ko
ib_unregister_peer_memory_client
nv_peer_memory
ib_register_peer_memory_client
void *
ib_register_peer_memory_client(const struct peer_memory_client *peer_client,
			       invalidate_peer_memory *invalidate_callback);
void ib_unregister_peer_memory_client(void *reg_handle);

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

nv_peer_memory信息:

可以看到依赖2个模块 ib_core,nvidia
在这里插入图片描述

相关文章:

  • Python 远程抓取服务器日志最后 1000行
  • Vue3 路由的历史记录 如何不允许浏览器前进后退 在函数中使用路由切换组件 路由的重定向
  • 鸿基智启:东土科技为具身智能时代构建确定性底座
  • 英国赫瑞瓦特大学激光雷达领域研究概述2025.3.11
  • 计算机毕业设计:公寓管理系统
  • Ubuntu本地部署Open manus(完全免费可用)
  • 【OpenCV C++】存图,如何以时间命名,“年月日-时分秒“产生唯一的文件名呢?“年月日-时分秒-毫秒“ 自动检查存储目录,若不存在自动创建存图
  • FB投广探秘:为何Facebook广告账户不消耗
  • Unity安卓Android从StreamingAssets加载AssetBundle
  • Redis的高可用
  • 深入解析K8s VolumeMounts中的subPath字段及其应用
  • 怎么使用数据集微调大模型LLM
  • DeepSeek技术名词全解析:一场属于中国AI的“觉醒时刻”
  • Manus演示案例: 英伟达财务估值建模 解锁投资洞察的深度剖析
  • Trae IDE:解锁 AI 驱动的高效编程体验
  • 网络安全之RSA算法
  • 鸿道Intewell工业操作系统通过100%自主可控测评
  • BurpSuite插件jsEncrypter使用教程
  • 如何下载MySQL和如何下载MySQL的JDBC驱动包
  • 73. 矩阵置零
  • 日月谭天 | 赖清德倒行逆施“三宗罪”,让岛内民众怒不可遏
  • 媒体评教师拎起学生威胁要扔下三楼:师风师德不能“悬空”
  • 体育文化赋能国际交流,上海黄浦举办国际友人城市定向赛
  • 被围观的“英之园”,谁建了潮汕天价违建?
  • 林诗栋/蒯曼混双取胜,国乒赢得多哈世乒赛开门红
  • 多少Moreless:向世界展示现代中式家具的生活美学