10.4. Red Hat Enterprise Linux 3.9 ゲストでの virtio ドライバーの使用

Red Hat Enterprise Linux 3.9 用の virtio ドライバーは、以下の 5 つのカーネルモジュールで構成されています。 virtiovirtio_blkvirtio_netvirtio_pcivirtio_ring。virtio ブロックおよびネットワークデバイスドライバーの両方を使用するには、これら 5 つのモジュールすべてをロードする必要があります。

重要

Red Hat Enterprise Linux 3.9 ゲストでは、kmod-virtio パッケージは virtio モジュールの要件です。

注記

ネットワークデバイスドライバーのみを使用する場合は、virtiovirtio_netvirtio_pci モジュールをロードします。ブロックデバイスドライバーのみを使用する場合は、virtiovirtio_ringvirtio_blkvirtio_pci モジュールをロードします。

重要

virtio パッケージは、/boot ディレクトリーの initrd RAM ディスクファイルを変更します。オリジナルの initrd ファイルは、/boot/initrd-kernel-version.img.virtio.orig に保存されています。オリジナルの initrd ファイルは、virtio ドライバーモジュールを含む新たな initrd RAM ディスクに置換されます。initrd RAM ディスクが変更されると、仮想マシンは virtio ドライバーを使ってストレージデバイスから起動できるようになります。別の initrd ファイルを使うには、ドライバーが sysinit スクリプト (sysinit スクリプトを使用した virtio ドライバーのロード) を使ってロードされているか、または新たな initrd RAM ディスクが作成される (virtio ドライバーを initrd RAM ディスクに追加) 際にロードされていることを確認する必要があります。
sysinit スクリプトを使用した virtio ドライバーのロード

ここでは、Red Hat Enterprise Linux 3.9 以降の起動中に sysinit スクリプトを使用して virtio ドライバーモジュールをロードする方法を説明します。sysinit スクリプトを使用してモジュールがロードされる場合、ゲスト仮想マシンはデフォルト状態の起動ディスクには virtio ドライバーを使用できないことに注意してください。

ドライバーは以下の順序でロードする必要があります。
  1. virtio
  2. virtio_ring
  3. virtio_pci
  4. virtio_blk
  5. virtio_net
virtio_netvirtio_blk の順番のみ、変更が可能です。他のドライバーが異なる順番でロードされると、機能しません。
次にモジュールを設定します。/etc/rc.d/rc.sysinit ファイルの以下のセクションを見つけます。
if [ -f /etc/rc.modules ]; then
   /etc/rc.modules
fi
このセクションに以下の行を追加します。
if [ -f /etc/rc.modules ]; then
  /etc/rc.modules
fi

modprobe virtio
modprobe virtio_ring # Comment this out if you do not need block driver
modprobe virtio_blk  # Comment this out if you do not need block driver
modprobe virtio_net  # Comment this out if you do not need net driver
modprobe virtio_pci
ゲスト仮想マシンを再起動してカーネルモジュールをロードします。
virtio ドライバーを initrd RAM ディスクに追加

ここでは、initrd RAM ディスクに準仮想化モジュールを含めることで Red Hat Enterprise Linux 3.9 以降のカーネルで virtio ドライバーのモジュールをロードする方法を説明します。mkinitrd ツールが initrd RAM ディスクを設定して、モジュールをロードします。追加のモジュールは、mkinitrd コマンドの --with パラメーターで指定します。カスタムの initrd RAM ディスクの作成に mkinitrd コマンドを使用する際は、以下の一連のパラメーターをそのままの順序で追加してください。

--with virtio --with virtio_ring --with virtio_blk --with virtio_net --with virtio_pci
AMD64 および Intel 64 の問題

AMD64 システムには、virtio パッケージの x86_64 バージョンを使用します。

Intel 64 システムには、virtio パッケージの ia32e バージョンを使用します。virtiox86_64 バージョンを使用すると、Intel 64 システム上での起動中に 'Unresolved symbol' エラーが発生する可能性があります。
ネットワークパフォーマンスの問題

virtio ネットワークドライバーを使用していてパフォーマンスが低い場合は、ホストシステムの GSO および TSO 機能の設定を確認します。virtio ネットワークドライバーのパフォーマンスを最適化するには、GSO および TSO オプションが無効になっている必要があります。

ホスト上で以下のコマンドを使用して (interface をゲストが使用するネットワークインターフェースに置換)、GSO と TSO の設定ステータスを確認します。
# ethtool -k interface
ホスト上で以下のコマンドを使用して、GSO と TSO のオプションを無効にします。
# ethtool -K interface gso off
# ethtool -K interface tso off
virtio ドライバーの swap パーティション問題

virtio ブロックデバイスドライバーをアクティベートすると、swap パーティションが利用できない場合があります。この問題は、ディスクデバイス名の変更により発生する可能性があります。この問題を解決するには、/etc/fstab ファイルを開き、以下のような swap パーティションを含む行を見つけます。

/dev/hda3       swap	                swap	defaults	0 0
virtio ドライバーは、/dev/hd* 命名規則ではなく /dev/vd* 命名規則を使用します。この問題を解決するには、/etc/fstab ファイルの誤った swap エントリーを /dev/vd* 規則を使って、以下のように変更します。
/dev/vda3	swap	                swap	defaults	0 0
変更を保存し、ゲスト仮想マシンを再起動します。これで仮想マシンに swap パーティションが作成されました。