|
|
667行目: |
667行目: |
|
| |
|
| == エラー時の対処方法 == | | == エラー時の対処方法 == |
| ==== ゲスト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パススルーに関するエラー(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>
| |
| | |
| ===== ネットワーク =====
| |
| VM起動時に下記のエラーが出力されて、VMが起動できないことがある。<br> | | VM起動時に下記のエラーが出力されて、VMが起動できないことがある。<br> |
| ERROR Requested operation is not valid: network 'default' is not active | | ERROR Requested operation is not valid: network 'default' is not active |
803行目: |
715行目: |
| sudo virsh net-define --file default.xml | | sudo virsh net-define --file default.xml |
| <br> | | <br> |
| | | ==== ファイアーウォール ==== |
| ===== ファイアーウォール =====
| |
| VM起動時に下記のエラーが出力されて、VMが起動できないことがある。<br> | | VM起動時に下記のエラーが出力されて、VMが起動できないことがある。<br> |
| error: Failed to start network default | | error: Failed to start network default |
816行目: |
727行目: |
| sudo systemctl restart libvirtd | | sudo systemctl restart libvirtd |
| <br> | | <br> |
| ===== DNSマスカレード =====
| | ==== DNSマスカレード ==== |
| VM起動時に下記のエラーが出力されて、VMが起動できないことがある。<br> | | VM起動時に下記のエラーが出力されて、VMが起動できないことがある。<br> |
| error: Failed to start network default | | error: Failed to start network default |