ESXi ホストに搭載されているグラフィックボードを仮想マシンで使えるようにするための手順についてまとめました。
環境
【CPU】Intel Core i5 9400 【マザーボード】ASRock H370M Pro4 【ビデオカード】GeForce GTX 1660 (GIGABYTE GV-N1660OC-6GD) 【サウンド】なし(オンボード) 【ESXi】7.0.1 (ビルド番号:17325551)
UEFI の設定(ASRock)
グラフィックボードの利用設定とハードウェアの仮想化支援機能である VT-d の有効化、またパススルー設定の妨げにならないように内蔵グラフィックスを無効化しておきます。 「アドバンスド」のページに移り、以下の3つの項目を設定します。 *1 *2
- プライマリグラフィックアダプター -> [PCI Express]
- VT-d -> [有効]
- IGPU マルチモニタ -> [無効]
なお、内蔵オーディオを無効にしないとうまくいかないという記事がいくつかありましたが、手元の環境ではこの設定値の差による影響は確認できませんでした。 ただ、グラフィックボードはオーディオ周りにも影響するようなので、気になる場合は無効にしておくといいかもしれません。 *3
ESXi の設定
グラフィックボードのパススルー設定
PCI の管理画面から目的のグラフィックボードをパススルーするように設定します。管理画面には VMware Host Client から以下のようにしてアクセスできます。
- ナビゲータ -> ホスト -> 管理
- ハードウェア -> PCI デバイス
PCI デバイスの管理画面ではパススルー設定が可能なデバイスだけが有効状態で表示されているはずです。 今回設定した GTX 1660 の場合は4つの項目がセットで表示されていました。
パススルー設定をするにはチェックボックスにチェックを入れ、表の上部にある「パススルーの切り替え」を押す必要があるのですが、 不具合があるようでこのままの状態でその操作すると表示が乱れてうまく設定できません。 *4
これを防ぐために右上の検索ボックスに gtx などと入力して項目を1つに絞り込んでおきます。
表示されている項目が1つのみであることを確認した上で、チェックボックスにチェックを入れてから「パススルーの切り替え」を押下してパススルーの設定を行います。
これにより残り3つの項目もセットでパススルーされる設定に切り替わります。 4つの項目のパススルー設定が「アクティブ」になっていれば OK です。 *5
ESXi の再起動後にもパススルー設定を継続させる
上記手順が完了していればグラフィックボードを仮想マシンで使うための設定はできているのですが、 ESXi をシャットダウンや再起動してしまうとこの設定が正しく認識されないという問題が発生してしまいます。
この状態になった場合は、一度パススルー設定を解除してから再度パススルー設定をすることで正常に動作するようになります。 ですが、再起動の度にこの操作をするのは少し面倒です。
調べてみると標準の VGA ドライバーを無効化することで事象を回避することができるようです。
ESXi ホストに SSH などでアクセスし、以下のコマンドを入力することで VGA ドライバーを無効化します。
# VGA ドライバーを無効化するためのコマンド: esxcli system settings kernel set -s vga -v FALSE # 戻す場合のコマンド: # esxcli system settings kernel set -s vga -v TRUE
注意として、VGA ドライバーを無効にした状態だと ESXi ホスト機器のディスプレイ出力につないだ画面は以下のような表示になってしまいます。 そのためディスプレイ出力からはダイレクトコンソールの利用が不可になります。
ESXi の起動処理の途中でこの表示に切り替わるため、ちゃんと起動しているか不安になりますが、 処理自体は裏で継続しているので焦らず待てば VMware Host Client などが立ち上がってきてくれるので、別の端末から Web ブラウザなどでアクセスできます。
以上で ESXi ホストの設定は完了です。あとは GPU を利用したい仮想マシンごとに設定をしていきます。
仮想マシンの設定(Windows 10)
Windows 10 の仮想マシンではパススルーによりグラフィックボードを利用可能にした状態で再起動をするとグラフィックボードのドライバが「エラーコード 43」で異常停止してしまうという不具合があるため、これを回避する対策も併せて設定します。
仮想マシンの設定の編集から以下の項目を設定していきます。
- 仮想ハードウェア -> CPU -> 「ハードウェア アシストによる仮想化をゲスト OS に公開」のチェックをオフ
- 仮想ハードウェア -> メモリ -> 「すべてのゲスト メモリを予約 (すべてロック)」のチェックをオン
- 仮想ハードウェア -> その他のデバイスの追加 -> PCI デバイス (目的のグラフィックボードを追加)
- 仮想マシンオプション -> 詳細 -> 設定の編集 -> パラメータの追加 -> 「hypervisor.cpuid.v0 : FALSE」を追加
また仮想マシンの起動後に以下の作業を行います。
- NVIDIA の公式サイトから最新のドライバーをインストール
- 再起動時の「エラーコード 43」対策のために「devcon.exe」が自動実行されるよう設定
- hashcat のインストール(オプション)
具体的な設定手順は以下の通りです。
CPU の設定
CPU の設定を展開して「ハードウェア アシストによる仮想化をゲスト OS に公開」のチェックがオフであることを確認にします。 *6
このチェックがオンの状態で仮想マシンを起動しようとすると「ネストされたハードウェア アシストによる仮想化が有効な場合、PCI パススルー デバイスは追加できません。」とエラーが表示され起動に失敗します。
メモリの設定
メモリの設定を展開して「すべてのゲスト メモリを予約 (すべてロック)」のチェックがオンであることを確認します。
PCI デバイスとしてグラフィックボードを追加
PCI デバイスの追加からパススルー設定したグラフィックボードを仮想マシンに割り当てます。
設定の編集の右上にある「その他のデバイスの追加」から「PCI デバイス」を選択することで、 設定の最下段の項目に PCI デバイスの欄が追加されます。
他のデバイスがなければ初期選択でグラフィックボードが選択されていると思いますが、 目的のデバイスと異なる場合はプルダウンメニューになっているので適切なデバイスに変更します。
なお PCI デバイスの欄は設定の保存後にグレーアウトしてしまうので、 変更するには一度その PCI デバイスの項目を削除(右端の X ボタンを押下)してから改めて新規追加する必要があります。
hypervisor.cpuid.v0 パラメータの追加
最後に「仮想マシンオプション」のタブに移って「hypervisor.cpuid.v0」というパラメータを追加します。 「詳細」の項目を展開し「設定の編集」をクリックします。
左上の「パラメータの追加」を押下すると最下段に「クリックして編集」という項目が追加されます。 この文字はクリックしても消えないので、自分で消してキーに「hypervisor.cpuid.v0」、値に「FALSE」を上書きして OK を押下して設定内容を保存します。
このパラメータはソフトウェアなどが仮想マシン上で実行されていることを認識できるようにするかどうかの設定値らしく、 TRUE の場合に仮想マシン上であると認識できるようになるようです。
NVIDIA のドライバーは仮想環境を検知すると非標準構成と判断してドライバーを停止させてしまうらしく、これを防ぐために FALSE に設定しておく必要があります。 *7
以上で仮想マシンの設定はひとまず終わりです。引き続き、起動させてからの設定を行っていきます。
起動後の作業:最新のドライバーをインストール
仮想マシンを起動し、NVIDIA の公式サイトから利用するグラフィックボードに対応した最新のドライバーをダウンロードしてインストールします。
- NVIDIAドライバダウンロード
https://www.nvidia.co.jp/Download/index.aspx?lang=jp
基本的に初期選択されている項目のまま次へと進めていけばいいですが、特に必要なければ GeForce Experience はインストールしなくても構いません。
起動後の作業:「エラーコード 43」対策( devcon.exe の自動実行設定)
ドライバーをインストールした時点でグラフィックボードは利用可能な状態になっています。
ですが、Windows 10 の場合はこのままだと仮想マシンをシャットダウンや再起動した際にグラフィックボードのドライバーが「エラーコード 43」として停止してしまいます。 この状態になると ESXi ホストを再起動しないと復旧しないなど手間がかかります。 *8 *9
対処法としては、シャットダウンや再起動前にデバイスマネージャーからグラフィックボードのドライバを無効化しておくことで事象を回避することができます。 この方法はエラーが発生していない状態で実行した場合のみに有効で、エラーが発生してからこの手順を踏んでもエラーは解消されません。
これを毎回手動でするのは手間なので devcon.exe という Windows Driver Kit (WDK) に含まれているデバイスを操作するツールを利用して自動化します。 *10
Windows Driver Kit (WDK) はそれなりのファイル容量があるため、そのまま導入するには手間がかかります。 必要なのは devcon.exe のみなので、以下のリンクからこのファイルが含まれるアーカイブのみをダウンロードします。
アーカイブに含まれている「filbad6e2cce5ebc45a401e19c613d0a28f」というファイルが devcon.exe なのでファイル名を「devcon.exe」に戻し、パスの通っている場所に保存します。
とりあえずは %USERPROFILE%\AppData\Local\Microsoft\WindowsApps
あたりに放り込んでおいてもいい気がします。 *11
次に、仮想マシンの起動時/終了時にグラフィックボードのドライバが有効化/無効化するためのスクリプトを作成します。
- スタートアップ時のスクリプト:enableGPU.bat
devcon enable "PCI\VEN_10DE&DEV_2184"
- シャットダウン時のスクリプト:disableGPU.bat
devcon disable "PCI\VEN_10DE&DEV_2184"
指定する引数はデバイスごとに異なります。上記は GTX 1660 の場合のスクリプトです。 必要な情報はデバイスインスタンスパスで確認できます。
ベンダーIDとデバイスIDを渡しておけば問題ないと思いますが、 コマンドが正常に動作することを事前に管理者権限のコマンドプロンプト上で確認をしておくとよいと思います。
無事に動作することが確認できたら、このスクリプトが仮想マシンの起動時/終了時に実行されるように設定します。
- スタートメニュから「gpedit」を入力し、ローカルグループポリシーエディタを起動します
- コンピュータの構成 -> Windows の設定 -> スクリプト(スタートアップ/シャットダウン) と選択します
それぞれシャットダウン時に「disableGPU.bat」を、スタートアップ時に「enableGPU.bat」を設定します。
スクリプトは登録の際にデフォルトで開かれるようになっていた、以下のフォルダに保存しました。
- C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
- C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown
これでシャットダウンしたとしてもエラーコード43でドライバーが停止することがなくなります。
なお、FF15 のベンチマークなどは VMware Host Client のコンソールからではまともに動作しません。 リモート接続などから実行するとよいと思います。 *12
以上で設定は完了です。
hashcat のインストール(オプション)
GPU を利用するツールとして hashcat という有名なパスワードリカバリーツールがあります。 これを導入して性能検証してみます。
まず hashcat の本体を以下からダウンロードします。ここでの最新版は v6.1.1 でした。
- hashcat - advanced password recovery
https://hashcat.net/hashcat/
ダウンロードした圧縮ファイルを展開して hashcat.exe をそのまま実行しても動きはしますが、いくつか警告が表示されます。
# ベンチマークモードの実行 # [ctrl]+C で止めることができます。 hashcat.exe -b
CUDA SDK Toolkit のインストール
一つ目は CUDA SDK Toolkit がインストールされていないことによるものです。
* Device #1: CUDA SDK Toolkit installation NOT detected. CUDA SDK Toolkit installation required for proper device support and utilization Falling back to OpenCL Runtime
以下のサイトから CUDA Toolkit をダウンロードしてインストールするこで解消されます。
- CUDA Toolkit 11.2 Downloads | NVIDIA Developer
https://developer.nvidia.com/cuda-downloads
インストール自体は初期選択のまま次へをクリックしていくことで完了しますが、インストールには一時的に 20GB 程度の空き容量が必要になります。
インストール後は再起動をした方が無難です。
Kernel exec timeout の無効化
二つ目は Kernel exec timeout 無効化されていないことによるものです。
* Device #1: WARNING! Kernel exec timeout is not disabled. This may cause "CL_OUT_OF_RESOURCES" or related errors. To disable the timeout, see: https://hashcat.net/q/timeoutpatch
- timeout_patch [hashcat wiki]
https://hashcat.net/wiki/doku.php?id=timeout_patch
While running hashcat with extreme performance settings (-w 3 or -w 4) users may experience crashes, followed by automatic recovery of the GPU(s) via driver reset. This is caused by kernel runtimes that exceed the 2-second limit. This feature is useful for preventing screen freezes, but not useful for hash cracking.
上記によると画面がフリーズするのを避けるための仕組みのようです。 hashcat の動作の妨げになるので、特に問題なければこれを無効化します。
テキストエディタなどに以下の内容コピペし、ファイル名を「patch.reg」などで保存してダブルクリックするとレジストリを更新できます。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers] "TdrLevel"=dword:00000000
改めてベンチマークモードで hashcat を実行するとエラーなく実行されます。 *13
仮想マシンの設定(Ubuntu 20.04)
仮想マシンの設定の編集から以下の項目を設定します。 これらについては Windows の場合と同様なので具体的な手順は前述の Windows の記載をご参照ください。
- 仮想ハードウェア -> CPU -> 「ハードウェア アシストによる仮想化をゲスト OS に公開」のチェックをオフ
- 仮想ハードウェア -> メモリ -> 「すべてのゲスト メモリを予約 (すべてロック)」のチェックをオン
- 仮想ハードウェア -> その他のデバイスの追加 -> PCI デバイス (目的のグラフィックボードを追加)
- 仮想マシンオプション -> 詳細 -> 設定の編集 -> パラメータの追加 -> 「hypervisor.cpuid.v0 : FALSE」を追加
仮想マシンの起動後に以下の作業を行います。
- NVIDIA のドライバーをインストール
- hashcat の導入(オプション)
具体的な手順は以下の通りです。
起動後の作業:NVIDIA のドライバーをインストール
念のためにグラフィックボードが認識されているか確認します。
$ lspci -nn | grep -i nvidia 0b:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU116 [GeForce GTX 1660] [10de:2184] (rev a1)
次にインストールすべきドライバーを確認します。 基本的には「recommended」とあるものを選べばよいと思います。
$ ubuntu-drivers devices == /sys/devices/pci0000:00/0000:00:16.0/0000:0b:00.0 == modalias : pci:v000010DEd00002184sv00001458sd00003FC8bc03sc00i00 vendor : NVIDIA Corporation model : TU116 [GeForce GTX 1660] driver : nvidia-driver-455 - third-party free driver : nvidia-driver-418-server - distro non-free driver : nvidia-driver-440-server - distro non-free driver : nvidia-driver-450-server - distro non-free driver : nvidia-driver-450 - distro non-free driver : nvidia-driver-460 - distro non-free recommended driver : xserver-xorg-video-nouveau - distro free builtin == /sys/devices/pci0000:00/0000:00:0f.0 == modalias : pci:v000015ADd00000405sv000015ADsd00000405bc03sc00i00 vendor : VMware model : SVGA II Adapter manual_install: True driver : open-vm-tools-desktop - distro free
「driver : nvidia-driver-460 - distro non-free recommended」とあるので、これをインストールします。 なお数GB程度の空き容量が必要になります。
sudo apt install nvidia-headless-460
インストール後に再起動します。
再起動後に以下のコマンドを実行してグラフィックボードが正しく動作していることを確認します。 ずらずらと表示されていればとりあえず OK です。 うまく認識されていないときは Not Found 的な表示になります。 *14
$ nvidia-smi +-----------------------------------------------------------------------------+ | NVIDIA-SMI 455.32.00 Driver Version: 455.32.00 CUDA Version: 11.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 GeForce GTX 1660 On | 00000000:0B:00.0 Off | N/A | | 0% 49C P8 9W / 130W | 5MiB / 5944MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 892 G /usr/lib/xorg/Xorg 4MiB | +-----------------------------------------------------------------------------+
以上で設定は完了です。
hashcat のインストール(オプション)
GPU を利用するツールとして hashcat という有名なパスワードリカバリーツールがあります。 これを導入して性能検証してみます。
まず hashcat の本体を導入します。
git clone https://github.com/hashcat/hashcat.git
cd hashcat
make
sudo make install
次に CUDA Toolkit を導入します。
NVIDIA の公式サイトからインストール先の環境をポチポチ選択していくと適切なコマンドを教えてくれます。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda-repo-ubuntu2004-11-2-local_11.2.0-460.27.04-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu2004-11-2-local_11.2.0-460.27.04-1_amd64.deb sudo apt-key add /var/cuda-repo-ubuntu2004-11-2-local/7fa2af80.pub sudo apt-get update sudo apt-get -y install cuda
なお、インストールのためには 15GB 程度の空き容量が必要です。
これで hashcat が動作するようになります。 *15
# ベンチマークモードの実行 # [ctrl]+C で止めることができます。 hashcat -b
動作確認
hashcat でハッシュ値の解析をしてみます。
# md5 の解析 hashcat -a 3 -m 0 35e5d160921d131d9114f1b4ee5f9d55
数秒で「hash123」が元の値であるという結果が得られます。
35e5d160921d131d9114f1b4ee5f9d55:hash123 Session..........: hashcat Status...........: Cracked Hash.Name........: MD5 Hash.Target......: 35e5d160921d131d9114f1b4ee5f9d55 Time.Started.....: Wed Jan 20 xx:xx:xx 2021 (1 sec) Time.Estimated...: Wed Jan 20 xx:xx:xx 2021 (0 secs) Guess.Mask.......: ?1?2?2?2?2?2?2 [7] Guess.Charset....: -1 ?l?d?u, -2 ?l?d, -3 ?l?d*!$@_, -4 Undefined Guess.Queue......: 7/15 (46.67%) Speed.#1.........: 7711.3 MH/s (11.29ms) @ Accel:32 Loops:128 Thr:1024 Vec:1 Recovered........: 1/1 (100.00%) Digests Progress.........: 6459228160/134960504832 (4.79%) Rejected.........: 0/6459228160 (0.00%) Restore.Point....: 0/1679616 (0.00%) Restore.Sub.#1...: Salt:0 Amplifier:8832-8960 Iteration:0-128 Candidates.#1....: 8zueran -> 653z2lb Hardware.Mon.#1..: Temp: 58c Fan: 21% Util: 91% Core:1920MHz Mem:4001MHz Bus:16
参考文献
エラーコード43 関連の記事
Deep investigation on GPU Passthrough not working ... - VMware Technology Network VMTN
https://communities.vmware.com/t5/VMware-vSphere-Discussions/Deep-investigation-on-GPU-Passthrough-not-working-anymore-after/m-p/4574126.7U1 vs 6.5U2 passthrough regression - VMware Technology Network VMTN
https://communities.vmware.com/t5/ESXi-Discussions/6-7U1-vs-6-5U2-passthrough-regression/td-p/509540NVIDIA GPU / ESX 6.5 / DELL T320 / PCI Pass-through crash on shutdown : vmware
https://www.reddit.com/r/vmware/comments/f3xsgj/nvidia_gpu_esx_65_dell_t320_pci_passthrough_crash/ZoneMinder Wiki - Wiki - GPU passthrough in VMWare
https://wiki.zoneminder.com/GPU_passthrough_in_VMWareESXI 6.5 GPU Passthrough Quadro Host Rebooting - VMware Technology Network VMTN
https://communities.vmware.com/t5/ESXi-Discussions/ESXI-6-5-GPU-Passthrough-Quadro-Host-Rebooting/td-p/2228131VMware ESXi Windows 10 RTX 2070 passthrough issues, Code 43 : homelab
https://www.reddit.com/r/homelab/comments/fhiz3r/vmware_esxi_windows_10_rtx_2070_passthrough/
ESXi で GPU を扱う仕組み周り
- Using GPUs with Virtual Machines on vSphere - Part 2: VMDirectPath I/O - Virtualize Applications
https://blogs.vmware.com/apps/2018/09/using-gpus-with-virtual-machines-on-vsphere-part-2-vmdirectpath-i-o.html
再起動時にパススルー設定が正しく持続しない問題の解決策
Passthrough of Integrated GPU (iGPU) for standard Intel NUC
https://www.virtuallyghetto.com/2020/06/passthrough-of-integrated-gpu-igpu-for-standard-intel-nuc.htmlVMware vSphere / ESXi 7.0 GA work-around for GPU passthrough issues including disabled-after-reboot bug and UI bug | TinkerTry IT @ Home
https://tinkertry.com/vmware-vsphere-esxi-7-gpu-passthrough-ui-bug-workaround
devcon.exe 関係
Windows Driver Kitをインストールすることなしにdevcon.exeを用意する – guro_chanの手帳
https://www7390uo.sakura.ne.jp/wordpress/archives/705デバイス コンソール (DevCon.exe) のコマンド - Windows drivers | Microsoft Docs
https://docs.microsoft.com/ja-jp/windows-hardware/drivers/devtest/devcon-general-commandsESXi 7.0でNVIDIA RTX2070 Superをパススルーして使う - 蒲田ネット
https://blog.kamata-net.com/archives/12298.html
その他
- vSphere Hypervisor(=ESXi) と NVIDIA GPU のパススルー 令和2年1月版 - Qiita
https://qiita.com/maeda_mikio/items/cb185e93c890dcfca144
付録
UEFI と EFI の関係について
UEFI の仕様策定などを担っている団体「Unified EFI Forum」の QA に記載がされていました。 元々はインテルが著作権を有する EFI という仕様があり、それを業界全体に普及させるためにフォーラムに帰属する形で発展させたものが UEFI ということのようです。
- UEFI FAQs | Unified Extensible Firmware Interface Forum
https://www.uefi.org/faq
WHAT IS THE RELATIONSHIP BETWEEN EFI AND UEFI?
The UEFI specification is based on the EFI 1.10 specification published by Intel®, with corrections and changes managed by the UEFI Forum. Intel still holds the copyright on the EFI 1.10 specification, but has contributed it to the Forum so that the Forum can evolve it. There will not be any future versions of the EFI specification, but customers who license it can still use it under the terms of their license from Intel. The license to the Unified EFI Specification will come from the Forum, not from Intel.
VT-d とは
I/O 仮想化支援機能のひとつで、正式名称を「ダイレクト I/O 向けインテル® バーチャライゼーション・テクノロジー」といい、 この仕組みのおかげで I/O 処理をソフトウェアでエミュレートする必要がなくなり、多数の仮想マシンを搭載したサーバなどでもパフォーマンスの低下を防ぐことができるというもののようです。
インテル® バーチャライゼーション・テクノロジー (インテル® VT)
https://www.intel.co.jp/content/www/jp/ja/virtualization/virtualization-technology/intel-virtualization-technology.htmlIntel® Virtualization Technology for Directed I/O (VT-d): Enhancing Intel platforms for efficient virtualization of I/O devices
https://software.intel.com/content/www/us/en/develop/articles/intel-virtualization-technology-for-directed-io-vt-d-enhancing-intel-platforms-for-efficient-virtualization-of-io-devices.htmlIntel® Virtualization Technology for Directed I/O Architecture Specification
https://software.intel.com/content/www/us/en/develop/download/intel-virtualization-technology-for-directed-io-architecture-specification.html
ESXi に SSH 接続する
Web クライアントのホストのページ上で右クリックするか、歯車アイコンをクリックすると SSH を有効化するメニューが表示されます。
PCI デバイスのベンダIDとデバイスIDの調べ方
ベンダIDとデバイスIDは以下のサイトで確認できます。
- Find unknown devices using a vendor and device ID. | Device Hunt
https://devicehunt.com/
エラー:仮想マシンのパワーオンに失敗しました。モジュール「DevicePowerOn」のパワーオンに失敗しました。
ひとつのグラフィックボードを同時に複数の仮想マシンで利用しようとした場合に表示されるエラーです。 グラフィックボードは複数の仮想マシンに設定することはできますが、同時に利用することはできません。
グラフィックボードを利用している稼働中の仮想マシンを停止することで解消されます。
更新履歴
- 2021/01/18 新規作成
- 2021/01/19 記載を刷新
- 2021/01/20 Ubuntu 20.04 の手順を追記、hashcat に関する記載を追記、一部誤記の修正
- 2023/01/10 一部リンク切れの旨を追記
*1:ASRock の場合は起動時に [F2] か [Del] キーを押すことで設定画面に入れます。
*2:内蔵グラフィックスを有効にした状態での挙動については確認していません。
*3:例えばグラフィックボードを ESXi につなぐと「TU116 High Definition Audio Controller」という項目が PCI デバイスの一覧に表示されます。
*4:表示が乱れた場合は表の操作が困難になりますが、左側にある「電源管理」などを選択して画面を切り替えると直ります。
*5:パススルー設定の反映にはホストの再起動が必要という記事もありましたが、ESXi 7.0.1 では再起動は不要でした。
*6:仮想マシンオプションにある「仮想化ベースのセキュリティの有効化」にチェックが入っている場合はグレーアウトされて変更できません。
*7:この設定がされていない場合は起動後にグラフィックボードが「エラーコード 43」として停止します。 エラーが発生しているかどうかはデバイスマネージャーで確認できます。
*8:ちなみにですが、この状態でグラフィックボードのパススルー設定を切り替えようとすると ESXi ホストがクラッシュしてしまい強制電源 OFF をするはめになります。
*9:手元の環境では適切にグラフィックボードのパススルー設定がされた Ubuntu 20.04 を起動して終了することでもでも正常な状態に戻りました。
*10:なお、この問題は数年前から発生しているようで、これを回避する方法については海外の掲示板で活発に議論されていました。その中には仮想マシンを ESXi 6.5 の仮想マシンとして作成した上で ESXi の設定ファイル /etc/vmware/passthrough.conf を適切なものに修正することで回避できると記載されたものもありましたが、手元の環境ではどうしても再現できませんでした。
*11:スクリプト側を修正してファイルの置いてあるパスを叩く形にしてもいけるはずです。
*12:ちゃんと検証はしていませんが、出力がグラフィックボードではなく標準の VGA ドライバー経由になるためだと思います。
*13:冒頭の色付きのメッセージが気になる場合は hashcat.exe -O -w 3 などと引数を指定して実行すると消えます。
*14:CUDA Toolkit の導入した後の表示なので、表示内容が異なる部分があるかもしれません。
*15:「CL_OUT_OF_RESOURCES」に関する警告表示がされると思います。xorg.conf.d あたりの設定ファイルを修正することで解消できますが、もともとある設定値を削除しないといけないようなので、エラーが発生しなければ特に無視してよいと思います。