kvmを使って仮想化する際に、PCIパススルーを使ってみる *

マザーボードにnicが2つあったので、仮想ゲスト専用にnicを使わせる為にPCIパススルーを利用してみた。
HOST OS:openSUSE13.2
Guest OS:debian7(wheezy)

xml抜粋 **

<hostdev mode='subsystem' type='pci' managed='yes'>
  <driver name='kvm' />  これが引っかかる原因となる
  <source>
  これはホストが認識するNICのPCIアドレス
   <address domain='0x0000' bus='0x00' slot='0x19' function='0x0'/>
  </source>
   これはゲストが認識するNICのPCIアドレス
  <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</hostdev>

ここでハマりやすいのが、PCIパススルーに使うドライバ指定。
ドライバには、新しいvfioと古めのkvmのに種類が用意されているが、
opensuse13.2ホストにおいて、無指定の場合にデフォルトで選択されるのはvfioの方になる。
そしてvfioの必須条件が、kernel-3.6以上という縛りが存在する。

ホストOSであるopensuse13.2のカーネルは、3.16.7。
ゲストOSのdebianは、3.2.0。

ということなので、ホストでのドライバが無指定の場合、デフォルトでvfioが選択されることになるが、
ゲストの方は未対応なので、何百回起動してもNICが見えないループに陥る。
ここで、

<driver name='kvm' />

の1行を加えるだけで嘘のように認識してくれるので、ドライバー指定を端折ってはならない。

更新日 2015-04-12(ci5kym)

仮想化

Last-modified: 2018-03-28 (水) 17:59:57 (2385d)