はじめに
先日,Twitterにて @KuniSuzaki
さんと,WSL2のLinuxやVM上でパフォーマンスカウンタ(PMU)を利用する方法についてツイートのやりとりをした.その際,Hyper-V上の仮想マシンでPMUを利用する方法について調べたので整理することにした.
Hyper-VでPMUを利用するための要件
Hyper-Vの仮想マシンでPMUを利用するためには,以下の要件をみたす必要がある.
The virtual machine generation must be 9.1 or higher.
Enabling performance monitoring components in a virtual machine
自ホストに導入されているHyper-VがVersion 9.1以上の仮想マシンをサポートしているかどうかは,PowerShellのGet-VMSupportVersion
コマンドで確認できる.Windows 11での例を以下に示す.
> Get-VMHostSupportedVersion
Name Version IsDefault
---- ------- ---------
Microsoft Windows 10 Anniversary Update/Server 2016 8.0 False
Microsoft Windows 10 Creators Update 8.1 False
Microsoft Windows 10 Fall Creators Update/Server 1709 8.2 False
Microsoft Windows 10 April 2018 Update/Server 1803 8.3 False
Microsoft Windows 10 October 2018 Update/Server 2019 9.0 False
Microsoft Windows 10 May 2019 Update/Server 1903 9.1 False
Microsoft Windows 10 May 2020 Update/Server 2004 9.2 False
Microsoft Windows 10 (Manganese) 9.3 False
Microsoft Windows Server 2022 10.0 False
Microsoft ホスト OS (コバルト+) 10.5 False
Microsoft Windows 11 (22H2) 11.0 True
上の出力結果から,このホストでは,Version 9.1以上の仮想マシンに対応しており,Version 11.0が有効になっていることが確認できる.
仮想マシンの準備
Hyper-V マネージャを使用して,仮想マシンを作成する.
図1のように,PMUtest
という名前で仮想マシンを作成した.仮想マシンの構成バージョンは11.0となっている.この構成バージョンというのは,Get-VMHostSupportedVersion
で表示されるVersionを指しており,11.0であるためPMUを利用するための条件を満たしている.
また,図2の概要にある世代というのは,LegacyBIOSから起動するか,UEFI BIOSから起動するかを指しており,UEFI BIOSから起動する世代2の仮想マシンとなっている.
同様の情報は,以下のPowerShellコマンドでも取得できる.
> Get-VM PMUtest | Format-List Version
Version : 11.0
また,明示的に構成バージョンを指定した仮想マシンを作成したい場合は,PowerShellコマンドで以下のコマンドを実行するとよい.
> New-VM -Name "vmname" -Version 11.0
仮想マシンを作成した後は,任意のLinuxディストリをインストールする.ここではCentOS 9 Streamを選択した.CentOS 9 Streamのインストールについては説明を省略する.
PMUを使用する準備
作成した仮想マシンは,デフォルトの状態ではPMUの使用が無効になっている.有効にするために以下のPowerShellコマンドを実行する.
> Set-VMProcessor PMUTest -Perfmon @("pmu")
なお,PMUの使用を無効にする場合は,以下のPowerShellコマンドを実行する.
> Set-VMProcessor PMUTest -Perfmon @("")
設定が有効になっているか確認する場合は,以下のコマンドを実行する.
> Get-VMProcessor PMUtest | Format-List EnablePerfmon*
EnablePerfmonPmu : True ←PMUが有効になっている.
EnablePerfmonArchPmu : False
EnablePerfmonLbr : False
EnablePerfmonPebs : False
EnablePerfmonIpt : False
動作確認
PMU無効時は図3のように <not supported>
と表示される.PMUを有効にすると,図4のようにパフォーマンスカウンタから取得した値が表示される.
おわりに
本記事では,Hyper-V上の仮想マシンでPMUを利用する方法について,簡単にまとめた.
以下に,本記事を書くにあたり参考にしたウェブページのリンクを記載する.