5.4. ネットワークチューニングのヒント

ここでは、仮想化環境におけるネットワークのパフォーマンスチューニングの方法について説明します。

重要

以下の機能は、Red Hat Enterprise Linux 7 ハイパーバイザーおよび仮想マシンでサポートされていますが、Red Hat Enterprise Linux 6.6 以降を実行する仮想マシンでもサポートされています。

5.4.1. ブリッジのゼロコピー送信

ゼロコピー送信モードは、大規模なパケットサイズで有効です。これは通常、ゲストネットワークと外部ネットワーク間で大規模なパケットを送信する場合に、スループットに影響を与えることなく、最大 15% までホスト CPU のオーバーヘッドを削減します。
これはゲスト間、ゲスト対ホスト、または小規模なパケットワークロードのパフォーマンスには影響を与えません。
ブリッジのゼロコピー送信は Red Hat Enterprise Linux 7 仮想マシンで完全にサポートされていますが、デフォルトでは無効にされています。ゼロコピー送信モードを有効にするには、vhost_net モジュールの experimental_zcopytx カーネルモジュールパラメーターを 1 に設定します。

注記

通常、サービス拒否および情報漏洩攻撃による脅威の軽減策として追加のデータコピーが送信時に作成されます。ゼロコピー送信を有効にすると、この脅威の軽減策が無効にされます。
パフォーマンスの低下が観察される場合やホスト CPU の利用率が問題にならない場合は、experimental_zcopytx を 0 に設定することでゼロコピー送信モードを無効にできます。

5.4.2. マルチキュー virtio-net

マルチキュー virtio-net は、1 度に複数の virtqueue ペアでパケットを送信できるようにすることで、vCPU の数の増大と共にネットワークパフォーマンスを増大させるアプローチを提供します。
現在のハイエンドサーバーにはより多くのプロセッサーがあり、それらで実行されるゲストの vCPU の数も増加しています。単一キューの virtio-net ではネットワークパフォーマンスが vCPU の数の増加と共に増加しないため、ゲスト内のプロトコルスタックのスケールは制限されています。また virtio-net には TX および RX キューが 1 つだけあるため、ゲストはパケットを並行して送信したり、取得したりすることができません。
マルチキューサポートは、並列パケット処理を許可することにより、これらのボトルネックを取り除きます。
マルチキュー virtio-net は、以下の場合に最高のパフォーマンスを提供します。
  • トラフィックパケットのサイズが比較的大きい。
  • ゲスト間、ゲストとホスト間、またはゲストと外部システム間でトラフィックが実行されている状態で、ゲストが多くの接続で同時にアクティブである。
  • キューの数は vCPU の数に等しい。これは、特定のキューを特定の vCPU に対してプライベートにするため、マルチキューサポートが RX 割り込みの親和性および TX キュー選択を最適化するためです。

注記

マルチキュー virtio-net は着信トラフィックで効果的に機能しますが、発信トラフィックのパフォーマンスに悪影響を与えることが時々あります。マルチキュー virtio-net を有効にすることで合計のスループットが増大し、それと並行して CPU 消費量が増加します。

5.4.2.1. マルチキュー virtio-net の設定

マルチキュー virtio-net を使用するには、以下をゲスト XML 設定に追加してゲストのサポートを有効にします (カーネルはマルチキュータップデバイスについて最高 256 のキューをサポートするため、ここでは N の値を 1 から 256 に設定します)。
<interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
      <driver name='vhost' queues='N'/>
</interface>
ゲスト内で N virtio-net キューを指定して仮想マシンを実行する場合、以下のコマンドを使ってマルチキューサポートを有効にします (ここで、M の値は 1 から N になります)。
# ethtool -L eth0 combined M

注記

マルチキューを使用する場合に、/etc/libvirt/qemu.conf ファイルの max_files 変数を 2048 に変更することが推奨されます。デフォルト制限の 1024 ではマルチキューには不十分であり、マルチキューの設定時にゲストが起動できなくなります。