Skip to content

服务器配置 ​

本文用于完成集群服务器的硬件、操作系统和 PCIe 虚拟化相关配置。配置前,请先确认服务器型号、使用场景(物理机或虚拟机)以及设备拓扑。

本章目录 ​

配置速查 ​

使用场景IOMMUACSATS网卡 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_governor

2. 设置为性能模式 ​

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 主机名 ​

  1. 编辑 /etc/hostname,将内容修改为期望的主机名。

  2. 执行以下命令刷新主机名:

    bash
    sudo hostname -F /etc/hostname
  3. 退出并重新进入命令行终端。

其他操作系统请参考对应发行版的主机名配置方法。

虚拟化配置 ​

服务器包含多项虚拟化相关配置,在物理机和虚拟机场景中容易混淆。本节介绍 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=1

ACS ​

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。

IOMMUACSATS网卡 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/cmdline

PT 模式示例:

IOMMU PT 模式查询结果

nopt 模式示例:

IOMMU nopt 模式查询结果

在操作系统中关闭 IOMMU ​

Ubuntu 系统可按以下步骤关闭 GRUB 中的 IOMMU 配置:

  1. 编辑 GRUB 配置文件:

    bash
    sudo vim /etc/default/grub
  2. 注释或删除包含以下参数的配置:

    text
    iommu=pt
    iommu=nopt
    intel_iommu=on
    amd_iommu=on
  3. 部分机器(例如海光 CPU 服务器)还需增加:

    text
    GRUB_CMDLINE_LINUX="iommu=off"
  4. 更新 GRUB 并重启服务器:

    bash
    sudo 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。

PCIe ACS BIOS 配置示例

检查物理机 ACS 配置 ​

执行以下命令:

bash
sudo lspci -vvv | grep ACSCtl

ACS 已开启 ​

如果输出中出现多个 ACSCtl: SrcValid+,表示 ACS 功能已开启,需要按照后续方法关闭。

请注意判断符号是 +,不是 -,并且需要出现多个 SrcValid+。

ACS 开启状态示例

ACS 已关闭 ​

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

ACS 关闭状态示例

在服务器 BIOS 中关闭 ACS ​

不同服务器型号以及不同版本的 BMC/BIOS,ACS 配置步骤可能不同,应优先参考服务器厂商的指导文档。

本文仅提供 H3C R5300G6 x86 机型示例。其他主流服务器可参考关闭 ACS 步骤。

H3C R5300G6 x86 机型操作:登录 BMC,进入 BIOS 配置并关闭 PCIe ACS。

H3C R5300G6 关闭 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,避免服务器重启后配置恢复。