13,230
回編集
| 376行目: | 376行目: | ||
# VMに割り当てたばかりのグラフィックボードをディスプレイに接続し、[Begin Installation]ボタンを押下する。<br>全て正しく設定されていれば、そのディスプレイにVMが起動していることがわかる。 | # VMに割り当てたばかりのグラフィックボードをディスプレイに接続し、[Begin Installation]ボタンを押下する。<br>全て正しく設定されていれば、そのディスプレイにVMが起動していることがわかる。 | ||
# Windows10をインストール画面の手順に従ってインストールする。<br>インストール完了後、Windows10のデバイスマネージャーを起動して、マウントされているvirtio-win-<バージョン名>.isoファイルから各種ドライバをインストールする。 | # Windows10をインストール画面の手順に従ってインストールする。<br>インストール完了後、Windows10のデバイスマネージャーを起動して、マウントされているvirtio-win-<バージョン名>.isoファイルから各種ドライバをインストールする。 | ||
<br><br> | |||
== 仮想マシンの設定 == | |||
==== ゲストOSがopenSUSEの場合 ==== | |||
ゲストOSがopenSUSEの場合、/etc/default/grubファイルの<code>GRUB_CMDLINE_LINUX_DEFAULT</code>項目に、<code>pci=noaer</code>オプションを追記する。<br> | |||
GRUB_CMDLINE_LINUX_DEFAULT="... pci=noaer" | |||
<br> | |||
==== AMD CPUのパフォーマンスの改善 ==== | |||
以前、AMD CPUでは、Nested Page Tables(NPT)を無効化することでKVMのGPU性能を引き上げることができた。<br> | |||
これは、バグが原因で、トレードオフとしてCPUの性能が落ちて、がたつきが発生することがあった。<br> | |||
<br> | |||
Linuxカーネル 4.9以降からこの問題を解決するカーネルパッチがマージされている。<br> | |||
LinuxカーネルまたはLinux-LTSカーネルを使用している場合、パッチは既に適用されている。<br> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>QEMU 3.1以降、TOPOEXTフラグは標準で無効化されており、</u><br> | |||
<u>AMD CPUでハイパースレッディングを使用するには、以下のように、手動で有効にする必要がある。</u><br> | |||
<u>cache passthroughの設定は、実際のCPUキャッシュ情報を仮想マシンに渡す。</u><br> | |||
<syntaxhighlight lang="xml"> | |||
<!-- ゲストOSがWindows 10またはSUSEの場合 --> | |||
<cpu mode="host-passthrough" check="none"> | |||
<topology sockets="1" cores="4" threads="2"/> | |||
<cache mode="passthrough"/> | |||
<feature policy="require" name="topoext"/> | |||
</cpu> | |||
<!-- ゲストOSがWindows 7の場合 --> | |||
<cpu mode="host-passthrough"> | |||
<topology sockets="1" cores="4" threads="2"/> | |||
<cache mode="passthrough"/> | |||
<feature policy='disable' name='hypervisor'/> | |||
</cpu> | |||
</syntaxhighlight> | |||
<br> | |||
更にパフォーマンスを向上させるため、以下のように、hypervエレメントを設定する。<br> | |||
<syntaxhighlight lang="xml"> | |||
<!-- ゲストOSがWindows 10の場合 --> | |||
<hyperv> | |||
<relaxed state="on"/> | |||
<vapic state="on"/> | |||
<spinlocks state="on" retries="8191"/> | |||
<vendor_id state="on" value="0123456789ab"/> | |||
<vpindex state="on"/> | |||
<synic state="on"/> | |||
<stimer state="on"/> | |||
<frequencies state="on"/> | |||
</hyperv> | |||
<!-- ゲストOSがopenSUSEの場合 --> | |||
<hyperv> | |||
<relaxed state='on'/> | |||
<vapic state='on'/> | |||
<spinlocks state='on' retries='8191'/> | |||
<vendor_id state='on' value='0123456789ab'/> | |||
</hyperv> | |||
</syntaxhighlight> | |||
<br> | |||
==== GPUがNVIDIA Geforceの場合 (error code 43) ==== | |||
仮想マシンのデバイスマネージャでグラフィックボードを確認すると、"エラー43:ドライバーの読み込みに失敗しました"と表示されて、正常に機能しない場合がある。<br> | |||
この問題は、NVidia GeForceシリーズのみ起こり(QuadroやTeslaにはこの問題は無い)、ユーザが仮想マシンでそれらを使用しようとすると、機能を意図的に無効化する。<br> | |||
理由としては、仮想マシンでグラフィックカードを実行できるようになると、自社の製品の売上に悪影響を与える可能性があるからである。<br> | |||
<br> | |||
GeforceのGPUパススルーを正常に動作させるには、ハイパーバイザがその存在を隠すことで出来る。<br> | |||
具体的な手順は以下の通りである。<br> | |||
<br> | |||
'''手動での設定'''<br> | |||
# まず、仮想マシンを停止する。 | |||
# GPUパススルーを行う仮想マシンのxmlファイルを、以下のように編集する。 | |||
#: sudo EDITOR=nano virsh edit <仮想マシン名> | |||
#: <br> | |||
#: 以下に示すように、<code>vendor_id</code>項目を<code><hyperv></code>セクション内に追記する。この時、<code>value=</code>の値はどんなものでもよい。 | |||
#: <vendor_id state="on" value="123456789ab"/> | |||
#: <br> | |||
#: 次に、状態を非表示にするようにkvmに指示するため、<code><hyperv></code>セクション外の直下に次のコードを追記する。 | |||
#: <kvm><br> <hidden state="on"/><br></kvm> | |||
#: <br> | |||
#: <span style="color:#C00000"><u>上記のvendor_idおよびhidden stateの2つの設定は、Quadro 2000以降のQuadroカードでは不要である。</u></span> | |||
#: <br> | |||
# また、QEMU 4.0上において、仮想マシンにQ35チップセットを使用する場合、<code>features</code>セクション内に以下の設定を記述する。<br><code><ioapic driver="kvm"/></code> | |||
# 最後に、libvirtdを再起動する。 | |||
#: sudo systemctl restart libvirtd | |||
<br> | |||
'''自動での設定'''<br> | |||
GitHubにあるvirsh-patcherパッケージは、簡単に上記の方法を行うことができる。<br> | |||
git clone https://github.com/PassthroughPOST/virsh-patcher virsh-patcher | |||
<br> | |||
以下のコマンドを実行して修正を適用する。<br> | |||
sudo virshpatcher --error43 --vendor-id 123456789ab <仮想マシン名> | |||
<br><br> | <br><br> | ||