KVMゲスト仮想ハードウェア設定のXML備忘録
ns-lab BBのサーバは内8台(インスタンス)がKVMゲストなのだが、
先日リリースとなった、kernel-4.18.0のビルドしている時にハマったので備忘録。
ちなみに、下記は仮想サーバ(VirtualMachine)管理にlibvirtを使っている事が前提。
細かい仕様はlibvirtの「Domain XML format」を見れば全部書いてあるので、そちらを参照。
- CPUモデルのパススルー
特に設定していなければ、ゲストインスタンスから見えるCPUモデル(model name)は、
「QEMU Virtual CPU version (cpu64-rhel6)」の様にQEMU仮想CPUとして見えるのだが、
ホストサーバのCPUモデルをそのままゲストにパススルーしたい場合がある。
そんな時は、ゲストインスタンスの定義用xmlファイルに、
下記の様な設定を追加すればパススルー出来る。
<domain type='kvm'>
<name>TEST</name>
<uuid>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</uuid>
<cpu mode='host-passthrough'/>
</domain>
|
重要なのは [host-passthrough] の設定で、この箇所をdomain要素の中に追記する。
要素自体が無い場合は新規追加した後にdefineして反映させる。
この状態でゲストインスタンスを起動させると、
ちゃんとホストサーバのCPUモデルを取得出来るようになる。
結構古いサーバなので、色々出ているが気にしたら負け (´・ω・`)
モデル名も取得出来ていると同時に、ホストサーバのCPUをそのままパススルーしている関係上、
バグ情報もそのまま引き継ぐ事になる点に注意。
- ランダムエントロピープールのバイパス
以前の記事にも書いた通り、仮想サーバで/dev/rundomを利用するには、
randomの仕様上エントロピー不足となりハングアップする事がある。
コレを解決するには、havegeを導入したりVirtIOでホストエントロピーをバイパスするのが手っ取り早い。
前回使ったhavegeはデーモン経由でエントロピーを蓄える都合上、デーモンが起動するまでは使えない。
なので今回はVirtIO経由でホストサーバのプールをパススルーしてみた。
<domain type='kvm'>
<name>TEST</name>
<uuid>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</uuid>
<devices>
<rng model='virtio'>
<rate bytes='4096' period='5000'/>
<backend model='random'>/dev/random</backend>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</rng>
</devices>
</domain>
|
/dev/randomはデバイスとして提供されている事もあり、設定はdevices要素の中に埋め込む。
細かい注意点としてはslotの16進数指定を他のデバイスと衝突しない様にする。
rateはゲストからホストへの参照リミットなので、ホストのエントロピー充填速度によって書き換える。
- ACPI/APICサポート
似たような名前だが全く別物。
ACPIは電源制御の統一規格で、ホストサーバからゲストインスタンスを
外部コマンドとして安全にシャットダウンする時に使ったりする。
APICはx86アーキテクチャの割り込み処理コントローラで、チップセットレベルでの実装。
細かい所はレジスタ設計・アルゴリズム論などで使うらしい。
自分は入り口辺りしか囓っていないので、詳細はその筋の方に聞いて下さい (´・ω・`)
要はハードウェア制御をlibvirt APIとして提供する設定一式。
libvirt XMLのドキュメントを見ると色々設定出来るのだが、
自宅鯖のKVMホストはバージョンが低いのでサポートしていない機能が多く未テスト。
その中でテスト出来たのがACPI/APICの二つだったので2項目のみ記載。
<domain type='kvm'>
<name>TEST</name>
<uuid>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</uuid>
<features>
<acpi/>
<apic/>
</features>
</domain>
|
他にもlibvirtで設定出来る項目は色々あるのだが、
ホストサーバを安定重視にしている都合上、
libvirtのバージョンも古めなのでテスト出来ない項目がチラホラと…
幾ら自鯖と言い色々とサービス立ち上げてはいるが、テスト自体が出来ないのは困りものなので、
そろそろホストサーバの刷新を本気で検討しなければならないのかもしれない。
出来ればRHEL8が出た後にしたいがまだまだ先な気もするし、情報収集しながら検討せねば。
………
ちなみに、kernel-4.18.0は絶賛ハマり中。
KVMゲストのCentOS6でビルドは通るのだが、
ビルドしたkernelイメージで起動させるとsplashを表示する直前で勝手に再起動がかかり、
GRUBの選択画面に戻った後、ビルドしたkernelで起動して再起動がかかり…の無限ループ
なんとなく、ACPIの電源管理で転けているか、
ASLR/KASLR辺りでメモリ管理が上手く出来ず勝手に電源が落ちている気が…
ただ、CrashDumpが出ないわ、PanicLogも出ないわでお手上げ状態 ヽ(´ー`)ノ
ぶっちゃけ、こっちの方が深刻なので是が非でもクリアしたい所。