0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EC2 T4gインスタンスとNitro Systemの仕組みを、実際のスペックを見ながら整理してみた

0
Posted at

はじめに

業務でEC2 T4gインスタンス(t4g.medium)を使っていて、「Gravitonって何が違うの?」「Nitro Systemって結局何してるの?」という疑問が出てきたので、実際のインスタンスのスペックを見ながら整理しました。

EC2 T4gインスタンスとは

T4gは、AWSが独自設計したARMベースのCPU「Graviton2」を搭載したバースト可能なインスタンスです。

同じバースト型のT3(x86ベース)と比べて、最大40%コストパフォーマンスが高いとされています。

T3との違いを一言で言うと

T3はIntelやAMDのx86 CPU、T4gはAWS独自のARM CPUを使っています。アーキテクチャが違います。

x86とARMの違い

ここを理解しないとGravitonの立ち位置がわかりません。

CPUには設計思想が2つあります。

CISC(Complex Instruction Set Computer)

1つの命令で複雑な処理をこなす設計です。メモリが高価だった時代に「少ない命令で多くの処理を」という発想から生まれました。IntelやAMDのx86系がこれにあたります。

通常のEC2インスタンス(T3、M5、C5など)はx86ベースです。

RISC(Reduced Instruction Set Computer)

命令をシンプルにして、1命令あたりの実行を速くする設計です。省電力で処理できるため、スマートフォンやタブレット(Apple M1/M2チップなど)で広く使われています。

GravitonのEC2インスタンス(T4g、M6g、C6gなど)はARMベースで、こちらの設計思想です。

Gravitonとは

AWSが独自に設計したARMベースのプロセッサです。x86インスタンスと同程度の性能であれば、20%程度コストが抑えられます。EC2だけでなくAurora、RDS、EKSなどのマネージドサービスでも利用可能です。

Graviton2では、初代Gravitonと比較してパフォーマンスが7倍、コンピューティングコア数が4倍、キャッシュが2倍、メモリ速度が5倍に向上しています。2023年末にはGraviton4が発表されており、インスタンス名に「g」が含まれるものがGravitonベースです。

T4gのバースト動作の仕組み

T4gは「バースト可能」なインスタンスです。常にフルパワーで動くのではなく、普段は低いベースラインCPUで動作し、必要なときだけ一時的にCPU使用率を引き上げます。

CPUクレジットの仕組み

ベースライン未満で動作しているとき → クレジットが貯まる
ベースラインを超えて動作しているとき → クレジットを消費する

無制限モードと標準モード

T4gはデフォルトで無制限モードで動作します。24時間の平均CPU使用率がベースラインを下回っていれば、一時的なスパイクに追加料金はかかりません。

長時間ベースラインを超え続ける場合は、vCPU時間あたり0.04 USDの追加料金が発生します。標準モードでは、貯まったクレジットを使い切るとバーストが止まります。

T4gインスタンスのスペック一覧

サイズ vCPU メモリ(GiB) ベースライン/vCPU クレジット取得/時間 ネットワーク(Gbps) EBS帯域(Mbps)
t4g.nano 2 0.5 5% 6 最大5 最大2,085
t4g.micro 2 1 10% 12 最大5 最大2,085
t4g.small 2 2 20% 24 最大5 最大2,085
t4g.medium 2 4 20% 24 最大5 最大2,085
t4g.large 2 8 30% 36 最大5 最大2,780
t4g.xlarge 4 16 40% 96 最大5 最大2,780
t4g.2xlarge 8 32 40% 192 最大5 最大2,780

実際のt4g.mediumの使用状況

実運用中のt4g.mediumインスタンスのリソース使用状況を見てみます。

インスタンス情報

項目
インスタンスタイプ t4g.medium
vCPU 2
メモリ 約4GB(3.7GiB)
CPUアーキテクチャ ARM64 (aarch64) Neoverse-N1
OS Ubuntu 24.04.3 LTS / Kernel 6.8.0-1029-aws
EBSルートディスク 6.8GB(使用率58%)

CPU使用率(プロセス別)

プロセス %CPU 備考
amazon-cloudwatch-agent 0.3% CloudWatchログ転送
ssm-session-worker 0.2% SSMセッション
quarkus-run.jar 0.1% Javaバックエンド(Quarkus)
その他 0%付近 待機または低負荷

全体的なCPU使用率は約1%以下で、ほぼアイドル状態です。t4g.mediumのベースラインは20%なので、クレジットが常に貯まり続けている状態です。

メモリ使用状況

項目
メモリ総量 3.7 GiB
使用中 685 MiB
空き 247 MiB
バッファ/キャッシュ 3.0 GiB(実質利用可能 3.1 GiB)
Swap なし(未設定)

Java(Quarkus)が最もメモリを使っていますが、全体の6%未満です。Swap無しでも余裕があります。

ディスク使用状況

マウント サイズ 使用済 空き 使用率
/ (ルート) 6.8G 3.9G 2.9G 58%
/boot 891M 107M 722M 13%
/boot/efi 98M 6.4M 92M 7%

ルートディスクが58%で、ログやビルド成果物が増えてきたら拡張を検討するラインです。

アプリ別リソース使用率まとめ

コンポーネント %CPU %MEM 備考
Quarkus (Java) 0.1% 5.9% 主力アプリ。ヒープがやや大きめ
Nginx - 微量 軽量のため無視レベル
Vite/JS (フロント) - - 常駐していない。ビルド時のみ一時的に負荷増
CloudWatch Agent 0.3% 2.9% 監視用途として適正
FluentBit 0.0% 1.6% ログ収集。軽量
SSM Agent 0.2% 0.6% 定常動作

このワークロードならt4g.mediumで十分すぎるくらいです。t4g.smallでも動きそうですが、Javaのヒープを考えるとmediumが安全圏です。

AWS Nitro System

ここからが本題です。T4gを含むすべての最新EC2インスタンスは、Nitro System上で動いています。

Nitro Systemとは

2013年に発表された、EC2の仮想化を支える基盤技術です。従来のXenハイパーバイザーを置き換えました。

従来は1つのソフトウェア(Dom0)がネットワーク・ストレージ・セキュリティを全部管理していましたが、Nitroではそれぞれを専用のハードウェアチップ(カード)に分担させています。

従来のXenベース仮想化の課題

従来のXenでは、Dom0(Domain 0)という管理用の仮想マシンがネットワークやストレージの処理を一手に引き受けていました。

これには問題がありました。

  • CPUリソースがDom0のI/O処理に奪われる
  • オーバーヘッドが増大する
  • セキュリティ上の攻撃面が大きく複雑になる

Nitro SystemではDom0を廃止し、これらの処理を専用ハードウェアにオフロード(別の部品に仕事を任せて本体の負荷を減らすこと)しています。

ハイパーバイザーとは

物理サーバーのハードウェア上に直接載せる仮想化ソフトウェアです。この上に仮想マシン(EC2インスタンス)を複数動かします。このタイプの仮想化を「ハイパーバイザ型」と呼びます。

Nitro Systemの構成要素

Nitro Systemは5つの主要コンポーネントで構成されています。

1. Nitro Card

サーバー内の「分担チップ」です。ネットワーク通信・ディスクIO・セキュリティなどの処理を、それぞれ専用のカードが担当します。

カード 役割
Nitro Card for VPC ネットワーク通信の処理(データの出入りを高速化)
Nitro Card for EBS EBSボリュームとのデータ転送を高速化
Nitro Card for Instance Storage ローカルNVMeストレージの制御
Nitro Card Controller 各カードのまとめ役

2. Nitro Security Chip

セキュリティを専用ハードウェアで守るチップです。AWSのエンジニアですらインスタンス内部に直接アクセスできないようにするロックダウン設計です。人為的なミスや不正を、人に頼らずハードウェアレベルで防止します。

3. Nitro Hypervisor

EC2インスタンスを動かすための仮想化ソフトです。ただし従来のハイパーバイザーと違い、CPUとメモリの管理だけを行います。ネットワークやストレージの処理はNitro Cardに任せるため、非常に軽量で、ほぼベアメタル(物理サーバー直接)と同じ性能が出ます。

4. AWS Nitro Enclaves

EC2インスタンスの中に「外部と完全に隔離された空間」を作る仕組みです。メインOSからもアクセスできず、個人情報・医療データ・金融データなどを安全に処理できます。暗号化キーの一時的な取り扱いなどに使います。

5. NitroTPM

TPM(Trusted Platform Module)のクラウド版です。サーバーが「自分は安全に起動した」と証明するための仕組みで、OSやアプリが安全に鍵を管理できます。鍵はAWS内部で暗号化・分離され、インスタンス自身も中身を読めません。WindowsのBitLockerやLinuxのSecure Bootにも対応しています。

各コンポーネントの役割分担

目的 担当
高速化 Nitro Card(VPC/EBS等)
セキュリティ Nitro Security Chip / Nitro Enclaves / NitroTPM
性能維持 Nitro Hypervisor(軽量)
人為ミス防止 ロックダウン設計(AWS社員も触れない)

パケットの流れ:EC2からネットワークへ

Nitro Systemがどう動いているのか、パケットの送信を例に見てみます。

アプリケーション
  ↓
OS(Linuxカーネル)のネットワークスタック
  ↓
ENAドライバ(仮想NICを制御)
  ↓
Nitroカード(ハードウェアNIC)
  ↓
Ethernet

ENA(Elastic Network Adapter)は新世代のネットワークアダプターで、旧世代の最大10Gbpsから最大20Gbpsまでサポートするようになりました。AWSの基本的なAMIではデフォルトで有効です。

Nitroカード内部の5段階処理

Nitroカード内部ではパケットを以下の流れで処理します。

第1段階:Txリングバッファへの投入

OSがENAドライバ経由でパケットをリングバッファ(キュー)に書き込みます。パケットの5-tuple(送信元IP、宛先IP、プロトコル、送信元ポート、宛先ポート)からハッシュを計算し、複数のキューに分散します。

第2段階:パケット読み取りとVPC情報の処理

Nitroカードがキューからパケットをポーリングし、VPC情報を参照して処理します。ルートテーブルで宛先経路を決定し、NACLとセキュリティグループで評価して、許可されないパケットはドロップします。

NitroカードにはVPCの情報が記録されているため、ハードウェアレベルでAWSの仮想ネットワーク機能を実現できます。

第3段階:物理位置のマッピング

AWS内部のマッピングサービスから宛先インスタンスの物理的な場所を取得し、隣接情報を記録して次回の処理を高速化します。

第4段階:コネクショントラッキングとフローキャッシュ

パフォーマンス向上の要です。

コネクショントラッキングでは、初回パケットで5-tupleをキーとして通信の関係性やSG/NACLの許可済み判定を保存します。

フローキャッシュでは、隣接情報などをNitroカード内に保存します。キャッシュにヒットすれば、SGやNACLの再評価をスキップして即転送できます。同じフローのパケットは2回目以降の処理が大幅に高速化されます。

第5段階:パケットの物理送出

Nitroカード内の処理が完了したパケットを、物理NICを通じて外部へ送信します。

Nitro Systemが速い3つの理由

ハードウェアオフロード

従来ソフトウェアでやっていた処理をハードウェアに移すことで、CPUオーバーヘッドを大幅に削減しています。

5-tuple最適化

パケットの5-tupleをハッシュ化して複数のCPUコアやNICキューに分散する仕組み(RSS: Receive Side Scaling)を使っています。同じフローは常に同じCPUコアで処理されるため、キャッシュ局所性が維持され、キャッシュミスやロック競合を防ぎます。

結果として毎秒数百万パケットのスループットを実現しています。

フローキャッシュ

Nitroカード上のハードウェア(SmartNIC / DPU)のSRAMやDRAMにキャッシュされています。OSカーネルやEC2インスタンスのメモリではなく、ハイパーバイザーを極力通さず、NIC上のハードウェア内で完結します。

キャッシュにヒットすればルーティング判定やセキュリティチェックをスキップして即転送。ミスした場合のみ再計算してキャッシュに格納します。これにより、DPUレベルでワイヤレート(線速)転送が可能になります。

Nitro Card for EBSとNitro Card for Instance Storageの違い

この2つは名前が似ていますが、役割がまったく違います。

Nitro Card for EBS

EBS(Elastic Block Store)との通信をハードウェアで処理するカードです。EBSは実体が別の物理ストレージ(ネットワーク接続型)にあり、永続的なストレージです。インスタンスを削除してもデータは残ります。

EC2インスタンスが /dev/nvme1n1 などを通じてEBSにアクセスすると、Nitro Card for EBSがリクエストを受け取り、AWSバックエンド(EBSサーバ)に直接転送します。

Nitro Card for Instance Storage

ホストマシン上のNVMe SSDを直接インスタンスに割り当てるカードです。一時的なストレージ(ephemeral)で、EC2を停止・削除するとデータは消えます。高速なI/Oが特徴です。

一言で言うと、EBS用は「永続ストレージとのネットワーク通信を最適化するカード」、Instance Storage用は「ローカルNVMeを直接制御するカード」です。

EBSのKMS暗号化とNitro Cardの連携

EBSボリュームをKMSで暗号化した場合、その暗号化処理はOSではなくNitro Card for EBSがハードウェアレベルで実行します。

処理の流れ

  1. EBSボリューム作成時にKMSキー(CMK)を指定して暗号化を有効にする
  2. KMSがデータ暗号鍵(DEK)を生成し、CMKで暗号化した状態でNitroに渡す
  3. Nitro Card for EBSがハードウェア内部のセキュア領域でDEKを復号し、専用メモリに保持する。OSやハイパーバイザーはDEKにアクセスできない
  4. EC2がEBSに読み書きするたびに、Nitro CardがリアルタイムでAES-256暗号化/復号を実行する。Nitroカード内で完結するため、CPU負荷はほぼゼロ
  5. 暗号化済みデータだけがネットワークを通ってEBSバックエンドに保存される。EBSバックエンドやホストOSは平文を見ない

LUKSやBitLockerのようにOSが暗号化しているわけではないので、パフォーマンス低下がほぼありません。管理者が鍵を直接扱う必要もなく、ハイパーバイザー経由でも復号できないという設計です。

NitroTPMに保管されるもの・されないもの

NitroTPMが扱うのは「システムの信頼性や鍵管理のための低レベルな暗号鍵」です。

保管されるもの

  • BitLocker / LUKS のディスク暗号化鍵
  • Secure Boot の署名検証鍵
  • OS が TPM API 経由で生成する鍵
  • Windows Hello / Credential Guard の秘密鍵

保管されないもの

EC2にインストールしたSSL/TLS証明書(/etc/ssl/certs/に置くWebサーバ証明書など)は保管されません。NitroTPMは「プラットフォームレベルの暗号鍵」を管理するものであり、アプリケーションレベルの証明書は対象外です。

まとめ

T4gインスタンスは、Graviton2(ARM)による低コストと、Nitro Systemによる高速化・セキュリティ強化の両方を享受できるインスタンスです。

Nitro Systemの設計思想は「速く、安全で、人間にも触れられないクラウド基盤」です。ネットワーク・ストレージ・セキュリティの処理を専用ハードウェアにオフロードし、ハイパーバイザーを極限まで軽量化することで、ほぼベアメタルと同等の性能を仮想環境で実現しています。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?