Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
如何在运行 RHEL 的 EC2 实例上安装并激活最新的 ENA 驱动程序,以便获得增强型网络支持?
我想使用最新的弹性网络适配器 (ENA) 驱动程序来获得增强型网络支持。我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例在 Red Hat Enterprise Linux (RHEL) 上运行。
解决方案
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
RHEL 操作系统 (OS) 的某些早期版本不包含 ENA 驱动程序。对于 Nitro 实例,如果您更改用于网络连接的 EC2 实例类型,则必须更新 ENA 驱动程序。要在您的 EC2 实例上安装最新的 ENA 驱动程序,请根据您的 RHEL 版本完成以下步骤。
在安装或更新 ENA 驱动程序之前,最佳做法是创建实例的 Amazon Elastic Block Store (Amazon EBS) 卷的快照。
有关如何更新 Linux 驱动程序的详细信息,请参阅 GitHub 网站上的 ENA Linux driver best practices and performance optimization guide(《ENA Linux 驱动程序最佳实践和性能优化指南》)。
**重要事项:**当您停止实例时,Amazon EC2 会删除实例存储卷中的所有数据。要检查您的根设备类型,请参阅确定 AMI 的根设备类型。如果要保留存储在实例存储卷上的数据,则必须备份这些数据。
RHEL 7.4 及更高版本
默认情况下,RHEL 7.4 及更高版本的亚马逊机器映像 (AMI) 安装了用于增强联网的 ENA 驱动程序。有关详细信息,请参阅在 EC2 实例上使用 ENA 启用增强联网功能。
低于 7.4 的 RHEL 版本
要安装 ENA 驱动程序,请完成以下步骤:
-
运行以下命令以将内核升级到最新版本:
sudo yum upgrade kernel -y -
停止实例。
-
要更新实例,请运行以下 modify-instance-attribute AWS CLI 命令:
aws ec2 modify-instance-attribute --instance-id exampleID --ena-support --region exampleRegion**注意:**请将 exampleID 替换为您的实例 ID,将 exampleRegion 替换为您的 AWS 区域。
-
启动实例。
-
要验证您是否在实例上正确安装了 ENA 驱动程序,请运行以下命令:
ethtool -i eth0**注意:**请将 eth0 替换为要检查的接口的名称。如果操作系统使用可预测的网络名称,则网络名称可能会有所不同。有关详细信息,请参阅 Red Hat 网站上的 Understanding the predictable network interface device names(了解可预测的网络接口设备名称)。
RHEL 6
**注意:**RHEL 6 不包括 Amazon EC2 生产就绪型 NVMe 驱动程序,您无法升级到 NVMe 驱动程序。要使用基于 Nitro 的实例或具有 NVMe 实例存储卷的实例类型,请升级到 RHEL 7.4 或更高版本。
下载并安装 ENA 驱动程序
完成以下步骤:
-
要更新内核并重启系统以使用最新的内核,请运行以下命令:
sudo yum upgrade kernel -y && sudo reboot -
要安装开发包以构建与内核匹配的内核模块,请运行以下命令:
sudo yum install kernel-devel-$(uname -r) gcc git patch rpm-build wget -ycd /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 -
要将模块复制到模块目录,请运行以下命令:
sudo cp ena.ko /lib/modules/$(uname -r)/ -
要重新生成内核模块依赖关系映射文件,请运行以下命令:
sudo depmod -
要确认 ENA 模块是否存在,请运行以下命令:
modinfo ena当您在系统上编译并安装 ENA 驱动程序时,其版本可能会高于 2.2.11g。命令输出将显示 ENA 驱动程序信息。
输出示例:filename: /lib/modules/2.6.32-754.33.1.el6.x86_64/ena.koversion: 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) -
要将 net.ifnames=0 添加到 /boot/grub/grub.conf 并关闭网络接口命名,请运行以下命令:
sudo sed -i '/kernel/s/$/ net.ifnames=0/' /boot/grub/grub.conf -
停止实例。
-
要在实例级别激活增强型网络支持,请运行以下 modify-instance-attribute 命令:
aws ec2 modify-instance-attribute --instance-id exampleID --ena-support --region exampleRegion**注意:**请将 exampleID 替换为您的实例 ID,将 exampleRegion 替换为您的区域。
-
启动实例。
-
使用 SSH 连接到实例,然后运行以下命令以验证您是否正确安装了 ENA 驱动程序:
ethtool -i eth0
输出示例:
driver: enaversion: 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 程序
如果您的应用程序直接依赖于 ENA 版本,请配置动态内核模块支持 (DKMS) 程序。这可确保 Amazon EC2 在未来的内核升级中包含该驱动程序。
**注意:**您可以在 RHEL 实例中使用 Extra Packages for Enterprise Linux (EPEL) 存储库。
要配置 DKMS 程序,请完成以下步骤:
-
要安装 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 网站上的 Available packages in EPEL(EPEL 中的可用软件包)。
-
要安装 DKMS,请运行以下命令:
sudo yum install dkms -y -
要删除现有内核,请运行以下命令:
VER=$( grep ^VERSION /usr/src/amzn-drivers-master/kernel/linux/rpm/Makefile | cut -d' ' -f2 ) -
要将源文件复制到源目录,请运行以下命令:
sudo cp -a /usr/src/amzn-drivers-master /usr/src/amzn-drivers-${VER} -
要创建 DKMS 配置文件以及构建并安装 ENA 模块,请运行以下命令:
sudo cat <<EOM | sudo tee /usr/src/amzn-drivers-${VER}/dkms.confPACKAGE_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
