MLNX_OFED 源码补齐、Debug/Release 构建命令与修改记录

  • 日期:2026-10-26
  • 工作目录:/home/jimmy/workspace/data/tmp02_debug_ofed_all
  • OFED:MLNX_OFED 24.10-5.1.6.1
  • 系统:Ubuntu 22.04.5 LTS,x86_64
  • 内核:6.8.0-40-generic
  • 网卡:Mellanox ConnectX-5,PCI ID 15b3:1017
  • 原始归档:MLNX_OFED_SRC-debian-24.10-5.1.6.1.tgz
  • 原归档 SHA256:6c341894115832d97016967850c321b034ff933ae87c01c6f214fc00069bc950

1. 当前结果摘要

  • 原归档中的 29 个源码项目已全部解压并纳入 Git。
  • 另外补充了 multiperf 和 ofed-docs 两个同版本项目。
  • 27 个项目已完成 Release 和 Debug 双配置构建。
  • 所有 10 个内核项目均已完成双配置构建 ,包括 mlnx-ofed-kernel。
  • 已校验 54 份产物清单、268 个构建产物的 SHA256。
  • Release 安装模拟结果:81 个新包、0 个删除包、无依赖错误。
  • 没有实际安装 OFED,没有替换当前网卡驱动,也没有启用 OpenSM。
  • Git 当前有两次提交:
    • 9bec41f1 Import MLNX_OFED 24.10 source snapshot
    • 8c06e5c1 Add unified OFED build profiles

2. 系统构建依赖安装命令

以下按用途合并整理,便于在新环境复用。需要用户在本机输入 sudo 密码执行。

2.1 基础工具

bash 复制代码
sudo apt update
sudo apt install -y \
  git build-essential dpkg-dev debhelper devscripts dkms \
  autoconf automake autotools-dev dh-autoreconf libtool \
  pkg-config cmake ninja-build rpm2cpio \
  flex bison python3 dh-python cython3

2.2 通用开发库及内核构建依赖

bash 复制代码
sudo apt install -y \
  linux-headers-$(uname -r) \
  libnl-3-dev libnl-route-3-dev libmnl-dev libelf-dev libpci-dev \
  libsystemd-dev libudev-dev

2.3 rdma-core 文档、systemd 和 valgrind 依赖

bash 复制代码
sudo apt install -y \
  cmake libsystemd-dev libudev-dev \
  pandoc python3-docutils valgrind

2.4 OpenMPI Fortran 和 LTO 依赖

bash 复制代码
sudo apt install -y \
  gfortran gfortran-12 \
  libgfortran5 libgfortran-12-dev libgcc-12-dev

2.5 可选 Open vSwitch 和 rshim 依赖

本次未构建这两个可选项目。若后续需要,可安装:

bash 复制代码
sudo apt install -y \
  graphviz python3-all python3-sphinx python3-twisted \
  python3-prometheus-client python3-zope.interface \
  libunbound-dev libunwind-dev \
  libusb-1.0-0-dev libfuse-dev

注意:构建这套源码栈时,不需要先用 Ubuntu 的 libibverbs-dev、librdmacm-dev 等 RDMA 开发包替换系统环境。当前构建框架会使用本次构建的 rdma-core 隔离头文件和库。

3. 工作区内隔离依赖下载命令

当 sudo 需要交互密码、暂时不能安装系统包时,可只下载并解压依赖到工作区。这些操作不会修改系统 dpkg 状态。

3.1 下载依赖包

在仓库根目录执行:

bash 复制代码
mkdir -p downloads build/toolchain

cd downloads

apt-get download \
  cmake libsystemd-dev pandoc python3-docutils valgrind

apt-get download \
  pandoc-data \
  libcmark-gfm-extensions0.29.0.gfm.3 \
  libcmark-gfm0.29.0.gfm.3 \
  docutils-common python3-roman

apt-get download \
  gfortran-12 libgfortran-12-dev libgfortran5

apt-get download libgcc-12-dev

cd ..

3.2 解压到隔离目录

bash 复制代码
for package in downloads/*.deb; do
    dpkg-deb -x "$package" build/toolchain
done

3.3 配置隔离 pandoc

隔离 pandoc 默认仍查找 /usr/share/pandoc,需要指定其实际数据目录:

bash 复制代码
mv build/toolchain/usr/bin/pandoc \
   build/toolchain/usr/bin/pandoc.real

cat > build/toolchain/usr/bin/pandoc <<'EOF'
#!/bin/sh
exec "$(dirname "$0")/pandoc.real" \
  --data-dir="$(dirname "$0")/../share/pandoc/data" "$@"
EOF

chmod +x build/toolchain/usr/bin/pandoc

验证:

bash 复制代码
LD_LIBRARY_PATH="$PWD/build/toolchain/usr/lib/x86_64-linux-gnu" \
  build/toolchain/usr/bin/pandoc -t man -o /dev/null /dev/null

3.4 配置本地 gfortran 和 LTO

bash 复制代码
# OpenMPI configure 默认查找 gfortran。
if [ ! -e build/toolchain/usr/bin/gfortran ]; then
    ln -s gfortran-12 build/toolchain/usr/bin/gfortran
fi

# 当前机器由 gcc-12 包提供的 LTO 组件。
ln -sf /usr/lib/gcc/x86_64-linux-gnu/12/liblto_plugin.so \
  build/toolchain/usr/lib/gcc/x86_64-linux-gnu/12/liblto_plugin.so
ln -sf /usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper \
  build/toolchain/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper
ln -sf /usr/lib/gcc/x86_64-linux-gnu/12/lto1 \
  build/toolchain/usr/lib/gcc/x86_64-linux-gnu/12/lto1

Fortran/LTO 冒烟测试:

bash 复制代码
build/toolchain/usr/bin/gfortran \
  -o build/toolchain/fortran-test \
  -O3 -g -flto=auto -x f95 - \
  <<<'program smoke; print *, "fortran_ok"; end program smoke'

LD_LIBRARY_PATH="$PWD/build/toolchain/usr/lib/x86_64-linux-gnu" \
  build/toolchain/fortran-test

预期输出:fortran_ok。

3.5 使用隔离工具链执行构建

已提供包装脚本 tools/with-local-toolchain.sh:

bash 复制代码
./tools/with-local-toolchain.sh \
  ./ofed-build build --components rdma-core \
  --profile release --jobs 8 --skip-depcheck

--skip-depcheck 在这里用于跳过"软件包没有登记到系统 dpkg 数据库"的检查。编译实际需要的头文件、库和工具由 build/toolchain 提供。

4. 源码导入与补充命令

4.1 初次导入原始 OFED 源码

以下命令用于空的源码工作树;当前已经执行完成,不应在现有树上盲目重复执行:

bash 复制代码
python3 tools/import_ofed.py \
  MLNX_OFED_SRC-debian-24.10-5.1.6.1.tgz

该命令完成:

  • 解压 SOURCES/ 中全部 29 个嵌套源码包;
  • 将项目放入 src/<project>-<version>/;
  • 将原厂安装器和清单放入 vendor/;
  • 生成 components/import-manifest.json;
  • 保存原归档及各嵌套包的 SHA256;
  • 检查危险路径、绝对路径和特殊文件;
  • 不修改原始 .tgz 文件。

4.2 下载同版本补充源码

bash 复制代码
mkdir -p downloads

curl -fL --retry 3 \
  -o downloads/multiperf-3.0.tar.gz \
  https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-5.1.6.1/SRPMS/multiperf-3.0.tar.gz

curl -fL --retry 3 \
  -o downloads/ofed-docs-24.10.tar.gz \
  https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-5.1.6.1/SRPMS/ofed-docs-24.10.tar.gz

预期 SHA256:

text 复制代码
b9c43501a200c20ee5af7614da324372cd9f1fbd2fc3d7dfd775a9164bf3a68e  multiperf-3.0.tar.gz
41b7d01b1ca5d07d59b93f059ca8b1e2b65ccc19ca4dd3472215f933d1a21d30  ofed-docs-24.10.tar.gz

导入补充源码:

bash 复制代码
python3 tools/import_supplements.py

该脚本可重复检查已导入项目,不会重复覆盖目录。

4.3 未下载或替代的源码

以下项目没有用其他版本冒充精确版本:

  • opensm:目标为 5.21.12.MLNX20250617.f74e01b8,精确源码未获得;
  • ibutils2、dpcp、clusterkit、hcoll、sharp:精确源码未获得;
  • mlnx-dpdk:清单中的公开 commit 当前下载返回 404;
  • libxlio:源码存在,但当前版本无条件要求缺失的 DPCP 头文件和库,因此标记为构建阻塞;
  • mlnx-en:可以从 mlnx-ofed-kernel 派生,未重复导入相同代码。

纯 Ethernet/RoCE 不需要 OpenSM;InfiniBand 模式才需要子网管理器。

5. 统一构建命令

5.1 查看项目和依赖

bash 复制代码
./ofed-build list
./ofed-build check --components core --profile release

5.2 Dry run

bash 复制代码
./ofed-build build \
  --components core \
  --profile release \
  --kernel-mode modules \
  --dry-run

5.3 构建 Release

bash 复制代码
./ofed-build build \
  --components core \
  --profile release \
  --kernel-mode modules \
  --jobs 16 \
  --reuse

5.4 构建 Debug

bash 复制代码
./ofed-build build \
  --components core \
  --profile debug \
  --kernel-mode modules \
  --jobs 16 \
  --reuse

--reuse 会复用相同 profile 下已有产物和构建工作区;需要强制重新构建时去掉该参数。

5.5 构建全部当前可用项目

bash 复制代码
./ofed-build build \
  --components all-available \
  --profile release \
  --jobs 16 \
  --reuse

注意:openvswitch 和 rshim 的可选依赖尚未全部安装;libxlio 和精确源码缺失项目不会混入 all-available。

5.6 产物和日志

text 复制代码
dist/release/              # Release DEB/DDEB、buildinfo、changes、artifacts.json
dist/debug/                # Debug DEB/DDEB、buildinfo、changes、artifacts.json
build/release/logs/        # Release 各项目完整构建日志
build/debug/logs/          # Debug 各项目完整构建日志
build/<profile>/work/      # 构建副本及中间文件
build/<profile>/ofa_kernel/# 主内核模块的 Module.symvers/兼容头文件 staging
build/toolchain/           # 隔离构建依赖,不纳入 Git

6. 安装模拟与实际安装边界

当前验证过的 Release 安装模拟命令:

bash 复制代码
./ofed-build install \
  --components kernel,core,hpc,libvma,sockperf,mlx-steering-dump \
  --profile release

结果:81 个新包、0 个删除包、无依赖错误。

install 默认只做 apt-get -s 模拟。只有显式增加 --execute 才会真正安装;本次未执行实际安装。

正式安装前仍需:

  1. 在维护窗口操作,并准备本地或带外控制台;
  2. 保存当前包清单和网络配置;
  3. 检查将替换的 RDMA 用户态库和内核模块;
  4. 理解 DKMS 与当前内核专用 modules 包的区别;
  5. 不同时安装 Debug 和 Release;
  6. 不自动启用 OpenSM 或更新固件。

7. 文件和目录修改记录

7.1 源码与清单

路径 内容
src/ 原 29 个项目及补充的 multiperf、ofed-docs 完整源码
vendor/ 原厂 install.pl、common.pl、uninstall.sh、BUILD_ID、LICENSE
components/import-manifest.json 原归档、29 个嵌套包的版本、目录、文件数和 SHA256
components/supplements.json 补充项目的 ready、derived、blocked 状态及来源
components/build-config.json 构建分组、依赖闭包、内核项目、运行依赖及构建阻塞项

7.2 统一构建框架

路径 修改内容
ofed-build 顶层命令入口
tools/ofed_build.py 实现 list、check、build、install,以及 profile、依赖、staging、日志和产物校验
tools/import_ofed.py 原始 OFED 安全导入,后增加可执行权限
tools/import_supplements.py 补充源码校验和导入,后增加可执行权限
tools/with-local-toolchain.sh 隔离依赖环境变量和命令包装
packaging/multiperf/debian/ 为没有 Debian 元数据的 multiperf 增加本地 DEB 打包
.gitignore 忽略原归档、downloads、build、dist、Python 缓存和 opencode_session.txt

7.3 源码修改原则

src/ 中的基线源码没有被构建过程直接修改。

所有 profile 专用修改都发生在:

text 复制代码
build/<profile>/work/<project>/<source-tree>

即先复制源码,再修改构建副本,避免污染 Git 中的原始源码。

8. Debug/Release 具体修改内容

8.1 通用 profile

Debug 使用:

  • DEB_BUILD_OPTIONS="parallel=<jobs> noopt";
  • CFLAGS/CXXFLAGS 增加 -O0 -g3 -fno-omit-frame-pointer;
  • CPPFLAGS 增加 -UNDEBUG;
  • 项目自身支持的 debug 配置另行启用。

Release 保留各项目原厂优化配置,不强制替换为统一的非厂商参数。

8.2 项目级修改

项目 构建副本中的处理
rdma-core Debug 将 CMAKE_BUILD_TYPE=Release 改为 Debug
ibarr Debug 显式增加 CMake configure override,使用 CMAKE_BUILD_TYPE=Debug
sockperf Debug 使用 -O0 -g3,并显式传入 --enable-debug
multiperf 修正原厂强制 -O3 对 Debug 的覆盖,并增加本地 DEB 打包
UCX Release 使用 configure-release-mt;Debug 使用 debug/assertions/params-check/logging/frame-pointer 配置
OpenMPI 使用 mellanox_debug=yes 启用原厂 Debug 路径,并修正 valgrind、UCX 和 Fortran/LTO 路径
内核项目 默认构建当前内核专用 modules;Debug 设置 MLNX_KO_NO_STRIP=1 保留调试信息
VMA/XLIO 保留原厂同时构建普通库和 debug 库的逻辑;XLIO 另因 DPCP 缺失被阻塞

9. 依赖和 staging 修复内容

9.1 独立内核模块

独立模块原先固定查找 /usr/src/ofa_kernel。现改为:

  • 先构建 mlnx-ofed-kernel;
  • 在 build/<profile>/ofa_kernel/<arch>/<kver> 建立到其构建目录的链接;
  • 使用该目录中的 Module.symvers、configure.mk.kernel 和兼容头文件;
  • 不向 /usr/src 写入文件。

9.2 rdma-core 上层项目

使用 build/<profile>/work/rdma-core/.../debian/tmp 中的内容,设置:

  • CPPFLAGS、LDFLAGS;
  • LIBRARY_PATH、LD_LIBRARY_PATH;
  • PKG_CONFIG_PATH;
  • CMAKE_PREFIX_PATH、CMAKE_INCLUDE_PATH、CMAKE_LIBRARY_PATH。

这样无需提前安装或替换系统 RDMA 库,即可编译 perftest、multiperf、ibarr、ibsim、UCX、VMA 等项目。

9.3 Debian 运行依赖

dh_shlibdeps 无法识别尚未安装到系统 dpkg 数据库的隔离库,因此:

  • 对相应项目使用 --ignore-missing-info,仅忽略"库属于哪个已安装系统包"的检查;
  • 在 debian/control 的构建副本中显式补充正确运行依赖,例如:
    • libibverbs1
    • libibumad3
    • librdmacm1
    • ibverbs-providers
    • ucx
    • openmpi

生成的 DEB 仍保留正确的安装依赖关系。

9.4 UCX 和 OpenMPI 特殊修复

  • UCX 的 --with-rdmacm、--with-verbs 指向本次 RDMA staging 的 usr 前缀;
  • 删除 staging 中写死 /usr/lib 的 UCX .la 文件,避免 libtool 读取错误的绝对路径;
  • OpenMPI 使用 mellanox_debug 控制 Debug,而不是仅依赖通用 CFLAGS;
  • 修正 OpenMPI 的 valgrind、UCX、Fortran 和 LTO 路径;
  • mpitests 修正原厂 Makefile 对环境变量 PWD 的依赖;
  • 将 MPI_STAGE_HOME(构建时 MPI 位置)与 MPIHOME(最终 /usr/mpi/... 安装前缀)分离;
  • 使用 OPAL_PREFIX 让 MPI wrapper 在隔离目录中找到配置、头文件和库。

9.5 其他项目

  • ibdump:在没有 MFT 头文件时使用 WITHOUT_FW_TOOLS=yes,因此当前包不包含 MFT 固件工具相关功能。
  • libxlio:不做大规模上游逻辑篡改,明确标记为缺少 DPCP 的阻塞项目。

10. 已完成双配置构建的 27 个项目

text 复制代码
fwctl
ibarr
ibdump
ibsim
iser
isert
kernel-mft
knem
libvma
mlnx-ethtool
mlnx-iproute2
mlnx-nfsrdma
mlnx-nvme
mlnx-ofed-kernel
mlnx-tools
mlx-steering-dump
mpitests
multiperf
ofed-scripts
openmpi
perftest
rdma-core
sockperf
srp
ucx
xpmem
xpmem-lib

验证结果:

  • 54 份 artifacts.json;
  • 268 个构建产物全部通过 SHA256 复核;
  • 内核模块版本为 24.10-5.1.6,vermagic 与当前内核一致;
  • Debug 主内核模块包约 70.8 MB,Release 约 2.6 MB;
  • Release 主模块无 .debug 段,Debug 主模块保留完整调试段;
  • rdma-core 分别为 CMAKE_BUILD_TYPE=Release 和 Debug;
  • sockperf Debug 确认为 -O0 -g3,且 #define DEBUG 生效;
  • multiperf Release 保持 -O3,Debug 为 -O0 -g3;
  • Release 安装模拟通过。

11. 尚未完成或明确排除的内容

项目 状态
opensm 等待 NVIDIA 精确版本源码,未用 3.3.24 替代
ibutils2 等待精确源码
dpcp 等待精确源码,同时阻塞 libxlio
clusterkit 等待精确源码
hcoll 等待精确源码
sharp 等待精确源码
mlnx-dpdk 清单中的 commit 当前无法公开下载
libxlio 源码存在,但缺少必需的 DPCP,未强行修改上游绕过
openvswitch 可选依赖未全部安装,本次未构建
rshim BlueField 相关可选依赖未全部安装,本次未构建
ofed-docs 数据/文档项目,不需要编译
mlnx-en 可由现有内核源码派生,未重复导入

12. Git 记录

text 复制代码
9bec41f1 Import MLNX_OFED 24.10 source snapshot
8c06e5c1 Add unified OFED build profiles

第一次提交保存原始源码、补充源码、清单和分析文档;第二次提交保存已验证的统一构建框架、项目配置、multiperf 打包和工具链脚本。

原始 .tgz、下载目录、构建目录和产物目录均未重复提交到 Git。

13. OpenSM 的真实下载、安装和基于源码的接入方式

13.1 当前源码构建流程会不会安装 OpenSM

当前不会。

components/supplements.json 中 opensm 的状态仍为 blocked,原因是没有取得 NVIDIA 精确版本源码:

text 复制代码
opensm-5.21.12.MLNX20250617.f74e01b8-0.1.2410325.src.rpm

因此:

  • ./ofed-build build --components opensm 会明确报错并停止;
  • core、all-available 和当前安装模拟均不包含 OpenSM;
  • 不会用 Ubuntu 的 opensm 3.3.23 或上游 3.3.24 静默替代;
  • 已构建的 27 个项目可以独立安装,但不会自动把 OpenSM 加入系统。

如果只需要 Ethernet/RoCE,这不影响基本使用。若使用 InfiniBand,则仍需在子网中指定节点运行一个 Subnet Manager。

13.2 已实际下载的官方同版本 OpenSM 包

下载目录:downloads/opensm/。

已实际下载并检查以下 6 个 DEB:

文件 SHA256
libibumad3_2410mlnx54-1.2410068_amd64.deb 69a28c6f829a82284b0836388b90ca444d8b1820021be7be7d0b1ab26c291ac2
libibumad-dev_2410mlnx54-1.2410068_amd64.deb 82aeb650d50890238c5bb0ffdd3ef23b170516499622525ae657c9de30f790e8
libopensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb e07651069a127c6377033207f7e8d8cb05c4edd9adbdec9c96778cbfe46c533e
libopensm-devel_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb 20faed6b663ce37881dbb911bd115b98f8f08155359314791cfacedebc1ea55c
opensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb 4652f5dbc5e00f634fd53d344c1da44017281af043f86b6b7d85b46b68a5dcc6
opensm-doc_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb e2345ccd2aa8d7735dfab24c174a4c6b3a021dcba02b7abec00bf0be8dced224

可复用的实际下载命令如下。--continue-at - 用于网络较慢时断点续传:

bash 复制代码
mkdir -p downloads/opensm

base_url="https://linux.mellanox.com/public/repo/mlnx_ofed/24.10-5.1.6.1/ubuntu22.04/amd64"

for package in \
  "opensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
  "libopensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
  "libopensm-devel_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
  "opensm-doc_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
  "libibumad3_2410mlnx54-1.2410068_amd64.deb" \
  "libibumad-dev_2410mlnx54-1.2410068_amd64.deb"
do
    curl --fail --location --silent --show-error \
      --continue-at - --retry 2 --max-time 600 \
      --output "downloads/opensm/$package" \
      "$base_url/$package" || exit 1
done

sha256sum downloads/opensm/*.deb

这些是官方预编译二进制包,不是 OpenSM 源码。它们可以用于同版本运行安装,但不能据此声称完成了 OpenSM 的源码重建。

13.3 实际检查到的依赖和安装文件

根据 dpkg-deb -f 的真实包元数据:

包 运行依赖及用途
libibumad3 仅依赖 libc6;提供 libibumad.so.3
libopensm 依赖 libc6、libibumad3 (>= 1.3.9);提供 OpenSM 库
opensm 依赖同版本 libopensm、libc6、libgcc-s1、libstdc++6
libibumad-dev 开发头文件和静态库,依赖同版本 libibumad3
libopensm-devel OpenSM 开发文件,依赖同版本 libopensm
opensm-doc OpenSM 文档,无额外运行依赖

最小运行安装只需要:

text 复制代码
libibumad3 + libopensm + opensm

开发包和文档包不是运行 OpenSM 的必需项。

实际包内文件包括:

text 复制代码
/usr/sbin/opensm
/usr/lib/libopensm.so.31.0.1
/usr/lib/libosmcomp.so.12.1.0
/usr/lib/libosmvendor.so.9.0.0
/usr/lib/x86_64-linux-gnu/libibumad.so.3.3.54.0
/usr/lib/systemd/system/opensmd.service
/usr/lib/systemd/system/opensmd@.service
/etc/opensm/
/etc/logrotate.d/opensm

opensmd.service 使用 /usr/sbin/opensm 启动。多实例模板 opensmd@.service 使用:

text 复制代码
/usr/etc/opensm/opensm%I.conf

13.4 已执行的版本验证和安装模拟

没有安装到系统前,先在工作区解压并实际运行了二进制:

bash 复制代码
mkdir -p build/verify/opensm

for package in downloads/opensm/*.deb; do
    dpkg-deb -x "$package" build/verify/opensm
done

LD_LIBRARY_PATH="$PWD/build/verify/opensm/usr/lib:$PWD/build/verify/opensm/usr/lib/x86_64-linux-gnu" \
  build/verify/opensm/usr/sbin/opensm --version

实际输出:

text 复制代码
-------------------------------------------------
OpenSM 5.21.12.MLNX20250617.f74e01b8
Command Line Arguments:

最小安装模拟结果:

text 复制代码
0 upgraded, 3 newly installed, 0 to remove and 468 not upgraded.

安装全部 6 个包的模拟结果:

text 复制代码
0 upgraded, 6 newly installed, 0 to remove and 468 not upgraded.

两种模拟均未发现依赖错误,也没有需要删除的现有包。

13.5 可实际执行的安装命令

方式 A:全部使用 NVIDIA 官方同版本二进制包
bash 复制代码
sudo apt install \
  "$PWD/downloads/opensm/libibumad3_2410mlnx54-1.2410068_amd64.deb" \
  "$PWD/downloads/opensm/libopensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
  "$PWD/downloads/opensm/opensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb"

如需开发文件和文档,再执行:

bash 复制代码
sudo apt install \
  "$PWD/downloads/opensm/libibumad-dev_2410mlnx54-1.2410068_amd64.deb" \
  "$PWD/downloads/opensm/libopensm-devel_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
  "$PWD/downloads/opensm/opensm-doc_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb"
方式 B:使用本仓库源码构建的 libibumad3,配合官方 OpenSM 二进制

本仓库已经构建了相同版本的 libibumad3。其组合安装模拟也已通过,结果同样是 3 个新包、0 个删除包:

bash 复制代码
sudo apt install \
  "$PWD/dist/release/rdma-core/libibumad3_2410mlnx54-1.2410068_amd64.deb" \
  "$PWD/downloads/opensm/libopensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb" \
  "$PWD/downloads/opensm/opensm_5.21.12.MLNX20250617.f74e01b8-0.1.2410325_amd64.deb"

方式 B 只有 libibumad3 来自本次源码构建,libopensm 和 opensm 仍是官方二进制,因此也不是完整的 OpenSM 源码安装。

截至本节更新时,尝试非交互安装返回:

text 复制代码
sudo: a password is required

所以上述系统安装命令尚未在本机实际完成。需要用户在本机交互终端输入 sudo 密码执行。安装后可验证:

bash 复制代码
opensm --version
dpkg-query -W opensm libopensm libibumad3
systemctl status opensmd

13.6 精确源码到位后的源码构建接入方式

若后续从 NVIDIA 支持渠道取得精确 SRPM,应在工作区单独解包,例如:

bash 复制代码
mkdir -p downloads/opensm-src
cd downloads/opensm-src
rpm2cpio ../opensm/opensm-5.21.12.MLNX20250617.f74e01b8-0.1.2410325.src.rpm \
  | cpio -idmv
cd ../..

注意:当前该 SRPM 在官方公开索引和直接 URL 中均返回 404,所以上述命令只有在用户先取得并放入该文件后才能执行。

仅放入源码还不够,还需完成以下接入:

  1. 在 components/supplements.json 中登记精确版本、归档 SHA256 和 ready 状态;
  2. 通过 tools/import_supplements.py 导入到 src/opensm-<version>/;
  3. 在 components/build-config.json 中加入 opensm 到目标组件组,并声明 opensm -> rdma-core 的构建依赖;
  4. 准备匹配的 Debian 打包元数据,生成 opensm、libopensm、libopensm-devel、opensm-doc;
  5. 先构建 rdma-core,使用其 staging 中的 libibumad-dev 头文件和库,再构建 OpenSM;
  6. 分别生成 Release 和 Debug 包,再执行安装模拟和实际安装。

预期构建顺序:

text 复制代码
rdma-core
  -> libibumad-dev staging
  -> opensm / libopensm / libopensm-devel / opensm-doc

预期构建命令形式为:

bash 复制代码
./ofed-build build --components rdma-core,opensm \
  --profile release --jobs 16 --reuse

./ofed-build build --components rdma-core,opensm \
  --profile debug --jobs 16 --reuse

./ofed-build install --components opensm --profile release

这些命令只有在 OpenSM 源码及打包元数据真正接入后才可使用;当前直接执行会按设计报告 opensm is blocked。

13.7 安装后是否立即启用 OpenSM

不要仅因为安装了包就在所有主机上启用 OpenSM。

  • 纯 Ethernet/RoCE 不需要启动 OpenSM;
  • InfiniBand 子网需要一个合适的 Subnet Manager,可以由交换机或其他节点提供;
  • 只有确认本机承担 SM 角色、端口处于 InfiniBand 模式且 fabric 配置正确后,才在指定节点启用:
bash 复制代码
sudo systemctl enable --now opensmd

安装 OpenSM 二进制不等于 InfiniBand 子网已经可用,还需正确的内核驱动、IPoIB/端口配置和子网规划。

相关推荐
Smoothcloud润云10 小时前
远程纳管GPU怎么安全升级?驱动、组件灰度与回滚实战
人工智能·深度学习·安全·gpu算力·gpu·数据库管理员
鲨鱼辣钊13 小时前
KVM显卡直通实战_RTX4090分时复用
gpu·kvm·vfio
Eloudy13 小时前
从 huggingFace 下载大模型命令备忘
llm·gpu·rdma
Smoothcloud润云1 天前
GPU远程纳管安全吗?最小权限、网络边界与日志审计实战
服务器·网络·人工智能·安全·gpu算力·gpu
小毕超1 天前
从推理到训练:Intel Ultra 核显 GPU 加速 YOLO 模型训练
pytorch·yolo·gpu·intel
cyf313 天前
半小时玩转RDMA:从零跑通高速网络通信
网络协议·rdma·高速通信·rocev2·wireshark抓包·ai 智算网络·入门实战
墨抒颖 msy.plus3 天前
矩阵、注意力与 GPU:拆解 DeepGEMM 与 FlashMLA
人工智能·llm·gpu·源码解析·1024程序员节·deepseek
gwf2164 天前
RC/UC/UD/XRC四种传输模式性能对比与实战选型
性能测试·rdma·芯片测试·dpu·roce·智能网卡·perftest
本地化文档4 天前
cutile-rs-book-l10n
rust·gpu·nvidia·cuda·sphinx·crowdin