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

上次更新时间:2021 年 9 月 1 日

如何在运行 RHEL 6 或 7 版的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上安装和激活最新版的 Elastic Network Adapter (ENA) 驱动程序以增强网络支持?

简短描述

一些较早版本的 Red Hat Enterprise Linux 操作系统不包含 ENA 驱动程序。对于 Nitro 实例,ENA 驱动程序需要更改您的 EC2 实例类型以进行网络连接。

注意:在继续执行以下解决方案之前,最佳实践是创建实例的快照

解决方法

RHEL 7.4 及更高版本

RHEL 7.4 及更高版本的 AMI 预装了 ENA 增强联网所需的模块。有关详细信息,请参阅在 Linux 实例上启用 ENA 增强联网

低于 7.4 的 RHEL 7

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

sudo yum upgrade kernel -y

2.    停止该实例

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

3.    运行以下 AWS Command Line Interface (AWS CL) 命令:

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 替换为要检查的接口的名称。单个接口的默认名称是 eth0。如果操作系统使用可预测的网络名称,则网络名称可能会有所不同。

$ ethtool -i eth0

RHEL 6

注意:此过程适用于支持 ENA 的早期实例类型。此过程不适用于迁移到基于 Nitro 的实例类型。RHEL 6 不附带 Amazon EC2 生产就绪型 NVME 驱动程序,您无法单独升级到 NVME 驱动程序。如果您想将基于 Nitrol 的或任何实例类型与 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.    停止该实例

8.    激活实例级别的增强网络支持。以下示例从 AWS Command Line Interface (AWS CL) 修改实例的属性。

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

9.    将实例类型更改为 ENA 支持的实例类型之一。

10.    启动实例,使用 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 存储库的软件不受 Red Hat 或 AWS 的支持。
  • 使用 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 软件包的列表,请参阅 EPEL – Fedora 项目维基百科网站

2.    运行安装命令:

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

这篇文章对您有帮助吗?


您是否需要账单或技术支持?