在 Linux 实例上启用 Elastic Network Adapter (ENA) 增强联网
Amazon EC2 通过 Elastic Network Adapter (ENA) 提供增强联网功能。要使用增强型联网,您必须安装所需的 ENA 模块并启用 ENA 支持。
目录
要求
要使用 ENA 准备增强联网,请按如下方式设置您的实例:
-
使用当前一代实例类型启动实例,但小于
m4.16xlarge
的 C4、D2、M4 实例或 T2 除外。 -
使用支持的 Linux 内核版本及支持的发行版启动实例,以便为实例自动启用 ENA 增强联网。有关更多信息,请参阅 ENA Linux 内核驱动程序发行说明
。 -
确保实例具有 Internet 连接。
-
使用 Amazon Web Services Management Console 的 Amazon CloudShell
,或者将 Amazon CLI 或 Amazon Tools for Windows PowerShell 安装到您选择的任意电脑上(最好是本地台式机或笔记本电脑)并进行配置。有关的更多信息,请参阅 访问 Amazon EC2 或 Amazon CloudShell 用户指南。不能从 Amazon EC2 控制台管理增强联网。 -
如果您的实例上有重要的数据需要保留,则应立即从您的实例创建 AMI,来备份这些数据。更新内核和内核模块以及启用
enaSupport
属性可能会导致实例不兼容或无法访问操作系统。如果您有最新备份,则发生此情况时仍将保留数据。
增强联网性能
以下文档汇总了支持 ENA 增强联网的实例类型的网络性能:
测试是否启用了增强联网功能
以下 AMI 包含所需的 ENA 模块并启用了 ENA 支持:
Amazon Linux 2
Amazon Linux AMI 2018.03
-
Ubuntu 14.04 或更高版本(采用
linux-aws
内核)注意
Amazon 基于 Graviton 的实例类型需要 Ubuntu 18.04 或更高版本(采用
linux-aws
内核) Red Hat Enterprise Linux 7.4 或更高版本
SUSE Linux Enterprise Server 12 SP2 或更高版本
CentOS 7.4.1708 或更高版本
FreeBSD 11.1 或更高版本
Debian GNU/Linux 9 或更高版本
若要测试是否已启用了增强联网,请确认实例上已安装 ena
模块且设置了 enaSupport
属性。如果实例满足这两个条件,则 ethtool -i
ethn
命令应显示该模块已在网络接口上使用。
内核模块 (ena)
要确认已安装 ena
模块,请使用 modinfo 命令,如以下示例中所示。
[ec2-user ~]$
modinfo ena
filename: /lib/modules/4.14.33-59.37.amzn2.x86_64/kernel/drivers/amazon/net/ena/ena.ko version: 1.5.0g license: GPL description: Elastic Network Adapter (ENA) author: Amazon.com, Inc. or its affiliates srcversion: 692C7C68B8A9001CB3F31D0 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* depends: retpoline: Y intree: Y name: ena ...
在上述 Amazon Linux 情况中,ena
模块已安装。
ubuntu:~$
modinfo ena
ERROR: modinfo: could not find module ena
在上述 Ubuntu 实例中,此模块未安装,因此您必须首先安装它。有关更多信息,请参阅在 Ubuntu 上启用增强联网。
实例属性 (enaSupport)
要检查实例是否设置了增强联网 enaSupport
属性,请使用以下任一命令。如果该属性已设置,则响应为 true。
-
describe-instances (Amazon CLI/Amazon CloudShell)
aws ec2 describe-instances --instance-ids
instance_id
--query "Reservations[].Instances[].EnaSupport" -
Get-EC2Instance(适用于 Windows PowerShell 的工具)
(Get-EC2Instance -InstanceId
instance-id
).Instances.EnaSupport
映像属性(enaSupport)
要检查 AMI 是否设置了增强联网 enaSupport
属性,请使用以下任一命令。如果该属性已设置,则响应为 true。
-
describe-images (Amazon CLI/Amazon CloudShell)
aws ec2 describe-images --image-id
ami_id
--query "Images[].EnaSupport" -
Get-EC2Image(适用于 Windows PowerShell 的工具)
(Get-EC2Image -ImageId
ami_id
).EnaSupport
网络接口驱动程序
使用以下命令验证是否在特定接口上使用了 ena
模块(替代要检查的接口名称)。如果您使用单个接口(默认设置),则它是 eth0
。如果操作系统支持可预测的网络名称,这可以是 ens5
等名称。
在以下示例中,ena
模块未加载,因为列出的驱动程序是 vif
。
[ec2-user ~]$
ethtool -i
eth0
driver: vif version: firmware-version: bus-info: vif-0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no
在此示例中,ena
模块进行加载并具有推荐的最低版本。此实例正确配置了增强联网。
[ec2-user ~]$
ethtool -i
eth0
driver: ena version: 1.5.0g firmware-version: expansion-rom-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
在 Amazon Linux AMI 上启用增强联网
Amazon Linux 2 和最新版本的 Amazon Linux AMI 包括安装了 ENA 的增强联网所需的模块并启用了 ENA 支持。因此,如果使用 HVM 版本的 Amazon Linux 在支持的实例类型上启动实例,则已为您的实例启用增强联网。有关更多信息,请参阅测试是否启用了增强联网功能。
如果您使用较旧的 Amazon Linux AMI 启动了实例,并且实例尚未启用增强联网,请通过以下步骤启用增强联网。
在 Amazon Linux AMI 上启用增强联网
-
连接到您的 实例。
-
从实例运行以下命令以使用最新内核和内核模块 (包括
ena
) 更新实例:[ec2-user ~]$
sudo yum update
-
使用 Amazon EC2 控制台或以下任一命令从您的本地计算机重启实例:reboot-instances(Amazon CLI)、Restart-EC2Instance(Amazon Tools for Windows PowerShell)。
-
再次连接到您的实例,并使用
ena
中的 modinfo ena 命令验证 测试是否启用了增强联网功能 模块是否已安装并具有推荐的最低版本。 -
[由 EBS 支持的实例] 使用 Amazon EC2 控制台或以下任一命令从您的本地计算机停止实例:stop-instances(Amazon CLI)、Stop-EC2Instance(Amazon Tools for Windows PowerShell)。如果您的实例由 Amazon OpsWorks 管理,则应在 Amazon OpsWorks 控制台中停止该实例,以便使实例状态保持同步。
[实例存储支持的实例] 您无法停止实例来修改属性。请执行此过程:在 Amazon Linux AMI 上启用增强联网(实例存储支持的实例)。
-
使用以下任一命令从本地电脑启用增强联网属性:
-
modify-instance-attribute (Amazon CLI)
aws ec2 modify-instance-attribute --instance-id
instance_id
--ena-support -
Edit-EC2InstanceAttribute(适用于 Windows PowerShell 的工具)
Edit-EC2InstanceAttribute -InstanceId
instance-id
-EnaSupport $true
-
-
(可选) 从实例创建 AMI,如 中所述创建一个由 Amazon EBS 支持的 Linux AMI 该 AMI 从实例继承增强联网
enaSupport
属性。因此,您可以使用此 AMI 启动默认情况下启用了增强联网功能的其他实例。 -
使用 Amazon EC2 控制台或以下任一命令从您的本地计算机启动实例:start-instances(Amazon CLI)、Start-EC2Instance(Amazon Tools for Windows PowerShell)。如果您的实例由 Amazon OpsWorks 管理,则应在 Amazon OpsWorks 控制台中启动该实例,以便使实例状态保持同步。
-
连接到您的实例,并使用
ena
中的 ethtool -i ethn
命令验证是否在网络接口上安装并加载了 测试是否启用了增强联网功能 模块。如果您在启用增强联网之后无法连接到实例,请参阅对 Elastic Network Adapter (ENA) 进行问题排查。
在 Amazon Linux AMI 上启用增强联网(实例存储支持的实例)
按照上述过程操作,直到您停止实例的步骤。按照创建由实例存储支持的 Linux AMI中所述创建新 AMI,确保在注册 AMI 时启用增强联网属性。
-
register-image (Amazon CLI)
aws ec2 register-image --ena-support
...
-
Register-EC2Image (Amazon Tools for Windows PowerShell)
Register-EC2Image -EnaSupport $true
...
在 Ubuntu 上启用增强联网
最新的 Ubuntu HVM AMI 包括安装了 ENA 的增强联网所需的模块并启用了 ENA 支持。因此,如果使用最新的 Ubuntu HVM AMI 在支持的实例类型上启动实例,则已为您的实例启用增强联网。有关更多信息,请参阅测试是否启用了增强联网功能。
如果您使用较旧的 AMI 启动了实例,并且实例尚未启用增强联网,则可以安装 linux-aws
内核程序包以获取最新的增强联网驱动程序并更新所需的属性。
安装 linux-aws
内核程序包(Ubuntu 16.04 或更高版本)
Ubuntu 16.04 和 18.04 随附 Ubuntu 自定义内核(linux-aws
内核程序包)。要使用其他内核,请联系 Amazon Web Services Support
安装 linux-aws
内核程序包(Ubuntu Trusty 14.04)
-
连接到您的 实例。
-
更新包缓存和包。
ubuntu:~$
sudo apt-get update && sudo apt-get upgrade -y linux-aws
重要
如果在更新过程中系统提示您安装
grub
,请使用/dev/xvda
安装grub
,然后选择保留当前版本的/boot/grub/menu.lst
。 -
[由 EBS 支持的实例] 使用 Amazon EC2 控制台或以下任一命令从您的本地计算机停止实例:stop-instances(Amazon CLI)、Stop-EC2Instance(Amazon Tools for Windows PowerShell)。如果您的实例由 Amazon OpsWorks 管理,则应在 Amazon OpsWorks 控制台中停止该实例,以便使实例状态保持同步。
[实例存储支持的实例] 您无法停止实例来修改属性。请执行此过程:在 Ubuntu 上启用增强联网(由实例存储支持的实例)。
-
使用以下任一命令从本地电脑启用增强联网属性:
-
modify-instance-attribute (Amazon CLI)
aws ec2 modify-instance-attribute --instance-id
instance_id
--ena-support -
Edit-EC2InstanceAttribute(适用于 Windows PowerShell 的工具)
Edit-EC2InstanceAttribute -InstanceId
instance-id
-EnaSupport $true
-
-
(可选) 从实例创建 AMI,如 中所述创建一个由 Amazon EBS 支持的 Linux AMI 该 AMI 从实例继承增强联网
enaSupport
属性。因此,您可以使用此 AMI 启动默认情况下启用了增强联网功能的其他实例。 -
使用 Amazon EC2 控制台或以下任一命令从您的本地计算机启动实例:start-instances(Amazon CLI)、Start-EC2Instance(Amazon Tools for Windows PowerShell)。如果您的实例由 Amazon OpsWorks 管理,则应在 Amazon OpsWorks 控制台中启动该实例,以便使实例状态保持同步。
在 Ubuntu 上启用增强联网(由实例存储支持的实例)
按照上述过程操作,直到您停止实例的步骤。按照创建由实例存储支持的 Linux AMI中所述创建新 AMI,确保在注册 AMI 时启用增强联网属性。
-
register-image (Amazon CLI)
aws ec2 register-image --ena-support
...
-
Register-EC2Image (Amazon Tools for Windows PowerShell)
Register-EC2Image -EnaSupport $true
...
在 Linux 上启用增强联网
用于 Red Hat Enterprise Linux、SUSE Linux Enterprise Server 和 CentOS 的最新 AMI 包括使用 ENA 增强联网所需的模块并启用了 ENA 支持。因此,如果使用最新的 AMI 在支持的实例类型上启动实例,则已为您的实例启用增强联网。有关更多信息,请参阅测试是否启用了增强联网功能。
下面的过程提供了在 Amazon Linux AMI 或 Ubuntu 之外的 Linux 发行版上启用增强联网的一般步骤。有关更多信息(如命令的详细语法、文件位置或包和工具支持),请参阅您的 Linux 发行版的文档。
对 Linux 启用增强联网
-
连接到您的 实例。
-
从位于以下网址的 GitHub 克隆您实例上的
ena
模块的源代码:https://github.com/amzn/amzn-drivers。(默认情况下,SUSE Linux Enterprise Server 12 SP2 及更高版本包含 ENA 2.02,因此不需要下载和编译 ENA 驱动程序。对于 SUSE Linux Enterprise Server 12 SP2 及更高版本,您应该提交一个请求,将您想要的驱动程序版本添加到存储内核中)。 -
在实例上编译并安装
ena
模块。这些步骤取决于 Linux 发行版。有关在 Red Hat Enterprise Linux 上编译模块的更多信息,请参阅 Amazon 知识中心文章。 -
运行 sudo depmod 命令以更新模块依赖项。
-
在实例上更新
initramfs
以确保在启动时加载新模块。例如,如果您的发行版支持 dracut,则可使用以下命令。dracut -f -v
-
确定您的系统是否默认使用可预测的网络接口名称。使用 systemd 或 udev 版本 197 或更高版本的系统可以重命名以太网设备,它们不保证单个网络接口将命名为
eth0
。此行为可能导致连接到实例时出现问题。要获取更多信息并查看其他配置选项,请参阅 freedesktop.org 网站上的可预测的网络接口名称。 -
您可以使用以下命令在基于 RPM 的系统上检查 systemd 或 udev 版本。
rpm -qa | grep -e '^systemd-[0-9]\+\|^udev-[0-9]\+'
systemd-208-11.el7_0.2.x86_64
在以上 Red Hat Enterprise Linux 7 示例中,systemd 版本是 208,因此必须禁用可预测的网络接口名称。
-
通过将
net.ifnames=0
选项添加到GRUB_CMDLINE_LINUX
中的/etc/default/grub
行,可禁用可预测的网络接口名称。sudo sed -i '/^GRUB\_CMDLINE\_LINUX/s/\"$/\ net\.ifnames\=0\"/' /etc/default/grub
-
重新构建 grub 配置文件。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
-
[由 EBS 支持的实例] 使用 Amazon EC2 控制台或以下任一命令从您的本地计算机停止实例:stop-instances(Amazon CLI)、Stop-EC2Instance(Amazon Tools for Windows PowerShell)。如果您的实例由 Amazon OpsWorks 管理,则应在 Amazon OpsWorks 控制台中停止该实例,以便使实例状态保持同步。
[实例存储支持的实例] 您无法停止实例来修改属性。请执行此过程:在 Linux 上启用增强联网(由实例存储支持的实例)。
-
使用以下任一命令从本地计算机启用增强联网
enaSupport
属性:-
modify-instance-attribute (Amazon CLI)
aws ec2 modify-instance-attribute --instance-id
instance_id
--ena-support -
Edit-EC2InstanceAttribute(适用于 Windows PowerShell 的工具)
Edit-EC2InstanceAttribute -InstanceId
instance-id
-EnaSupport $true
-
-
(可选) 从实例创建 AMI,如 创建一个由 Amazon EBS 支持的 Linux AMI 中所述。该 AMI 从实例继承增强联网
enaSupport
属性。因此,您可以使用此 AMI 启动默认情况下启用了增强联网功能的其他实例。重要
如果您的实例操作系统包含
/etc/udev/rules.d/70-persistent-net.rules
文件,则必须在创建 AMI 之前将其删除。此文件包含原始实例的以太网适配器 MAC 地址。如果其他实例使用此文件启动,操作系统将找不到设备,eth0
会失败,从而导致启动问题。此文件将在下次启动过程中重新生成,从 AMI 启动的任意实例都会创建这个文件的自有版本。 -
使用 Amazon EC2 控制台或以下任一命令从您的本地计算机启动实例:start-instances(Amazon CLI)、Start-EC2Instance(Amazon Tools for Windows PowerShell)。如果您的实例由 Amazon OpsWorks 管理,则应在 Amazon OpsWorks 控制台中启动该实例,以便使实例状态保持同步。
-
(可选) 连接到实例并确认已安装模块。
如果您在启用增强联网之后无法连接到实例,请参阅对 Elastic Network Adapter (ENA) 进行问题排查。
在 Linux 上启用增强联网(由实例存储支持的实例)
按照上述过程操作,直到您停止实例的步骤。按照创建由实例存储支持的 Linux AMI中所述创建新 AMI,确保在注册 AMI 时启用增强联网属性。
-
register-image (Amazon CLI)
aws ec2 register-image --ena-support
...
-
Register-EC2Image (Amazon Tools for Windows PowerShell)
Register-EC2Image -EnaSupport
...
利用 DKMS 在 Ubuntu 上启用增强联网
此方法仅用于测试和反馈目的。它不供生产部署使用。有关生产部署,请参阅在 Ubuntu 上启用增强联网。
重要
使用 DKMS 可避免您的订阅的支持协议。不得将其用于生产部署。
在 Ubuntu 上启用 ENA 增强联网 (EBS 支持的实例)
-
按照在 Ubuntu 上启用增强联网中的步骤 1 和 2 操作。
-
安装
build-essential
包以编译内核模块和dkms
包,这样每次更新内核时都会重建ena
模块。ubuntu:~$
sudo apt-get install -y build-essential dkms
-
从位于以下网址的 GitHub 克隆您实例上的
ena
模块的源代码:https://github.com/amzn/amzn-drivers。 ubuntu:~$
git clone https://github.com/amzn/amzn-drivers
-
将
amzn-drivers
包移动到/usr/src/
目录,以便 DKMS 可以在每次内核更新中找到并构建该模块。将源代码的版本号 (您可在发行说明中找到当前版本号) 附加到目录名称。例如,版本1.0.0
显示在以下示例中。ubuntu:~$
sudo mv amzn-drivers /usr/src/amzn-drivers-1.0.0
-
使用以下值创建 DKMS 配置文件(替代您的
ena
版本)。创建 文件。
ubuntu:~$
sudo touch /usr/src/amzn-drivers-1.0.0/dkms.conf
编辑文件并添加以下值。
ubuntu:~$
sudo vim /usr/src/amzn-drivers-1.0.0/dkms.conf PACKAGE_NAME="ena" PACKAGE_VERSION="1.0.0" 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"
-
使用 DKMS 在实例上添加、构建和安装
ena
模块。将该模块添加到 DKMS。
ubuntu:~$
sudo dkms add -m amzn-drivers -v 1.0.0
使用 dkms 命令构建该模块。
ubuntu:~$
sudo dkms build -m amzn-drivers -v 1.0.0
使用 dkms 安装该模块。
ubuntu:~$
sudo dkms install -m amzn-drivers -v 1.0.0
-
重新构建
initramfs
,以便在启动时加载正确的模块。ubuntu:~$
sudo update-initramfs -u -k all
-
使用
ena
中的 modinfo ena 命令验证是否安装了 测试是否启用了增强联网功能 模块。ubuntu:~$
modinfo ena filename: /lib/modules/3.13.0-74-generic/updates/dkms/ena.ko version: 1.0.0 license: GPL description: Elastic Network Adapter (ENA) author: Amazon.com, Inc. or its affiliates srcversion: 9693C876C54CA64AE48F0CA 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* depends: vermagic: 3.13.0-74-generic SMP mod_unload modversions parm: debug:Debug level (0=none,...,16=all) (int) parm: push_mode:Descriptor / header push mode (0=automatic,1=disable,3=enable) 0 - Automatically choose according to device capability (default) 1 - Don't push anything to device memory 3 - Push descriptors and header buffer to device memory (int) parm: enable_wd:Enable keepalive watchdog (0=disable,1=enable,default=1) (int) parm: enable_missing_tx_detection:Enable missing Tx completions. (default=1) (int) parm: numa_node_override_array:Numa node override map (array of int) parm: numa_node_override:Enable/Disable numa node override (0=disable) (int)
-
继续执行在 Ubuntu 上启用增强联网中的步骤 3。
驱动程序发行说明
有关 Linux ENA 驱动程序版本的信息,请参阅 ENA Linux 内核驱动程序发行说明
问题排查
有关故障排除信息,请参阅对 Elastic Network Adapter (ENA) 进行问题排查。