如何在运行 RHEL 的 Amazon EC2 实例上安装并激活最新的 ENA 驱动程序,以便获得增强型网络支持?

3 分钟阅读
0

我想在 Red Hat Enterprise Linux(RHEL)Amazon Elastic Compute Cloud (Amazon EC2) 实例上使用最新的弹性网络适配器(ENA)驱动程序,以便获得增强型网络支持。

解决方法

若要在 Amazon EC2 实例上安装最新的 ENA 驱动程序,请参阅适用于您的 RHEL 版本的部分。RHEL 操作系统(OS)的某些早期版本不包含 ENA 驱动程序。对于 Nitro 实例,ENA 驱动程序必须更改您的 EC2 实例类型以进行网络连接。

**注意:**在安装或者更新 ENA 驱动程序之前,最佳做法是创建实例的快照

有关如何更新 Linux 驱动程序的更多信息,请参阅 GitHub 网站上的 ENA Linux driver best practices and performance optimization guide

RHEL 版本 7.4 及更高版本

RHEL 版本 7.4 亚马逊机器映像(AMI)和所有更高的 RHEL 版本中都预装了 ENA 增强联网所需的模块。有关更多信息,请参阅在 Linux 实例上启用 Elastic Network Adapter (ENA) 增强联网

低于 7.4 的 RHEL 版本

  1. 运行以下命令以将内核升级到最新版本:

    sudo yum upgrade kernel -y
  2. 停止实例
    **注意:**停止实例时,实例存储卷中的数据会丢失。有关更多信息,请参阅确定实例的根设备类型。请务必备份您想保留在实例存储卷上的所有数据

  3. 运行以下 AWS 命令行界面(AWS CLI)命令:

    aws ec2 modify-instance-attribute --instance-id i-xxxxxxxxxxxxxxxxx --ena-support --region xx-xxxxx-x

    **注意:**如果在运行 AWS CLI 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI

  4. 启动实例

  5. 运行下列命令,以验证 ENA 驱动程序是否已加载到实例上。将 eth0 默认接口名称替换为要检查的接口的名称。如果操作系统使用可预测的网络名称,则网络名称可能会有所不同。

    $ ethtool -i eth0

RHEL 6

**注意:**RHEL 6 不包括 Amazon EC2 生产就绪型 NVMe 驱动程序,您无法升级到 NVME 驱动程序。若要使用基于 Nitro 的实例或者任何具有 NVMe 实例存储卷的实例类型,请升级到 RHEL 7.4 或更高版本。

下载并安装 ENA 驱动程序

  1. 更新内核,然后重启系统,以便最新的内核生效:

    sudo yum upgrade kernel -y && sudo reboot
  2. 安装开发包,以构建与内核匹配的内核模块:

    sudo yum install kernel-devel-$(uname -r) gcc git patch rpm-build wget -y
    cd /usr/src/
    sudo wget https://github.com/amzn/amzn-drivers/archive/master.zip
    sudo unzip master.zip
    cd amzn-drivers-master/kernel/linux/ena
    sudo make
  3. 将模块复制到模块目录:

    sudo cp ena.ko /lib/modules/$(uname -r)/
  4. 重新生成内核模块依赖关系映射文件:

    sudo depmod
  5. 使用 modinfo 命令确认存在 ENA 模块:

    modinfo ena

    modinfo 命令输出显示 ENA 驱动程序信息。
    **注意:**当您在系统上编译并安装 ENA 驱动程序时,其版本可能比 2.2.11g 更新。

    filename:       /lib/modules/2.6.32-754.33.1.el6.x86_64/ena.ko
    version:        2.2.11g
    license:        GPL
    description:    Elastic Network Adapter (ENA)
    author:         Amazon.com, Inc. or its affiliates
    retpoline:      Y
    srcversion:     17C7CD1CEAD3F0ADB3A5E5E
    alias:          pci:v00001D0Fd0000EC21sv*sd*bc*sc*i*
    alias:          pci:v00001D0Fd0000EC20sv*sd*bc*sc*i*
    alias:          pci:v00001D0Fd00001EC2sv*sd*bc*sc*i*
    alias:          pci:v00001D0Fd00000EC2sv*sd*bc*sc*i*
    alias:          pci:v00001D0Fd00000051sv*sd*bc*sc*i*
    depends:        
    vermagic:       2.6.32-754.33.1.el6.x86_64 SMP mod_unload modversions
    parm:           debug:Debug level (0=none,...,16=all) (int)
    parm:           rx_queue_size:Rx queue size. The size should be a power of 2. Max value is 8K
     (int)
    parm:           force_large_llq_header:Increases maximum supported header size in LLQ mode to 224 bytes, while reducing the maximum TX queue size by half.
     (int)
    parm:           num_io_queues:Sets number of RX/TX queues to allocate to device. The maximum value depends on the device and number of online CPUs.
     (int)
  6. net.ifnames=0 附加到 /boot/grub/grub.conf,以关闭网络接口命名:

    sudo sed -i '/kernel/s/$/ net.ifnames=0/' /boot/grub/grub.conf
  7. 停止实例。然后,激活实例级别的增强网络支持。以下示例从 AWS CLI 修改了实例属性:

    aws ec2 modify-instance-attribute --instance-id i-xxxxxxxxxxxxxxxxx --ena-support --region xx-xxxxx-x
  8. 将实例类型更改为 ENA 支持的实例类型之一。

  9. 启动实例,使用 SSH 连接到实例,然后运行 ethtool 命令:

    ethtool -i eth0

    以下示例输出包括 ENA 驱动程序版本:

    driver: ena
    version: 2.2.11g
    firmware-version:
    bus-info: 0000:00:05.0
    supports-statistics: yes
    supports-test: no
    supports-eeprom-access: no
    supports-register-dump: no
    supports-priv-flags: no
    

配置 DKMS 程序,确保将来的内核升级中包含该驱动程序

**注意:**EPEL 存储库中的软件不受 AWS 和 RHEL 的支持。使用动态内核模块支持(DKMS)会导致您的订阅的支持协议无效。

要配置 DKMS 程序,请执行下列操作:

  1. 安装以下 Red Hat Package Manager(rpm)文件:

    sudo yum install https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm -y

    **注意:**有关最新 .rpm 软件包的列表,请参阅 Fedora Project 网站上的 Extra Packages for Enterprise Linux(EPEL)

  2. 运行 install 命令:

    sudo yum install dkms -y
  3. 检测当前版本:

    VER=$( grep ^VERSION /usr/src/amzn-drivers-master/kernel/linux/rpm/Makefile | cut -d' ' -f2 )
  4. 将源文件复制到源目录中:

    sudo cp -a /usr/src/amzn-drivers-master /usr/src/amzn-drivers-${VER}
  5. 创建 DKMS 配置文件,构建并安装 ENA 模块:

    sudo cat <<EOM | sudo tee /usr/src/amzn-drivers-${VER}/dkms.conf
    PACKAGE_NAME="ena"
    PACKAGE_VERSION="$VER"
    CLEAN="make -C kernel/linux/ena clean"
    MAKE="make -C kernel/linux/ena/ BUILD_KERNEL=\${kernelver}"
    BUILT_MODULE_NAME[0]="ena"
    BUILT_MODULE_LOCATION="kernel/linux/ena"
    DEST_MODULE_LOCATION[0]="/updates"
    DEST_MODULE_NAME[0]="ena"
    AUTOINSTALL="yes"
    EOM
    
    sudo dkms add -m amzn-drivers -v $VER
    sudo dkms build -m amzn-drivers -v $VER
    sudo dkms install -m amzn-drivers -v $VER
AWS 官方
AWS 官方已更新 3 个月前