Appearance
服务器配置
本文用于完成集群服务器的硬件、操作系统和 PCIe 虚拟化相关配置。配置前,请先确认服务器型号、使用场景(物理机或虚拟机)以及设备拓扑。
本章目录
配置速查
| 使用场景 | IOMMU | ACS | ATS | 网卡 RO |
|---|---|---|---|---|
| 物理机或非虚拟化环境 | 推荐关闭 | 推荐关闭 | 无需配置 | 保持默认 |
| 虚拟化环境 | 开启 PT 模式 | 开启 | 开启网卡和 GPU 上游 PCIe Bridge 的 ATS | 保持默认开启 |
重要: IOMMU、ACS、ATS 和 RO 需要配套配置。错误的组合可能造成通信性能下降,严重时会导致 GPU 掉卡。
硬件环境
硬件信息确认
配置前需确认以下信息:
- CPU 型号
- PCIe Switch 数量
- GPU 数量
- 网卡数量
- GPU、网卡与 PCIe Switch 之间的拓扑关系
- PCIe Switch 是否开启 VSwitch 功能
CPU 性能模式
CPU 工作模式会显著影响大模型训练和驱动性能,不同服务器对 CPU 模式的设置方式和依赖可能不同。
目前,以下服务器需要将 CPU 模式设置为性能模式(performance):
- 所有 OAM 服务器,包括浪潮、立讯、新华三等机型
- 所有类型的浪潮服务器
1. 查看 CPU 工作模式
bash
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor2. 设置为性能模式
bash
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor注意: 该设置在服务器重启后会失效。如需长期生效,应将其配置为开机自动执行。
VSwitch 模式
部分 PCIe Switch 支持 VSwitch。一个物理 PCIe Switch 开启 VSwitch 后,可以扩展为多个逻辑 PCIe Switch。
VSwitch 会改变设备间的拓扑关系,并可能影响通信性能:
- 对于内部已适配机型,通信库可以屏蔽该影响。
- 对于未适配机型,需要重点评估 VSwitch 对通信性能的影响。
软件环境
操作系统一致性
首先确认当前操作系统是否已经完成适配。未适配的操作系统存在潜在兼容性问题。
集群内所有服务器必须保持以下版本一致:
- 操作系统版本
- Linux 内核版本
查看操作系统与内核信息:
bash
uname -a
防火墙配置
集群内每台服务器的防火墙均应关闭。
Ubuntu 的防火墙通常默认关闭;麒麟 OS、CTyunOS 等系统可执行以下命令:
bash
sudo systemctl stop firewalld
sudo systemctl disable firewalld主机名配置
集群内每台服务器的 hostname 必须唯一。
原因: 部分深度学习框架会将相同
hostname的 GPU 判断为同一台机器上的设备,可能导致 GPU 设备编号初始化错误。
1. 查看主机名
bash
hostname
2. 修改 Ubuntu 主机名
编辑
/etc/hostname,将内容修改为期望的主机名。执行以下命令刷新主机名:
bashsudo hostname -F /etc/hostname退出并重新进入命令行终端。
其他操作系统请参考对应发行版的主机名配置方法。
虚拟化配置
服务器包含多项虚拟化相关配置,在物理机和虚拟机场景中容易混淆。本节介绍 IOMMU、ACS、ATS 和 RO 的概念及推荐组合。
核心概念
IOMMU
IOMMU(I/O Memory Management Unit,I/O 内存管理单元)用于管理和控制外围设备(网卡、GPU、NVMe 等)对系统内存的直接访问(DMA),并提供内存访问隔离。
IOMMU 常见三种模式:
- DMA/nopt 模式
- Passthrough 模式
- 禁用模式
目前只有虚拟化场景需要开启 IOMMU,通常使用 Passthrough 模式:
text
iommu=pt或:
text
iommu.passthrough=1ACS
ACS(Access Control Services,访问控制服务)用于实现虚拟化环境下 PCIe 设备的安全隔离。
ACS 会强制 PCIe 数据包通过上游端口路由到 CPU Root Complex,从而禁止 PCIe Endpoint 之间直接进行物理 P2P 通信,因此可能影响所有 PCIe 设备间的通信性能。
ATS
ATS(Address Translation Services,地址翻译服务)允许 PCIe 终端设备通过 ATC(Address Translation Cache)缓存 IOMMU 的地址转换结果。
设备发起 DMA 请求时可以直接使用转换后的 IOVA(I/O Virtual Address),减少 IOMMU 查表开销并提升吞吐量。
如果 PCIe Switch 支持 ACS 的 Direct Translated P2P 功能,使用 ATS 转换后的地址可以直接进行 P2P 通信,无需经过 Root Complex,从而降低开启 ACS 带来的通信影响。
PCIe RO
PCIe RO(Relaxed Ordering,松弛排序)允许设备在保证数据正确的前提下,不严格按照顺序执行内存读写事务,以提升总线利用率和吞吐性能。
PCIe 设备的 RO 通常默认关闭,使用强排序模型。在网卡和 GPU 并发工作的场景下,一般需要开启 GPU 和网卡的 RO。当前 Mellanox 网卡默认开启 RO。
推荐配置
物理机或非虚拟化环境
- 推荐关闭 IOMMU。
- 推荐关闭 ACS。
- 无需配置 ATS 或 RO。
在开启 IOMMU PT 模式、同时关闭 ACS 的情况下,通常也不会明显影响物理机的单机或多机通信性能。
虚拟化环境
- 开启 IOMMU PT 模式。
- 开启 ACS。
- 开启网卡和 GPU 上游 PCIe Bridge 的 ATS。
- 保持网卡 RO 默认开启。
相关配置参考:
组合影响
下表为 IOMMU、ACS、ATS 和网卡 RO 在不同组合下的实际表现,测试环境为 C500。
| IOMMU | ACS | ATS | 网卡 RO | 影响 | 备注 |
|---|---|---|---|---|---|
| 关闭 | 关闭 | 无需配置 | 默认开启 | 正常性能 | 常规使用场景,推荐配置 |
| 关闭 | 关闭 | 无需配置 | 关闭 | 多机网络通信性能下降 | — |
| PT 模式 | 关闭 | 默认关闭 | 默认开启 | 接近正常性能 | — |
| PT 模式 | 开启 | 默认关闭 | 默认开启 | 多机网络通信可能导致掉卡 | — |
| PT 模式 | 开启 | 默认关闭 | 关闭 | 多机网络通信性能很差 | — |
| PT 模式 | 开启 | 开启 | 默认开启 | 部分虚拟化通信性能损失 | 属于正常损失,推荐配置 |
| PT 模式 | 开启 | 开启 | 关闭 | 多机网络通信可能导致掉卡 | — |
| nopt 模式 | 开启 | 默认关闭 | 关闭 | 多机网络通信性能很差 | — |
| nopt 模式 | 开启 | 默认关闭 | 默认开启 | 多机网络通信可能导致掉卡 | — |
IOMMU 配置
查询 IOMMU 状态
IOMMU 硬件功能主要通过以下方式控制:
- BIOS 配置
- Linux 内核参数配置
常见内核参数如下:
| 参数 | 作用 |
|---|---|
iommu=off | 禁用 IOMMU |
intel_iommu=off | 在 Intel 平台禁用 IOMMU |
amd_iommu=off | 在 AMD 平台禁用 IOMMU |
iommu=pt | 使用 IOMMU Passthrough 模式 |
iommu.passthrough=1 | 使用 IOMMU Passthrough 模式 |
由于不同 Linux 发行版的内核配置不同,不能仅通过内核启动参数准确判断 IOMMU 的实际工作状态。即使内核参数中没有 IOMMU 相关配置,IOMMU 也可能处于开启状态。
1. 判断 IOMMU 是否开启
bash
ls /sys/class/iommu结果判断:
- 目录为空:IOMMU 已禁用。
- 目录非空:IOMMU 已开启,需要继续确认工作模式。
2. 判断 IOMMU 工作模式
IOMMU 开启后可能处于以下模式:
DMA/nopt:宿主机上的驱动会使用 IOMMU,不建议使用。IDENTITY/Passthrough:宿主机驱动不使用 IOMMU,虚拟机使用 IOMMU。
查看指定 GPU 的 IOMMU Group 类型:
bash
cat /sys/bus/pci/devices/XXXX:XX:XX.X/iommu_group/type其中 XXXX:XX:XX.X 为 GPU 的 BDF。结果含义:
- 输出
DMA:当前为 DMA 模式。 - 输出
identity:当前为 IDENTITY 模式。
查看内核启动参数:
bash
cat /proc/cmdlinePT 模式示例:

nopt 模式示例:

在操作系统中关闭 IOMMU
Ubuntu 系统可按以下步骤关闭 GRUB 中的 IOMMU 配置:
编辑 GRUB 配置文件:
bashsudo vim /etc/default/grub注释或删除包含以下参数的配置:
textiommu=pt iommu=nopt intel_iommu=on amd_iommu=on部分机器(例如海光 CPU 服务器)还需增加:
textGRUB_CMDLINE_LINUX="iommu=off"更新 GRUB 并重启服务器:
bashsudo update-grub sudo reboot
麒麟 OS、CTyunOS 等 Linux 系统目前未发现需要进行该项配置,可跳过此步骤。
PCIe ACS 配置
PCIe ACS(Access Control Services)会强制 PCIe 流量经过 Root Complex,影响 PCIe P2P 性能,严重时性能可能下降 90%。一般应关闭 ACS;如业务必须开启,则需结合 ATS、RO 等配置尽量降低影响。
场景要求:
- 物理机或 Docker 环境:关闭物理机操作系统的 PCIe ACS。
- 虚拟机环境:虚拟化隔离依赖 ACS,需要开启物理机操作系统的 ACS。
关闭 ACS 时,还应检查服务器 BIOS。不同厂商的设置路径不同,相关选项通常包括:
PCIe ACS- x86 平台的
IOMMU - ARM 平台的
SMMU
如无法确认具体设置方法,请联系服务器厂商 FAE。

检查物理机 ACS 配置
执行以下命令:
bash
sudo lspci -vvv | grep ACSCtlACS 已开启
如果输出中出现多个 ACSCtl: SrcValid+,表示 ACS 功能已开启,需要按照后续方法关闭。
请注意判断符号是
+,不是-,并且需要出现多个SrcValid+。

ACS 已关闭
如果输出中只有一个或没有 ACSCtl: SrcValid+,表示 ACS 已关闭。

在服务器 BIOS 中关闭 ACS
不同服务器型号以及不同版本的 BMC/BIOS,ACS 配置步骤可能不同,应优先参考服务器厂商的指导文档。
本文仅提供 H3C R5300G6 x86 机型示例。其他主流服务器可参考关闭 ACS 步骤。
H3C R5300G6 x86 机型操作:登录 BMC,进入 BIOS 配置并关闭 PCIe ACS。

x86 平台临时关闭 ACS
如需快速验证 ACS 对性能的影响,可执行以下脚本临时关闭 ACS。
注意: 该方式在服务器重启后失效,且不适用于飞腾 ARM 平台。
bash
#!/bin/bash
for BDF in $(lspci -d "*:*:*" | awk '{print $1}'); do
# 如果设备不支持 ACS,则跳过。
if ! sudo setpci -v -s "${BDF}" ECAP_ACS+0x6.w > /dev/null 2>&1; then
continue
fi
sudo setpci -v -s "${BDF}" ECAP_ACS+0x6.w=0000
done建议: 临时验证完成后,应通过 BIOS 或厂商推荐的永久配置方式处理 ACS,避免服务器重启后配置恢复。