Windows EC2 にインストールされているドライバーについて
しばたです。
EC2においてAWSが提供するWindows Serverは初期状態で準仮想化ドライバーなどの特殊なドライバーがインストールされています。
本記事ではこのドライバーについてざっくり触れていきます。
EC2にインストールされているドライバーの種類
AWSが提供するWindows Serverのイメージ(Managed AMI)はAWSで利用可能にするために素のWindows Serverにいくつかの初期設定が施されており、その内容は以下のドキュメントに記載されています。
初期設定の際に次項で説明するデバイスドライバーがインストールされています。
準仮想化ドライバー(PVドライバー)
EC2インスタンスの性能向上を目的として準仮想化ドライバー(PVドライバー)がインストールされています。
PVドライバーは歴史的経緯により複数種類ありますが2019年現在においてはAWS PVドライバー
だけ注目しておけば問題ないでしょう。
RedHat PVドライバー、Citrix PVドライバー
私はあまり過去の経緯を把握できていないのですが、以前のWindowsインスタンスにおいてはRedHat PVドライバー
からCitrix PVドライバー
、そしてAWS PVドライバー
にドライバーが変更された経緯があった様です。
今現在これらのドライバーを選択することは無いでしょうが、古くからあるインスタンスを更新する場合は気を付けてください。
AWS PVドライバー
現在標準でインストールされているPVドライバーで、その実体としては以下に示す複数のシステムドライバーの集合体となっています。
xenbus
: AWS PV Busxeniface
: AWS Interfacexennet
: AWS PV Netrowk Devicexenvbd
: AWS PV Storage Host Adapterxenvif
: AWS PV Network Class
(個々のドライバーに対する詳細はドキュメント化されてない様です)
このためインストールされているAWS VPドライバーのバージョンは特定のレジストリキー(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
)から取得する必要があります。
PowerShellコンソールからだと以下の様にしてバージョンを取得できます。
# AwS PVドライバーのバージョンを取得
Get-ItemProperty HKLM:\SOFTWARE\Amazon\PVDriver | Select-Object Version
また、個別のドライバーのバージョンは以下の様にして取得できます。
# Windows Server 2016 以降
Get-CimInstance -ClassName Win32_SystemDriver |
Where-Object { $_.Name -in ('xenbus', 'xeniface', 'xennet', 'xenvbd', 'xenvif') } |
Select-Object Name, Caption, @{Name = 'Version'; Expression = { (Get-Item $_.PathName).VersionInfo.FileVersionRaw.ToString() } }
# Windows Server 2012 R2以前
function GetFileVersionString ([IO.FileInfo]$FileInfo) {
$ver = $FileInfo.VersionInfo
return ("{0}.{1}.{2}.{3}" -f $ver.FileMajorPart, $ver.FileMinorPart , $ver.FileBuildPart , $ver.FilePrivatePart )
}
Get-WmiObject -ClassName Win32_SystemDriver |
Where-Object { $_.Name -in ('xenbus', 'xeniface', 'xennet', 'xenvbd', 'xenvif') } |
Select-Object Name, Caption, @{Name = 'Version'; Expression = { GetFileVersionString (Get-Item $_.PathName) } }
AWS NVMeドライバー (awsnvme)
ドキュメントにある様にNitro世代のWindowsインスタンスはストレージにアクセスするのにNVMeドライバーを使用します。
EBS ボリュームおよびインスタンスストアボリュームは、Nitro ベースのインスタンスで NVMe ブロックデバイスとして公開されます。NVMe ブロックデバイスを使用するには、AWS NVMe ドライバがインストールされている必要があります。
最新の Windows Server 2008 R2 以降用の AWS Windows AMI には、必要な AWS NVMe ドライバが含まれています。
AWS NVMeドライバーのバージョンは以下のコマンドで取得できます。
# Windows Server 2016 以降
Get-CimInstance -ClassName Win32_SystemDriver |
Where-Object { $_.Name -eq 'awsnvme'} |
Select-Object Name, Caption, @{Name='Version'; Expression={(Get-Item $_.PathName).VersionInfo.FileVersionRaw.ToString()}}
# Windows Server 2012 R2以前
function GetFileVersionString ([IO.FileInfo]$FileInfo) {
$ver = $FileInfo.VersionInfo
return ("{0}.{1}.{2}.{3}" -f $ver.FileMajorPart, $ver.FileMinorPart , $ver.FileBuildPart , $ver.FilePrivatePart )
}
Get-WmiObject -ClassName Win32_SystemDriver |
Where-Object { $_.Name -eq 'awsnvme'} |
Select-Object Name, Caption, @{Name='Version'; Expression={GetFileVersionString (Get-Item $_.PathName)}}
AWS ENAドライバー (ena)
Elastic Network Adapter (ENA)を利用してネットワーク通信するためのネットワークドライバーです。
拡張ネットワーキングの機能を利用する際はこのドライバーがインストールされている必要があります。
AWS ENAドライバーのバージョンは以下のコマンドで取得できます。
# Windows Server 2016 以降
Get-CimInstance -ClassName Win32_SystemDriver |
Where-Object { $_.Name -eq 'ena' } |
Select-Object Name, Caption, @{Name = 'Version'; Expression = { (Get-Item $_.PathName).VersionInfo.FileVersionRaw.ToString() } }
# Windows Server 2012 R2以前
function GetFileVersionString ([IO.FileInfo]$FileInfo) {
$ver = $FileInfo.VersionInfo
return ("{0}.{1}.{2}.{3}" -f $ver.FileMajorPart, $ver.FileMinorPart , $ver.FileBuildPart , $ver.FilePrivatePart )
}
Get-WmiObject -ClassName Win32_SystemDriver |
Where-Object { $_.Name -eq 'ena' } |
Select-Object Name, Caption, @{Name = 'Version'; Expression = { GetFileVersionString (Get-Item $_.PathName) } }
AWS SR-IOVドライバー (vxn)
特定のインスタンスタイプのEC2ではSR-IOVを使用した高性能なネットワーク通信を行うことが可能です。
ただドキュメントを読む限りではSR-IOVの機能自体はENAでも使えますし、AWSのドキュメントに記載されているSR-IOVドライバーはIntel 82599 Virtual Function (VF) インターフェイス向けのドライバーを指している様です。
ENAおよびVFインターフェースが利用可能なインスタンスタイプについては以下のドキュメントをご覧ください。
AWS SR-IOVドライバーのバージョンは以下のコマンドで取得できます。
# Windows Server 2016 以降
Get-CimInstance -ClassName Win32_SystemDriver |
Where-Object { $_.Name -eq 'vxn' } |
Select-Object Name, Caption, @{Name = 'Version'; Expression = { (Get-Item $_.PathName).VersionInfo.FileVersionRaw.ToString() } }
# Windows Server 2012 R2以前
function GetFileVersionString ([IO.FileInfo]$FileInfo) {
$ver = $FileInfo.VersionInfo
return ("{0}.{1}.{2}.{3}" -f $ver.FileMajorPart, $ver.FileMinorPart , $ver.FileBuildPart , $ver.FilePrivatePart )
}
Get-WmiObject -ClassName Win32_SystemDriver |
Where-Object { $_.Name -eq 'vxn' } |
Select-Object Name, Caption, @{Name = 'Version'; Expression = { GetFileVersionString (Get-Item $_.PathName) } }
EC2WinUtil ドライバー (ec2winutildriver)
ドキュメントには
トラブルシューティング用
とだけ記載されているドライバーです。
具体的に何をしてくれのかは不明ですがおそらくAWSサポート用なのでしょう。
EC2WinUtilドライバーのバージョンは以下のコマンドで取得できます。
# Windows Server 2016 以降
Get-CimInstance -ClassName Win32_SystemDriver |
Where-Object { $_.Name -eq 'ec2winutildriver' } |
Select-Object Name, Caption, @{Name = 'Version'; Expression = { (Get-Item $_.PathName).VersionInfo.FileVersionRaw.ToString() } }
# Windows Server 2012 R2以前
function GetFileVersionString ([IO.FileInfo]$FileInfo) {
$ver = $FileInfo.VersionInfo
return ("{0}.{1}.{2}.{3}" -f $ver.FileMajorPart, $ver.FileMinorPart , $ver.FileBuildPart , $ver.FilePrivatePart )
}
Get-WmiObject -ClassName Win32_SystemDriver |
Where-Object { $_.Name -eq 'ec2winutildriver' } |
Select-Object Name, Caption, @{Name = 'Version'; Expression = { GetFileVersionString (Get-Item $_.PathName) } }
EC2にインストールされているドライバーの一覧
OSによって初期インストールされているドライバーは異なり、最初に触れたマネージド AWS Windows AMIによると2019年8月現在は以下の様になっています。
ドライバー | Windows Server 2008 | Windows Server 2008 R2 | Windows Server 2012 | Windows Server 2012 R2 | Windows Server 2016 | Windows Server 2019 |
---|---|---|---|---|---|---|
RedHat PVドライバー | - | - | - | - | - | - |
Citrix PVドライバー | 〇 | - | - | - | - | - |
AWS PVドライバー | - | 〇 | 〇 | 〇 | 〇 | 〇 |
AWS NVMeドライバー | - | 〇 | 〇 | 〇 | 〇 | 〇 |
AWS ENAドライバー | - | 〇 | 〇 | 〇 | 〇 | 〇 |
AWS SR-IOVドライバー | - | - | - | 〇 | 〇 | 〇 |
EC2WinUtil ドライバー | - | 〇 | 〇 | 〇 | 〇 | 〇 |
(SACのWindows Serverは除外)
各種ドライバーのアップグレード
最後に各種ドライバーのアップデート方法について触れておきます。
公式な手順としては以下のドキュメントにまとめられています。
- AWS PVドライバー : Windows インスタンスで PV ドライバーをアップグレードする
- AWS NVMeドライバー : AWS NVMe ドライバーのインストールまたはアップグレード
- AWS ENAドライバー : Windows での拡張ネットワーキングの有効化
- AWS SR-IOVドライバー : Windows での拡張ネットワーキングの有効化
- EC2WinUtilドライバー : ドキュメントなし
正直非常にわかりにくいです...
ですが、EC2WinUtilドライバー以外はAWS Systems MangerのAWS-ConfigureAWSPackage
ドキュメントを使いアップグレードすることができますので極力このドキュメントを使う様にすると良いでしょう。
AWS-ConfigureAWSPackageによるドライバーのアップグレード
AWS-ConfigureAWSPackage
は以下の引数を取りますが、Name
引数に各ドライバーの名称を指定するとドライバーを更新することができます。
- Action : Install
- Name : (下表参照)
- Version : (Optinal) 必要がある場合ドライバーのバージョンを指定
ドライバー | Name引数に指定する値 |
---|---|
AWS PVドライバー | AWSPVDriver |
AWS NVMeドライバー | AWSNVMe |
AWS ENAドライバー | AwsEnaNetworkDriver |
AWS SR-IOVドライバー | IntelSriovDriver |
細かい説明は端折りますが例えばAWS PVドライバーを更新する場合は以下の様な指定となります。
実行結果はこんな感じです。
今回は選択したインスタンスが新しいため同じバージョンの再インストールをしてしまっていますが雰囲気は掴めるかと思います。