在 Linux 執行個體上使用彈性網路轉接器 (ENA) 啟用增強型聯網 - Amazon Elastic Compute Cloud

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 上啟用增強型聯網

  1. 連線到您的執行個體。

  2. 在執行個體上,執行下列命令,將您的執行個體更新為最新的核心與核心模組,包括 ena

    [ec2-user ~]$ sudo yum update
  3. 從本機電腦中,使用 Amazon EC2 主控台或下列其中一個命令重新啟動執行個體:reboot-instances (AWS CLI)、Restart-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。

  4. 再次連接至執行個體,並使用 測試是否已啟用增強型聯網 中的 modinfo ena 命令確認 ena 模組已安裝且為最低建議版本。

  5. [EBS 後端執行個體] 從本機電腦中,使用 Amazon EC2 主控台或下列其中一個命令來停止執行個體:stop-instances (AWS CLI)、Stop-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。如果您的執行個體由 AWS OpsWorks 管理,您應該在 AWS OpsWorks 主控台中停止該執行個體,以便執行個體狀態保持同步。

    [執行個體存放區後端執行個體] 您無法停止執行個體來修改屬性。請改為執行此程序:在 Amazon Linux AMI 上啟用增強型聯網 (執行個體存放區後端執行個體)

  6. 在本機電腦上使用下列其中一個命令啟用增強型聯網屬性。

  7. (選擇性) 從執行個體建立 AMI,如 建立 Amazon EBS 後端的 LinuxAMI 所述。AMI 將從執行個體繼承增強型聯網的 enaSupport 屬性。因此,您預設可用此 AMI 啟動其他啟用增強型聯網的執行個體。

  8. 從本機電腦中,使用 Amazon EC2 主控台或下列其中一個命令來啟動執行個體:start-instances (AWS CLI)、Start-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。如果您的執行個體由 AWS OpsWorks 管理,您應該在 AWS OpsWorks 主控台中啟動該執行個體,以便執行個體狀態保持同步。

  9. 連接至執行個體,並使用 測試是否已啟用增強型聯網 中的 ethtool -i ethn 命令確認 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)

  1. 連線到您的執行個體。

  2. 更新套件快取和套件。

    ubuntu:~$ sudo apt-get update && sudo apt-get upgrade -y linux-aws
    重要

    如果更新程序期間提示您安裝 grub,請用 /dev/xvda 安裝 grub,然後選擇保留目前版本的 /boot/grub/menu.lst

  3. [EBS 後端執行個體] 從本機電腦中,使用 Amazon EC2 主控台或下列其中一個命令來停止執行個體:stop-instances (AWS CLI)、Stop-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。如果您的執行個體由 AWS OpsWorks 管理,您應該在 AWS OpsWorks 主控台中停止該執行個體,以便執行個體狀態保持同步。

    [執行個體存放區後端執行個體] 您無法停止執行個體來修改屬性。請改為執行此程序:在 Ubuntu 上啟用增強型聯網 (執行個體後端執行個體)

  4. 在本機電腦上使用下列其中一個命令啟用增強型聯網屬性。

  5. (選擇性) 從執行個體建立 AMI,如 建立 Amazon EBS 後端的 LinuxAMI 所述。AMI 將從執行個體繼承增強型聯網的 enaSupport 屬性。因此,您預設可用此 AMI 啟動其他啟用增強型聯網的執行個體。

  6. 從本機電腦中,使用 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 上啟用增強型聯網

  1. 連線到您的執行個體。

  2. 在您的執行個體上從 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
  3. 在您的執行個體上編譯及安裝 ena 模組。這些步驟視 Linux 發行版本而定。如需在 RHEL 上編譯模組的詳細資訊,請參閱 AWS 知識中心文章

  4. 執行 sudo depmod 命令更新模組相依性。

  5. 在執行個體上更新 initramfs,確定開機時載入新模組。例如,如果您的發行版本支援 dracut,您可以使用下列命令。

    dracut -f -v
  6. 判斷系統是否依預設使用可預測的網路界面名稱。使用 systemdudev 197 或以上版本的系統可重新命名乙太網路裝置,但不保證單一網路界面會命名為 eth0。該行為會造成連線至執行個體時發生問題。如需詳細資訊及查看其他的組態選項,請參閱 freedesktop.org 網站上的可預測的網路界面名稱

    1. 您可用下列命令在 RPM 系統上檢查 systemdudev 的版本。

      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,因此可預測的網路界面名稱已停用。

    2. 若要停用可預測網路界面名稱,請將 net.ifnames=0 選項新增至 GRUB_CMDLINE_LINUX/etc/default/grub 行中。

      sudo sed -i '/^GRUB\_CMDLINE\_LINUX/s/\"$/\ net\.ifnames\=0\"/' /etc/default/grub
    3. 重建 grub 組態檔案。

      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  7. [EBS 後端執行個體] 從本機電腦中,使用 Amazon EC2 主控台或下列其中一個命令來停止執行個體:stop-instances (AWS CLI)、Stop-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。如果您的執行個體由 AWS OpsWorks 管理,您應該在 AWS OpsWorks 主控台中停止該執行個體,以便執行個體狀態保持同步。

    [執行個體存放區後端執行個體] 您無法停止執行個體來修改屬性。請改為執行此程序:在 Linux 上啟用增強型聯網 (執行個體存放區–後端執行個體)

  8. 在本機電腦上使用下列其中一個命令啟用增強型聯網的 enaSupport 屬性:

  9. (選擇性) 從執行個體建立 AMI,如 建立 Amazon EBS 後端的 LinuxAMI 所述。AMI 將從執行個體繼承增強型聯網的 enaSupport 屬性。因此,您預設可用此 AMI 啟動其他啟用增強型聯網的執行個體。

    重要

    如果您執行個體的作業系統包含 /etc/udev/rules.d/70-persistent-net.rules 檔案,您必須先刪除檔案,然後再建立 AMI。此檔案包含原始執行個體乙太網路卡的 MAC 地址。如果其他執行個體使用此檔案開機,作業系統將無法找到設備,且 eth0 可能會失敗,因而造成開機問題。此檔案會在下次開機週期時重新產生,且從 AMI 啟動的任何執行個體將會建立自己的檔案版本。

  10. 從本機電腦中,使用 Amazon EC2 主控台或下列其中一個命令來啟動執行個體:start-instances (AWS CLI)、Start-EC2Instance (適用於 Windows PowerShell 的 AWS 工具)。如果您的執行個體由 AWS OpsWorks 管理,您應該在 AWS OpsWorks 主控台中啟動該執行個體,以便執行個體狀態保持同步。

  11. (選擇性) 連線到執行個體,並確認模組已安裝。

    如果啟用增強型聯網後無法連接至您的執行個體,請參閱 故障診斷彈性網路轉接器 (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 後端執行個體)

  1. 請遵循在 Ubuntu 上啟用增強型聯網中的步驟 1 和 2。

  2. 安裝 build-essential 套件,以編譯核心模組和 dkms 套件,使 ena 模組在每次核心更新時重建。

    ubuntu:~$ sudo apt-get install -y build-essential dkms
  3. 在您的執行個體上從 GitHub (網址為 https://github.com/amzn/amzn-drivers) 複製 ena 模組的原始碼。

    ubuntu:~$ git clone https://github.com/amzn/amzn-drivers
  4. amzn-drivers 套件移至 /usr/src/ 目錄,讓 DKMS 可以找到套件並在每次核心更新時建置。附加原始碼版本編號 (目前的版本編號可在版本備註中找到) 到目錄名稱。例如,下列範例顯示 1.0.0 版本。

    ubuntu:~$ sudo mv amzn-drivers /usr/src/amzn-drivers-1.0.0
  5. 建立包含下列值的 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"
  6. 使用 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
  7. 重建 initramfs,以在開機時載入正確的模組。

    ubuntu:~$ sudo update-initramfs -u -k all
  8. 使用 測試是否已啟用增強型聯網 中的 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)
  9. 繼續執行在 Ubuntu 上啟用增強型聯網中的步驟 3。

故障診斷

如需進行 ENA 轉接器故障診斷的詳細資訊,請參閱故障診斷彈性網路轉接器 (ENA)