在 Linux 執行個體上使用彈性網路轉接器 (ENA) 啟用增強型聯網
Amazon EC2 會透過彈性網路轉接器 (ENA) 提供增強型聯網功能。若要使用增強型聯網,您必須安裝必要的 ENA 模組,並啟用 ENA 支援。
內容
需求
若要準備使用 ENA 界面的增強型聯網,請依下列方式設定您的執行個體:
-
使用最新一代的執行個體類型來啟動執行個體,但小於
m4.16xlarge
或 T2 的 C4、D2、M4 執行個體除外。 -
使用支援版本的 Linux 核心和支援的發行版本,啟動執行個體,即可讓執行個體自動啟用 ENA 增強型聯網。如需詳細資訊,請參閱 ENA Linux 核心驅動程式版本備註
。 -
確定該執行個體具有網際網路連線能力。
-
在任何選擇的電腦 (最好是本機的桌上型電腦或筆記型電腦) 上安裝並設定 AWS CLI 或 適用於 Windows PowerShell 的 AWS 工具。如需更多詳細資訊,請參閱 存取 Amazon EC2。增強型聯網無法從 Amazon EC2 主控台管理。
-
如果您的執行個體上有想要保留的重要資料,您現在應從執行個體建立 AMI,以備份這些資料。更新核心與核心模組,以及啟用
enaSupport
屬性,可能使執行個體變得不相容或使作業系統變得無法連線。如果您有較新的備份,發生這些狀況時資料便能獲得保留。
增強型聯網:效能
下列文件提供支援 ENA 增強型聯網之執行個體類型的網路效能摘要:
測試是否已啟用增強型聯網
下列 AMI 包含必要的 ENA 模組,並啟用 ENA 支援:
-
Amazon Linux 2
-
Amazon Linux AMI 2018.03
-
Ubuntu 14.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 (AWS CLI)
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 (AWS CLI)
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 支援。因此,如果您在支援的執行個體類型上使用 Amazon Linux HVM 版本啟動執行個體,則您的執行個體已啟用增強型聯網。如需詳細資訊,請參閱測試是否已啟用增強型聯網。
如果您使用較舊的 Amazon Linux AMI 來啟動執行個體,且其尚未啟用增強型聯網,請用下列程序啟用增強型聯網。
在 Amazon Linux AMI 上啟用增強型聯網
-
連線到您的執行個體。
-
在執行個體上,執行下列命令,將您的執行個體更新為最新的核心與核心模組,包括
ena
:[ec2-user ~]$
sudo yum update
-
從本機電腦中,使用 Amazon EC2 主控台或下列其中一個命令重新啟動執行個體:reboot-instances (AWS CLI)、Restart-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。
-
再次連接至執行個體,並使用 測試是否已啟用增強型聯網 中的 modinfo ena 命令確認
ena
模組已安裝且為最低建議版本。 -
[EBS 後端執行個體] 從本機電腦中,使用 Amazon EC2 主控台或下列其中一個命令來停止執行個體:stop-instances (AWS CLI)、Stop-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。如果您的執行個體由 AWS OpsWorks 管理,您應該在 AWS OpsWorks 主控台中停止該執行個體,以便執行個體狀態保持同步。
[執行個體存放區後端執行個體] 您無法停止執行個體來修改屬性。請改為執行此程序:在 Amazon Linux AMI 上啟用增強型聯網 (執行個體存放區後端執行個體)。
-
在本機電腦上使用下列其中一個命令啟用增強型聯網屬性。
-
modify-instance-attribute (AWS 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 後端的 LinuxAMI 所述。AMI 將從執行個體繼承增強型聯網的
enaSupport
屬性。因此,您預設可用此 AMI 啟動其他啟用增強型聯網的執行個體。 -
從本機電腦中,使用 Amazon EC2 主控台或下列其中一個命令來啟動執行個體:start-instances (AWS CLI)、Start-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。如果您的執行個體由 AWS OpsWorks 管理,您應該在 AWS OpsWorks 主控台中啟動該執行個體,以便執行個體狀態保持同步。
-
連接至執行個體,並使用 測試是否已啟用增強型聯網 中的 ethtool -i eth
n
命令確認ena
模組已在網路界面上安裝及載入。如果啟用增強型聯網後無法連接至您的執行個體,請參閱 故障診斷彈性網路轉接器 (ENA)。
在 Amazon Linux AMI 上啟用增強型聯網 (執行個體存放區後端執行個體)
遵循先前的程序,一直進行到您停止執行個體的那個步驟。如 建立執行個體存放區後端 Linux AMI 中所述建立新的 AMI,且務必在註冊 AMI 時啟用增強型聯網屬性。
-
register-image (AWS CLI)
aws ec2 register-image --ena-support
...
-
Register-EC2Image (適用於 Windows PowerShell 的 AWS 工具)
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 核心套件)。若要使用不同核心,請聯絡 AWS 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 (AWS CLI)、Stop-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。如果您的執行個體由 AWS OpsWorks 管理,您應該在 AWS OpsWorks 主控台中停止該執行個體,以便執行個體狀態保持同步。
[執行個體存放區後端執行個體] 您無法停止執行個體來修改屬性。請改為執行此程序:在 Ubuntu 上啟用增強型聯網 (執行個體後端執行個體)。
-
在本機電腦上使用下列其中一個命令啟用增強型聯網屬性。
-
modify-instance-attribute (AWS 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 後端的 LinuxAMI 所述。AMI 將從執行個體繼承增強型聯網的
enaSupport
屬性。因此,您預設可用此 AMI 啟動其他啟用增強型聯網的執行個體。 -
從本機電腦中,使用 Amazon EC2 主控台或下列其中一個命令來啟動執行個體:start-instances (AWS CLI)、Start-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。如果您的執行個體由 AWS OpsWorks 管理,您應該在 AWS OpsWorks 主控台中啟動該執行個體,以便執行個體狀態保持同步。
在 Ubuntu 上啟用增強型聯網 (執行個體後端執行個體)
遵循先前的程序,一直進行到您停止執行個體的那個步驟。如 建立執行個體存放區後端 Linux AMI 中所述建立新的 AMI,且務必在註冊 AMI 時啟用增強型聯網屬性。
-
register-image (AWS CLI)
aws ec2 register-image --ena-support
...
-
Register-EC2Image (適用於 Windows PowerShell 的 AWS 工具)
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 (網址為 https://github.com/amzn/amzn-drivers
) 複製 ena
模組的原始碼。(SUSE Linux Enterprise Server 12 SP2 和更新版本預設會包含 ENA 2.02,因此您不需要下載和編譯 ENA 驅動程式。若為 SUSE Linux Enterprise Server 12 SP2 和更新版本,您應該提出請求,將您想要的驅動程式版本新增至庫存核心)。git clone https://github.com/amzn/amzn-drivers
-
在您的執行個體上編譯及安裝
ena
模組。這些步驟視 Linux 發行版本而定。如需在 RHEL 上編譯模組的詳細資訊,請參閱 AWS 知識中心文章。 -
執行 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 (AWS CLI)、Stop-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。如果您的執行個體由 AWS OpsWorks 管理,您應該在 AWS OpsWorks 主控台中停止該執行個體,以便執行個體狀態保持同步。
[執行個體存放區後端執行個體] 您無法停止執行個體來修改屬性。請改為執行此程序:在 Linux 上啟用增強型聯網 (執行個體存放區–後端執行個體)。
-
在本機電腦上使用下列其中一個命令啟用增強型聯網的
enaSupport
屬性:-
modify-instance-attribute (AWS 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 後端的 LinuxAMI 所述。AMI 將從執行個體繼承增強型聯網的
enaSupport
屬性。因此,您預設可用此 AMI 啟動其他啟用增強型聯網的執行個體。重要 如果您執行個體的作業系統包含
/etc/udev/rules.d/70-persistent-net.rules
檔案,您必須先刪除檔案,然後再建立 AMI。此檔案包含原始執行個體乙太網路卡的 MAC 地址。如果其他執行個體使用此檔案開機,作業系統將無法找到設備,且eth0
可能會失敗,因而造成開機問題。此檔案會在下次開機週期時重新產生,且從 AMI 啟動的任何執行個體將會建立自己的檔案版本。 -
從本機電腦中,使用 Amazon EC2 主控台或下列其中一個命令來啟動執行個體:start-instances (AWS CLI)、Start-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。如果您的執行個體由 AWS OpsWorks 管理,您應該在 AWS OpsWorks 主控台中啟動該執行個體,以便執行個體狀態保持同步。
-
(選擇性) 連線到執行個體,並確認模組已安裝。
如果啟用增強型聯網後無法連接至您的執行個體,請參閱 故障診斷彈性網路轉接器 (ENA)。
在 Linux 上啟用增強型聯網 (執行個體存放區–後端執行個體)
遵循先前的程序,一直進行到您停止執行個體的那個步驟。如 建立執行個體存放區後端 Linux AMI 中所述建立新的 AMI,且務必在註冊 AMI 時啟用增強型聯網屬性。
-
register-image (AWS CLI)
aws ec2 register-image --ena-support
...
-
Register-EC2Image (適用於 Windows PowerShell 的 AWS 工具)
Register-EC2Image -EnaSupport
...
在 Ubuntu 上使用 DKMS 啟用增強型聯網
此方法僅用於測試和意見回饋用途。不適用於生產部署。如需生產部署,請參閱在 Ubuntu 上啟用增強型聯網。
使用 DKMS 會使訂閱的支持協議無效。它不應該用於生產部署。
在 Ubuntu 上使用 ENA 啟用增強型聯網 (EBS 後端執行個體)
-
請遵循在 Ubuntu 上啟用增強型聯網中的步驟 1 和 2。
-
安裝
build-essential
套件,以編譯核心模組和dkms
套件,使ena
模組在每次核心更新時重建。ubuntu:~$
sudo apt-get install -y build-essential dkms
-
在您的執行個體上從 GitHub (網址為 https://github.com/amzn/amzn-drivers
) 複製 ena
模組的原始碼。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
-
使用 測試是否已啟用增強型聯網 中的 modinfo ena 命令確認
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。
故障診斷
如需進行 ENA 轉接器故障診斷的詳細資訊,請參閱故障診斷彈性網路轉接器 (ENA)。