インスタンスタイプ変更前に知っておきたい AWS PV ドライバーの話
コーヒーが好きな emi です。
EC2 を運用していると、「インスタンスタイプを変更してスペックアップしたい」というシーンがあるかと思います。お客様から、以下のようなご相談をいただくことがありました。
- 課題
- データ量増加に伴うバッチ処理時間の増加が課題
- データベースの統計情報の更新やインデックスの見直しなどを行っているが改善が見られない
- やりたいこと
- インスタンスタイプ変更による EC2 のスペックアップを試し、バッチ処理完了までの時間が短縮可能か計測したい
調査を進める中で、インスタンスタイプ変更前準備作業として「AWS PV ドライバーの更新」等が必要であることが分かりました。
インスタンスタイプ変更前準備作業としてドライバーの更新等が必要な理由は、古いドライバーのままだとインスタンスが起動しない、もしくはパフォーマンスが低下する可能性があるためです。ドライバーは継続的にバグ修正・セキュリティ・安定性の向上が行われているため、最新化しておくことが推奨されています。
AWS PV ドライバーについては具体的にどのような役割を担っているのか、なぜインスタンスタイプ変更前に更新が必要なのかまでは把握できていなかったため、今回改めて調査してみました。本ブログでは、EC2 インスタンスのデバイスドライバー全体像を整理した上で、AWS PV ドライバーの中身を深掘りしていきます。
なお、本記事の対象は Windows EC2 インスタンスです。Linux インスタンスには AWS PV ドライバーは存在しないため、ご注意ください。
EC2 インスタンスのデバイスドライバー
まず、EC2 インスタンスのデバイスドライバーとは、Amazon EC2 インスタンスの仮想ハードウェアと通信するソフトウェアコンポーネントのこと を言います。
イメージはこんな感じです。

青い点線より上は、責任共有モデルにおいてユーザーが責任を持つ範囲です。つまり、EC2 インスタンスドライバーはユーザーが意識的にメンテナンスする必要があるということです。
これらのデバイスドライバーを通じて AWS 仮想ハードウェアと EC2 がやり取りをすることにより、EC2 インスタンスが正常に動作します。
新しいドライバーリリースには不具合の修正が含まれていたり、現在実行中のインスタンスで活用できる機能拡張が導入されたりする場合があります。
ドキュメントでは以下 3 種類のドライバーが紹介されており、OS によって少し違いがあるようです。
- ネットワークドライバー
- グラフィックスドライバー
- ストレージデバイスドライバー
1. ネットワークドライバー
1-1. Linux インスタンスの場合
以下のドライバーがあります。
- Elastic Network Adapter (ENA) ドライバー
- Elastic Fabric Adapter (EFA) ドライバー
AWS が提供する AMI では通常これらのドライバーがカーネル内に組み込まれています。ただし、古いカーネルを使用している場合は、最新版のドライバーが含まれていなかったり、新しいドライバーに対応していなかったりする可能性があります。最新のドライバーが必要な場合は、Amazon Drivers GitHub リポジトリから入手することも可能です。
1-2. Windows インスタンスの場合
以下のドライバーがあります。
- Elastic Network Adapter (ENA) ドライバー
- AWS PV ドライバー
AWS PV ドライバー(Paravirtual ドライバー)は Windows インスタンス専用のドライバーです。ネットワーク以外のコンポーネントも含まれているため、詳細は後述します。
EFA は Windows インスタンスではサポートされていません。EFA は主に AI/ML や HPC(ハイパフォーマンスコンピューティング)ワークロード向けの機能であり、Linux 環境での利用が前提となっています。
2. グラフィックスドライバー
グラフィックスドライバーには AMD ドライバーと NVIDIA ドライバーがあり、使用する GPU によってインストールするドライバーが異なります。Windows / Linux のどちらでもサポートされており、ネットワークドライバーやストレージドライバーのように OS による大きな違いはありません。
2-1. AMD ドライバー
AMD GPU がアタッチされたインスタンス(G4ad インスタンスなど)で必要となるドライバーです。
AWS では、AMD 社が業務用途向けに提供している AMD Radeon Pro Software for Enterprise(現在は AMD Software: PRO Edition に名前が変わっているようです)というドライバーを利用できます。CAD や 3DCG、映像制作などの業務用グラフィックスワークロードに対応しており、GPU 1 つあたり 4K ディスプレイ 2 枚までの出力に対応しています。
最初から AMD ドライバーがプリインストールされた AMI を使用するか、S3 からドライバーをダウンロードしてインストールすることが可能です。
2-2. NVIDIA ドライバー
NVIDIA GPU がアタッチされたインスタンス(P シリーズや G シリーズのインスタンスタイプなど)で必要となるドライバーです。NVIDIA ドライバーには主に以下の 3 種類があり、ワークロードに応じて選択します。
| ドライバーの種類 | 主な用途 |
|---|---|
| Tesla ドライバー | 機械学習や HPC などの計算ワークロード向け |
| GRID ドライバー | 3D モデルや高解像度動画などのプロフェッショナルな視覚化アプリケーション向け |
| ゲームドライバー | ゲーム用に最適化され、頻繁に更新される |
インスタンスタイプによってサポートされるドライバーが異なるため、詳細は公式ドキュメントを参照してください。
3. ストレージデバイスドライバー
AWS Nitro System 上に構築された EC2 インスタンスでは、Amazon EBS ボリュームやインスタンスストアボリュームが NVMe ブロックデバイスとして公開されます。これらのボリュームの機能を活用するには、EC2 インスタンスに AWS NVMe ドライバーがインストールされている必要があります。
現行世代の AWS が提供する Linux および Windows AMI にはデフォルトで NVMe ドライバーがインストールされています。AWS NVMe ドライバーを持たない AMI を使用する場合は、手動でインストールする必要があります。
※NVMe(Non-Volatile Memory Express)は SSD に最適化された通信プロトコルのことです。NVMe を使用した SSD は従来の SSD よりもデータの読み書きが高速でサイズも小さく、複数の処理を同時に行う能力にも長けています。
3-1. Linux インスタンスの場合
NVMe デバイスは /dev/nvme0n1 や /dev/nvme1n1 などのデバイス名で認識されます。
EC2 起動時のブロックデバイスマッピングで /dev/sdb のように指定したデバイス名は、OS 内では NVMe デバイス名(/dev/nvme[0-26]n1)に変換されます。さらに、NVMe デバイスの番号付けの順序は、ブロックデバイスマッピングで指定した順序とは異なる場合があります。
Linux ではディスクをマウントする際に /etc/fstab というファイルに設定を記述しますが、ここでデバイス名(/dev/nvme1n1 など)を直接指定すると、デバイス名が変わった場合に意図しないボリュームをマウントしてしまうリスクがあります。AWS の公式チュートリアル(Amazon EBS ボリュームを Linux で利用可能にする)でも、/etc/fstab でのマウント例として UUID を使用する方法が紹介されています。
3-2. Windows インスタンスの場合
EC2 側で指定したデバイス名(xvdf など)と、Windows OS 内で実際にディスクに割り当てられる名前(Disk 1 など)は一致しない可能性があります。NVMe デバイスとしてアタッチされた EBS ボリュームの識別には、AWS が提供する ebsnvme-id.exe というツールを使うことで、NVMe デバイスがどの EBS ボリューム ID に対応しているかを確認できます。
なお、AWS NVMe ドライバーバージョン 1.5.0 以降では、SCSI 永続予約の有効/無効を Windows レジストリで設定できるようになっています。SCSI 永続予約は、Windows Server フェイルオーバークラスター(WSFC)や Storage Spaces Direct(S2D)など、複数ノードでディスクを共有するクラスタ構成で必要となる機能です。
Windows インスタンスの SCSI 永続予約を設定する
AWS PVドライバー(Paravirtual Driver)
ここからが私が知りたかった本命です。
AWS PV ドライバー(Paravirtual Driver) とは、Amazon EC2 インスタンスが AWS の仮想ハードウェアにアクセスするためのドライバーソフトウェア一式のことを指します。複数の役割を持つコンポーネントを含んでおり、これらのコンポーネントを使用して、インスタンスストアボリュームや Amazon EBS ボリュームをデバイスにマップするそうです。
AWS PV ドライバーの構成
AWS PV ドライバーは %ProgramFiles%\Amazon\Xentools ディレクトリに格納されます。このディレクトリには、パブリックシンボルと、XenStore のエントリにアクセスできるようにするコマンドラインツール xenstore_client.exe も含まれます。
「パブリックシンボル」とは、ソフトウェア開発やプログラミングにおいて、デバッグやリンクを行う際に使用される「外部から参照可能な関数名や変数名」などの識別情報のことです。何か問題が起きてクラッシュダンプを解析する際に、AWS PV ドライバーの内部状態をデバッガで読み解けるようにする情報が同梱されている、ということです。一般ユーザーが日常的に使うものではなく、高度なトラブルシューティング時に役立つものです。
XenStore とは、仮想化ソフトウェア「Xen」において、Xen ハイパーバイザーが提供する、設定情報・状態情報を保持する共有データベース(キーバリューストア) および通信の仕組みです。ハイパーバイザー(ホスト側)と、その上で動く仮想マシン(ゲスト側 = EC2 インスタンス)の間で情報をやり取りするための「掲示板」のような仕組みで、ホスト側の情報(インスタンスメタデータ、ホスト時刻など)や、ゲスト側の状態などが格納されます。
xenstore_client.exe は、その XenStore に格納されているエントリ(キーと値)にコマンドラインからアクセスするためのツールです。
AWS PV ドライバーが正しく動作していて、ハイパーバイザーと通信できることを示す例として、以下コマンドがドキュメントに記載されています。
PS C:\> [DateTime]::FromFileTimeUTC((gwmi -n root\wmi -cl AWSXenStoreBase).XenTime).ToString("hh:mm:ss")
11:17:00
上記 PowerShell コマンドを実行すると、ハイパーバイザーから現在時刻を取得することができます。
AWS PV ドライバーのコンポーネントは Windows レジストリの HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services の下にリストされています。具体的には以下のドライバーコンポーネントが該当します。
| ドライバーコンポーネント | |
|---|---|
| xenbus | AWS PV Bus |
| xeniface | AWS Interface |
| xennet | AWS PV Network Device |
| xenvbd | AWS PV Storage Host Adapter |
| xenvif | AWS PV Network Class |
各コンポーネントの詳細に関するドキュメントは見つけられませんでした。が、ドライバーコンポーネントの名前から、例えば xeniface はインターフェース関連のドライバーっぽいな、とか、xennet はネットワーク関連のドライバーっぽいな、という感じがします。
このように AWS PV ドライバーには複数のコンポーネントが含まれているため、ネットワークドライバーの位置付けにとどまらず、Windows インスタンスの基盤となる仮想ハードウェアアクセス全般を担うドライバーセットと言えます。
LiteAgent サービス
AWS PV ドライバーには、ユーザーモードで実行される LiteAgent という Windows サービスも含まれています。これは Xen 世代のインスタンスにおいて、AWS API からのシャットダウンイベントや再起動イベントなどのタスクを処理するサービスです。
Windows(や一般的な OS)のプログラム実行には、カーネルモードとユーザーモードという 2 つの動作モードがあります。LiteAgent はドライバー本体(カーネルモード)ではなく、通常のアプリケーション(Windows サービス)として動くということです。
services.msc をコマンドラインから実行することで、LiteAgent をサービスとして確認・管理することができます。
余談ですが、私は以前 Windows マーク + R で「ファイル名を指定して実行」を開き、services.msc と入力してサービスを開いていたのですが、現在はタスクバーの検索窓に直接 services.msc と入力するだけでサービスが起動するようになっているのですね。

古いやり方
Nitro 世代のインスタンスで動作している場合、AWS PV ドライバーは使用されない
上記 LiteAgent サービスに関するドキュメントに、以下の記載がありました。
When running on Nitro generation instances, the AWS PV drivers are not used and the LiteAgent service will self-stop starting with driver version 8.2.4. Updating to the latest AWS PV driver also updates the LiteAgent and improves reliability on all instance generations.
AWS PV drivers
(日本語ドキュメント)Nitro 世代のインスタンスで実行している場合、AWS PV ドライバーは使用されず、ドライバーバージョン 8.2.4 以降では LiteAgent サービスは自動停止します。最新の AWS PV ドライバーに更新すると、LiteAgent も更新され、すべてのインスタンス世代で信頼性が向上します。
Nitro 世代のインスタンスで動作している場合、なんと AWS PV ドライバーは使用されないとのことです。
Windows OS の場合、PV ドライバー + ENA ドライバー + NVMe ドライバーの 3 つが揃っていれば、Xen 世代でも Nitro 世代でも起動できるため、3 つすべてを最新化しておくことが推奨されている、ということのようです。
最新の AWS PV ドライバーのインストール
EC2 Windows インスタンスでの PV ドライバーのアップグレードについては以下ドキュメントに詳細が記載されています。
AWS re:Post にも、EC2 Windows インスタンスでの AWS ドライバーアップグレード方法の記載があります。
インストール方法は以下の 2 つがあります。
- AWS Systems Manager を使用した自動更新
- インストールプログラムを手動で実行
- 手動による Windows Server インスタンスのアップグレード (AWS PV アップグレード)
- ドキュメント内に最新ドライバーパッケージのダウンロードリンクがあります
現在インストールされている AWS PV ドライバーのバージョンは、Windows レジストリの以下の値で確認できます。
HKLM\Software\Amazon\PVDriver\Version
タスクバーの検索欄に regedit と入力して起動すると、レジストリエディタを開けます。
最新バージョンや全履歴については以下の公式ドキュメントを参照してください。
終わりに
EC2 インスタンスを運用している方々の理解の一助となれば幸いです。
本記事への質問やご要望については画面下部の「DevelopersIOへのご意見」からお問い合わせいただけます。
また、私事でございますが 2026/1/24~産休・育休をいただいておりまして、久しぶりのブログ公開となります。実は休業前に調査していた内容だったのですが、出産・育児が想像以上に大変だったため中々仕上げることができず、数か月越しの公開となりました。内容に関しては再度ドキュメントを確認し、今のところすぐに大きく変わるような内容ではないと判断し公開しました。
また頑張っていきます。
参考





