如何在运行 Red Hat 6/7 的 Amazon EC2 实例上安装并激活最新的 ENA 驱动程序,以便获得增强型网络支持?
上次更新时间:2022 年 4 月 27 日
如何在运行 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 实例上启用 Elastic Network Adapter (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
注意: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