RHEL 7.4 で AWS の Elastic Network Adapter を有効にしてみる

記事タイトルとURLをコピーする

技術2課の寺田です。
若干夏バテ気味で、食欲がイマイチな今日この頃です。長野県は東京よりは涼しいのですが、なんとなくこういう時はカレーが多くて、週に半分はカレー味になってます。

さて、Red Hat Enterprise Linux 7.4 (RHEL7.4) が正式リリースになって、 ENA (Elastic Network Adapter) をサポートしましたので、
ENAと、ENAの有効化の方法について改めて見ていこうと思います。

ENAとは

去年の6月に出たもので、大きなインスタンスタイプでも帯域幅は最大 10 Gpbs までだったものが、
最大 20 Gpbs までのサポートになりました。
EC2 インスタンス向けの次世代ネットワークインターフェイス、Elastic Network Adapter (ENA) を導入

当初は X1 インスタンス向けでしたが、現在だと新しい世代のインスタンスの
F1, G3, I3, P2, R4, X1 の各タイプと、 m4の m4.16xlarge でサポートがされています。
基本的に AWS の基本的な OS ではすでにサポートがされており、
AMIの状態で有効化がされていますが、
RHEL 7.4 は OS ではサポートをしたものの、まだ AMI のレベルでは ENA が標準で適用にはなっていないため、
これを有効化する手順を見ていきたいと思います。

インスタンスタイプをENA対応のインスタンスに変更するなどの場合でも、基本的には同じ手順となりますので、参考にしてみてください。

公式ドキュメントはこちらになります。
VPC 内の Linux インスタンスにおける Elastic Network Adapter (ENA) を使用した拡張ネットワーキングの有効化

AMIで有効化されているかを確認する

ローンチする前にENAが標準で有効になっているかを確認するためには、
CLIを利用すると、先ほどのドキュメントより

aws ec2 describe-images --image-id ami_id --query 'Images[].EnaSupport'

となります。

試しに、東京リージョンの Amazon Linux (AMI ID は ami-3bd3c45c)で確認すると

$ aws ec2 describe-images --image-id ami-3bd3c45c --query "Images[].EnaSupport"
[
     true
 ]

と、レスポンスが返ってきます。

これを、RHEL7.4 のAMI (AMI ID は ami-3901e15f )でやってみると、

$ aws ec2 describe-images --image-id ami-3901e15f --query "Images[].EnaSupport"
[]

となり、AMIでは標準設定されていないことがわかります。

インスタンス内部からの確認

RHEL7.4 に ena モジュールがインストールされているかを確認して見ます。
公式ドキュメント通りコマンドは、 modinfo ena となります

インストールされていないと
ERROR: modinfo: could not find module ena
とレスポンスがあります。
実際 RHEL 7.4 を r4.large のインスタンスでローンチして試してみると

[ec2-user@ip-10-0-1-28 ~]$ modinfo ena
filename:       /lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/net/ethernet/amazon/ena/ena.ko.xz
version:        1.0.2
license:        GPL
description:    Elastic Network Adapter (ENA)
author:         Amazon.com, Inc. or its affiliates
rhelversion:    7.4
srcversion:     0ADEBA934369F8D450E5CE4
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:
intree:         Y
vermagic:       3.10.0-693.el7.x86_64 SMP mod_unload modversions
signer:         Red Hat Enterprise Linux kernel signing key
sig_key:        4F:FD:D6:3C:93:7E:B4:A7:A1:14:BC:5E:89:1A:CB:DE:50:20:65:21
sig_hashalgo:   sha256
parm:           debug:Debug level (0=none,...,16=all) (int)

とレスポンンスがあり、 ena モジュールはインストールされていることがわかりました。

他のディストリビューションの Linux などの、
古いバージョンからのアップデートで、 yum や apt-get で入手できない場合は、
ドキュメントにも記載がある通り、 GitHub のリポジトリから、ダウンロードし、インストールする必要が出てきます。
https://github.com/amzn/amzn-drivers

次に、ENAが利用されているかを確認します。
コマンドは ethtool -i eth0 となります。

[ec2-user@ip-10-0-1-28 ~]$ ethtool -i eth0
driver: vif
version:
firmware-version:
expansion-rom-version:
bus-info: vif-0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
[ec2-user@ip-10-0-1-28 ~]$

となるので、AMIからローンチしただけだと、 vif モジュールが利用されていることになります。

ENA の有効化

今までの下調べで、
現在のところ、 ENA はモジュールはインストールされているが、
利用されていない状態になっていることがわかりました。

インスタンスのENAのフラグは、AMIから継承されるので、AMIでフラグが立っていない場合は、
適用になっていませんが、一応確認しておきます。
コマンドは aws ec2 modify-instance-attribute --instance-id instance_id --ena-support です。

$ aws ec2 describe-instances --instance-id i-00562e96ff36b3109 --query 'Reservations[].Instances[].EnaSupport'
[]

となり、何もレスポンスがないため、有効化されていない状態となります。

ENAを有効化するためには、一度インスタンスを止める必要があるため、シャットダウンをしてください。
インスタンスが停止したら、ENAをコマンドで有効化します コマンドは aws ec2 modify-instance-attribute --instance-id instance_id --ena-support です。
コマンドの入力後に特にレスポンスはないため、確認コマンドを続けて入力します。

$ aws ec2 modify-instance-attribute --instance-id i-00562e96ff36b3109 --ena-support
$ aws ec2 describe-instances --instance-id i-00562e96ff36b3109 --query 'Reservations[].Instances[].EnaSupport'
[
    true
]

これでインスタンスでの有効化されているので、インスタンスを起動して、確認をします。
CLIでやっているので、起動もCLIでやるには aws ec2 start-instances --instance-ids instance_id と入れてください。

sshでログインをして、
コマンドは ethtool -i eth0 で確認してください。

[ec2-user@ip-10-0-1-28 ~]$ ethtool -i eth0
driver: ena
version: 1.0.2
firmware-version:
expansion-rom-version:
bus-info: 0000:00:03.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
[ec2-user@ip-10-0-1-28 ~]$

ENA が適用されているのが確認できました。

AMIへの適用

ENA適用をしたのち、
AMI作成をすると、ENAが標準で適用されたAMIが作成可能です。

$ aws ec2 create-image --instance-id i-00562e96ff36b3109 --name RHEL-ENA-test
{
    "ImageId": "ami-95ec02f3"
}
$ aws ec2 describe-images --image-id ami-95ec02f3 --query 'Images[].EnaSupport'
[
    true
]

まとめ

RHEL 7.4 の ENA のサポートを機に、
ENA が未適用のインスタンスへの、 ENA の適用方法を見てきました
r3からr4インスタンスへの変更などの、ENA未サポートのインスタンスからENA利用可能のインスタンスへの変更でも、同じ方法で変更が可能となります。

適用してマイナスになることは基本的にないと考えてもらって良いので、新しい世代のインスタンスを使う場合は、ぜひ適用をしてみてください。