AWS Elastic Network Adapter の確認と設定
水門は開いた – EC2 インスタンスのネットワーク帯域幅が増大 | Amazon Web Services ブログ
2016 年の中頃、Elastic Network Adapter (ENA) を使用するために AMI と現世代の EC2 インスタンスを構成するようお勧めしましたが、皆さんはきちんと宿題をこなしましたか。
(多分)こなしてないのでこなすための下調べ。
現状は一部経路に関してのみだが徐々に対象の経路が増えるのではないかと予測。何れにせよS3アクセスは早くなることが見込めるし、料金が増える訳ではないのでいずれ適用する事を考えておいても損はない。
適用の大前提としてHVMインスタンスであること。Classicは知らぬ。
また適用可能なインスタンスタイプが限られている。記事執筆時点では C5、F1、G3、H1、I3、M5、P2、P3、R4、X1 および m4.16xlarge インスタンス がリストアップされている。
最新の状況を確認する場合は Linux の拡張ネットワーキング - Amazon Elastic Compute Cloud を参考にする。
また、下記記載事項は基本的にはVPC 内の Linux インスタンスにおける Elastic Network Adapter (ENA) を使用した拡張ネットワーキングの有効化 - Amazon Elastic Compute Cloudに書かれているので分からない時は参照すること。
ちなみに。試そうを思ったけど古いインスタンスは全部T2インスタンスだったので適用外でした(涙
調査
EC2インスタンスが対応済か調べる。
対象となるEC2インスタンスをピックアップする。基本的には2016年中頃のENAリリース以前のものが対象となるハズ。
aws ec2 describe-instances --query "Reservations[].Instances[].[Tags[?Key=='Name'].Value, InstanceId, EnaSupport]"
で調査。EnaSupportがtrueの物はENA対応されているので問題なし。
AMIを取得して運用している場合はAMIも適用されている必要があるはず。(非対象AMIから起動した際に非対象のインスタンスになる)
AMIがサポートしているかどうかは
aws ec2 describe-images --owners self --query "Images[].[ImageId, Name, EnaSupport]"
で調べられる。らしい。
ドライバインストールの有無を調べる。
インスタンスがサポートしているかと実際ENAのドライバが使われているかは別問題。
対象サーバ上で modinfo ena
を実行する。
モジュール情報が取得できるならばモジュールは存在している。
取得できない場合はkernelアップデートが必要なはず。対応しよう。
最新のドライバモジュールはgithub上で開発されている。AmazonLinuxの場合、基本的にはkernelアップデートでインストールされるのであまり気にしないでよい。 GitHub - amzn/amzn-drivers: Official repository of the Elastic Network Adapter (ENA) network adapter for Linux and FreeBSD operating systems
使用されているドライバを検証する。
ethtool -i eth0
NIC一つの場合。NICを複数割り当てている場合は適宜読み替える。
driver: ena の場合、既にENAドライバを使っている。
対策
上記調査結果を受けて適時対策する。
インスタンス属性の変更
インスタンス停止してから作業する必要があるのでインスタンスを停止する。
enaSupport属性の付与をする。
aws ec2 modify-instance-attribute --instance-id instance_id --ena-support
インスタンスを起動する。
ドライバのインストール
カーネルモジュールのアップデートをする。
sudo yum update kernel
カーネルアップデート後は当然リスタートする。
ドライバの有効化
適切なインスタンスタイプ、適切なインスタンス設定、適切なネットワークドライバのすべてが揃っている場合、有効になる模様。
その他
わからないことは公式ドキュメントを熟読するとどこかにヒントくらい存在する。トラブルシュートは先に読んでおくと解決が速いと思う。