Red Hat Enterprise Linux 7

仮想化のチューニングと最適化ガイド

仮想環境を最適化する

Dayle Parker

Red Hat Engineering Content Services

dayleparker@redhat.com

Scott Radvan

Red Hat Engineering Content Services

sradvan@redhat.com

Red Hat Subject Matter Experts

法律上の通知

Copyright © 2013-2015 Red Hat, Inc.

This document is licensed by Red Hat under the Creative Commons Attribution-ShareAlike 3.0 Unported License. If you distribute this document, or a modified version of it, you must provide attribution to Red Hat, Inc. and provide a link to the original. If the document is modified, all Red Hat trademarks must be removed.

Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.

Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack Logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

概要

Red Hat Enterprise Linux 仮想化のチューニングと最適化ガイドでは、KVM および仮想化のパフォーマンスについて解説します。KVM のパフォーマンス関連の機能やオプションをホストのシステムや仮想化ゲストにフル活用するためのヒントや推奨事項なども記載しています。

⁠第1章 はじめに

⁠1.1. KVM の概要

KVM の構造を以下に図解します。

⁠

図1.1 KVM アーキテクチャー

⁠1.2. KVM のパフォーマンスについて

KVM はシステムパフォーマンスおよびプロセス/スレッドの管理に関連するため、以下に KVM の概要を示します。

KVM を使用する場合、 ゲストはホスト上の Linux プロセスとして実行されます。

仮想 CPU (vCPU) は通常のスレッドとして実装され、 Linux スケジューラーで処理されます。

ゲストは NUMA や huge page などの機能をカーネルから継承します。

ホスト内でのディスクおよびネットワーク I/O の設定はパフォーマンスに多大な影響を与えます。

ネットワークトラフィックは一般的にはソフトウェアベースのブリッジを通過します。

⁠1.3. 仮想化のパフォーマンス関連の特長および改善点

Red Hat Enterprise Linux 7 における仮想化パフォーマンスの改善点

Red Hat Enterprise Linux 7 では、以下の機能により仮想化のパフォーマンスが強化されています。

NUMA の自動負荷分散

NUMA の自動負荷分散により、Red Hat Enterprise Linux  7 ゲストで必要な手動のチューニングなしに、NUMA ハードウェアシステムで実行されるアプリケーションのパフォーマンスを強化できます。NUMA の自動負荷分散は、スレッドやプロセスなどのタスクを、それらがアクセスするメモリーに近い場所に移動します。

NUMA の自動負荷分散に関する詳細は、「NUMA の自動負荷分散」 を参照してください。

マルチキュー virtio-net

パケットの送信/受信処理のサイズをゲストの利用可能な vCPU の数に合わせて調整できるようにするネットワーク手法です。

マルチキュー virtio-net についての詳細は、「マルチキュー virtio-net」 を参照してください。

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

ゼロコピー送信モードは、ゲストネットワークと外部ネットワーク間での大規模なパケットを送信する際のホスト CPU のオーバーヘッドを、スループットに影響を与えることなく最高 15% 削減します。ブリッジのゼロコピー送信は Red Hat Enterprise Linux 7 仮想マシンで完全にサポートされていますが、デフォルトでは無効にされています。

ゼロコピー送信についての詳細は、「ブリッジのゼロコピー送信」 を参照してください。

APIC Virtualization (APICv)

新たな Intel プロセッサーは Advanced Programmable Interrupt Controller (APICv) のハードウェア仮想化機能を提供します。APICv により、ゲストの直接的な APIC アクセスが許可され、APIC による割り込みの待機時間や仮想マシンの終了回数が大幅に削減されるため、仮想化された x86_64 ゲストのパフォーマンスが強化されます。この機能は新規の Intel プロセッサーでデフォルトで使用され、I/O パフォーマンスを向上させます。

EOI の加速化

仮想 APIC 機能なしに、旧式チップセットの高帯域幅 I/O の割り込み終了 (EOI: End-of-interrupt) 処理を加速化します。

マルチキュー virtio-scsi

マルチキュー virtio-scsi サポートにより、virtio-scsi ドライバーにおけるストレージパフォーマンスとスケーラビリティーが強化されます。これにより、他の vCPU に影響を与えることなく、それぞれの仮想 CPU に別個のキューや割り込みを持たせることができます。

マルチキュー virtio-scsi についての詳細は、「マルチキュー virtio-scsi」 を参照してください。

準仮想化された Ticketlock

準仮想化された ticketlock (pvticketlock) は、オーバーサブスクライブされた CPU を持つ Red Hat Enterprise Linux 7 ホスト上で実行される Red Hat Enterprise Linux 7 ゲスト仮想マシンのパフォーマンスを強化します。

準仮想化されたページフォールト

準仮想化されたページフォールトは、ゲストがホストによってスワップアウトされるページへのアクセスを試行する際にゲストに挿入されます。これにより、ホストのメモリーがオーバーコミットされ、ゲストのメモリーがスワップアウトされる場合に KVM ゲストのパフォーマンスが向上します。

準仮想化された時刻関連の vsyscall の最適化

gettimeofday および clock_gettime システム呼び出しを vsyscall メカニズムによりユーザー領域で実行できます。以前は、これらのシステム呼び出しを実行すると、システムをカーネルモードに切り替えてからユーザー領域に戻す必要がありました。これにより、一部のアプリケーションのパフォーマンスが大幅に向上します。

Red Hat Enterprise Linux における仮想化パフォーマンスの機能

CPU/カーネル

NUMA - Non-Uniform Memory Access。詳細は 8章NUMA を参照してください。

CFS - Completely Fair Scheduler。クラスに焦点を置いた新しいスケジューラーです。

RCU - Read Copy Update。共有スレッドデータの処理が向上しました。

仮想 CPU (vCPU) の最大数は 160 になります。

メモリー

Huge Page およびメモリー集約型環境での各種の最適化。詳細は 7章メモリー を参照してください。

ネットワーク

vhost-net - カーネルベースの高速 virtIO ソリューション

SR-IOV - ネイティブに近いネットワークパフォーマンスレベル用

ブロック I/O

AIO - 他の I/O 動作にオーバーラップするスレッドのサポート

MSI - PCI バスデバイス割り込み生成

ディスク I/O スロットリング - ゲストのディスク I/O 要求を制御し、ホストリソースの過剰使用を防ぎます。詳細は、「ディスク I/O スロットリング」 を参照してください。

注記

仮想化に関するサポート、制約および特長などの詳細は、『Red Hat Enterprise Linux 7 仮想化スタートガイド』 および以下の URL を参照してください。

https://access.redhat.com/certified-hypervisors

https://access.redhat.com/articles/rhel-kvm-limits

⁠第2章 パフォーマンス監視ツール

⁠2.1. はじめに

本章では、 ゲストの仮想マシン環境の監視に使用するツールについて見ていきます。

⁠2.2. perf kvm

ホストからゲストのオペレーティングシステムの統計値を収集するには、 perf コマンドに kvm オプションを付けて使用します。

Red Hat Enterprise Linux では、 perf パッケージで perf コマンドを提供しています。rpm -q perf を実行して perf パッケージがインストールされているかどうかを確認します。これがインストールされていない場合、ゲストのオペレーティングシステムの統計値を収集して分析する必要がある場合は root ユーザーとして次のコマンドを使用してこのパッケージをインストールします。

# yum install perf

ホストで perf kvm を使用するには、 ゲストの /proc/modules ファイルと /proc/kallsyms ファイルにアクセスできなければなりません。 これを行なうための方法が 2 種類あります。 ホストにファイルを転送してからそのファイルで報告を実行する場合は、 手順2.1「ゲストの /proc ファイルをホストにコピーする」 を参照してください。 ゲストを直接マウントしてそのファイルにアクセスする場合は、 手順2.2「代替方法: sshfs を使ってファイルに直接アクセスする」 を参照してください。

⁠

手順2.1 ゲストの /proc ファイルをホストにコピーする

重要

必要なファイルを /proc ディレクトリーから直接コピーしても (scp などを使用)、 コピーしたファイルは空になります。 本セクションでは、 まず、 ゲストのファイルを一時的な場所に保存し (cat)、 その保存先からファイルをホストにコピーして、 perf kvm でのイベントの記録や報告に使用する手順を説明しています。

ゲストにログインしてファイルを保存する

ゲストにログインして、 /proc/modules と /proc/kallsyms を一時的な場所となる /tmp に保存します。

# cat /proc/modules > /tmp/modules
# cat /proc/kallsyms > /tmp/kallsyms

一時ファイルをホストにコピーする

ゲストからログオフしたら、 今度は次の例に示す scp コマンドを実行して一時的な場所に保存したファイルをホストにコピーします。 必要に応じてホスト名と TCP ポートをご使用の値に置き換えてください。

# scp root@GuestMachine:/tmp/kallsyms guest-kallsyms
# scp root@GuestMachine:/tmp/modules guest-modules

これでゲストからの 2 つのファイル (guest-kallsyms と guest-modules) がホスト上にコピーされ、 perf kvm で使用する準備が整いました。

⁠

perf kvm でイベントの記録と報告を行なう

前述の手順で入手したファイルを使って、 ゲスト内のイベント、 ホスト内のイベントのいずれかまたは両方を記録し報告を行なうことができるようになりました。

次のコマンドの例を実行します。

# perf kvm --host --guest --guestkallsyms=guest-kallsyms \
--guestmodules=guest-modules record -a -o perf.data

注記

--host と --guest の両方をコマンドに使用すると、 出力は perf.data.kvm というファイル名で保存されます。 --host だけを使用すると、 ファイル名は perf.data.host になります。 同じように、 --guest だけを使用すればそのファイル名は perf.data.guest になります。

記録の動作を停止させる場合は Ctrl-C を押します。

⁠

イベントを報告する

記録のプロセスで取得したファイルを使って出力を新しいファイル「analyze」にリダイレクトする例を示します。

perf kvm --host --guest --guestmodules=guest-modules report -i perf.data.kvm \
--force > analyze

記録したイベントを調べるため、 analyze ファイルの内容を表示させます。

# cat analyze

# Events: 7K cycles
#
# Overhead       Command  Shared Object      Symbol
# ........  ............  .................  .........................
#
    95.06%            vi  vi                 [.] 0x48287
     0.61%          init  [kernel.kallsyms]  [k] intel_idle
     0.36%            vi  libc-2.12.so       [.] _wordcopy_fwd_aligned
     0.32%            vi  libc-2.12.so       [.] __strlen_sse42
     0.14%       swapper  [kernel.kallsyms]  [k] intel_idle
     0.13%          init  [kernel.kallsyms]  [k] uhci_irq
     0.11%          perf  [kernel.kallsyms]  [k] generic_exec_single
     0.11%          init  [kernel.kallsyms]  [k] tg_shares_up
     0.10%      qemu-kvm  [kernel.kallsyms]  [k] tg_shares_up

[output truncated...]

⁠

手順2.2 代替方法: sshfs を使ってファイルに直接アクセスする

重要

以下に示すのは一例です。使用環境に合わせて適した値に置き換えてください。

# Get the PID of the qemu process for the guest:
PID=`ps -eo pid,cmd | grep "qemu.*-name GuestMachine" \
| grep -v grep | awk '{print $1}'`

# Create mount point and mount guest
mkdir -p /tmp/guestmount/$PID
sshfs -o allow_other,direct_io GuestMachine:/ /tmp/guestmount/$PID

# Begin recording
perf kvm --host --guest --guestmount=/tmp/guestmount \
record -a -o perf.data

# Ctrl-C interrupts recording. Run report:
perf kvm --host --guest --guestmount=/tmp/guestmount report \
-i perf.data

# Unmount sshfs to the guest once finished:
fusermount -u /tmp/guestmount

⁠2.3. 仮想パフォーマンスの監視 (vPMU)

仮想パフォーマンスの監視ユニット (vPMU) は、ゲスト仮想マシンの機能する方法を示す統計を表示します。

仮想パフォーマンス監視ユニットを使用すると、ユーザーはゲスト仮想マシン内の潜在的なパフォーマンス問題の出所を特定することができます。vPMU は Intel の PMU (Performance Monitoring Unit) に基づいており、Intel マシンでのみ使用できます。

この機能は、Red Hat Enterprise Linux 6 または Red Hat Enterprise Linux 7 を実行するゲスト仮想マシンでのみサポートされ、デフォルトでは無効にされています。

vPMU がご使用のシステムでサポートされているかどうかを確認するには、以下を実行してホスト CPU 上で arch_perfmon フラグをチェックします。

# cat /proc/cpuinfo|grep arch_perfmon

vPMU を有効にするには、ゲスト XML 内で cpu mode を host-passthrough として指定します。

# virsh dumpxml guest_name |grep "cpu mode"
<cpu mode='host-passthrough'>

vPMU が有効にされた後に、ゲスト仮想マシンから perf コマンドを実行して仮想マシンのパフォーマンス統計を表示します。

⁠第3章 Virt-manager

⁠3.1. はじめに

本章では、ゲスト仮想マシンの管理を目的としたデスクトップツールとなる virt-manager で利用可能なパフォーマンスチューニング関連のオプションについて扱います。

⁠3.2. オペレーティングシステムの詳細とデバイス

⁠3.2.1. ゲスト仮想マシンの詳細の指定

virt-manager ツールは、新規のゲスト仮想マシンに選択するオペレーティングシステムの種類やバージョンによって異なるプロファイルを提供します。ゲストを作成する際は、できるだけ詳細な情報を入力するようにしてください。特定タイプのゲストに利用できる機能を有効にすることでパフォーマンスを向上させることができます。

virt-manager ツールの以下のサンプルとなるスクリーンショットを参照してください。新規の仮想マシンを作成する場合は、常にお使いになるOS type および Version を指定してください。

⁠

図3.1 OS の種類とバージョンを指定する

⁠3.2.2. 未使用のデバイスの削除

未使用や不要なデバイスを削除することでパフォーマンスが向上する場合があります。 たとえば、 Web サーバーとして稼働させることを目的としたゲストの場合、 オーディオ機能や接続タブレットなどは必要とされることはほとんどありません。

virt-manager ツールの以下のサンプルとなるスクリーンショットを参照してください。不必要なデバイスを削除するには Remove ボタンをクリックします。

⁠

図3.2 未使用のデバイスを削除する

⁠3.3. CPU パフォーマンスのオプション

ゲスト仮想マシンに設定できる CPU 関連のオプションがいくつかあります。 正しく設定することにより、 パフォーマンスに大きな影響を与えることができます。 ゲストに対して利用できる CPU オプションを以下に示します。 このセクションでは、 以下に示すオプションがもたらす影響について見ていきます。

⁠

図3.3 CPU パフォーマンスのオプション

⁠3.3.1. オプション: 使用できる CPU

このオプションでゲストが使用できる仮想 CPU 数 (vCPU) を調整します。ホストで使用可能な数以上の CPU 数を割り当てると (オーバーコミット と呼ばれる)、 以下のような警告が表示されます。

⁠

図3.4 CPU のオーバーコミット

システム上の全ゲストの vCPU の合計がシステム上のホスト CPU の数より大きい場合に CPU はオーバーコミットされます。vCPU の合計数がホスト CPU の数より大きい場合に CPU を 1 つまたは複数のゲストでオーバーコミットできます。

重要

メモリーのオーバーコミットと同様に、CPU のオーバーコミットはパフォーマンスに悪影響をもたらす場合があります。たとえば、ゲストのワークロードが大きい場合や予想できない場合がこれに該当します。オーバーコミットについての詳細は、『Red Hat Enterprise Linux 仮想化の導入および管理ガイド』 の「KVM でのオーバーコミット」を参照してください。

⁠3.3.2. オプション: CPU 構造

このオプションで目的の CPU モデルに応じた CPU 構造タイプを選択します。 一覧を表示して使用できるオプションから選択するか、 ホストの CPU構造をコピー (Copy host CPU configuration) ボタンをクリックしてホストの物理的な CPU モデルと構造を検出させ適用します。 CPU 構造を選択すると、 それに応じた CPU 機能と指示が表示され、 CPU 機能 (CPU Features) の一覧で別々に有効にしたり無効にしたりすることができます。 例を以下に示します。

⁠

図3.5 CPU 構造のオプション

注記

ホストの CPU 構造は、手動で選択するよりもコピーすることをお勧めします。

注記

または、ホストマシン上で virsh capabilities コマンドを実行し、CPU タイプおよび NUMA 機能を含むシステムの仮想化機能を表示します。

⁠3.3.3. オプション: CPU トポロジー

このオプションでゲスト仮想マシンの仮想 CPU に特定の CPU トポロジーを適用します (ソケット、 コア、 スレッドなど)。 以下に例を示します。

⁠

図3.6 CPU トポロジーのオプション

注記

環境によっては要件が異なることもありますが、通常ソケット数を選択する場合、コア、スレッドいずれも 1 つのみ指定することにより最善のパフォーマンスを実現することができます。

⁠3.3.4. オプション: CPU ピニング

システム固有の NUMA トポロジーに合わせると大幅なパフォーマンスの改善が見られます。 このオプションでホストに有効となるピニング設定を自動的に作成します。

⁠

図3.7 CPU ピニング

警告

ゲストの vCPU の数が単一の NUMA ノードよりも多い場合は、このオプションは使用しないでください。

ピニングオプションを使用すると、ゲストの VCPU スレッドが単一の NUMA ノードに制約されます。ただし、その NUMAノード内でのスレッドの移動は可能です。バインド機能を強化する場合は、lscpu コマンドからの出力を使用し、 virsh cpupin で 1:1 の物理 CPU と VCPU のバインドを設定します。 NUMA と CPU ピニングについては 8章NUMA を参照してください。

⁠3.4. 仮想ディスクパフォーマンスのオプション

インストール時にゲスト仮想マシンで利用できるディスク関連のオプションがいくつかあります。この設定により、パフォーマンスに影響を与えることがあります。以下のイメージはゲストで利用できる仮想ディスクのオプションを示しています。

キャッシュモード、IO モード、および IO チューニングは、 virt-manager の Virtual Disk セクションで設定できます。以下のイメージに示されるように Performance options の下のフィールドにこれらのパラメーターを設定します。

⁠

図3.8 仮想ディスクパフォーマンスのオプション

重要

virt-manager で仮想ディスクパフォーマンスのオプションを設定する場合、設定を有効にするために仮想マシンを再起動する必要があります。

これらの設定の説明およびゲスト XML 設定でこれらの設定を編集する方法については、「キャッシュ」 および 「I/O モード」 を参照してください。

⁠第4章 tuned

⁠4.1. はじめに

本章では tuned デーモンを使って仮想化環境下のシステム設定をチューニングする方法について説明しています。

⁠4.2. tuned と tuned-adm

tuned はチューニングプロファイルの配信メカニズムであり、CPU 負荷の高いタスクの要件やストレージ／ネットワークのスループット応答性など特定のワークロード特性に Red Hat Enterprise Linux を適合させます。

Tuned に付随する ktune は tuned-adm ツールとともに、 事前設定されたチューニングプロファイルを提供します。 特定のユースケースでパフォーマンスを強化し、電力消費量を抑制します。 プロファイルを編集したり、 新規のプロファイルを作成したりすることで、 環境に適したパフォーマンスソリューションを作り出すことができます。

tuned-adm の一部として提供される仮想化関連のプロファイルには、以下のものがあります。

virtual-guest

throughput-performance プロファイルに基づき、virtual-guest は仮想メモリーの スワップアウト処理頻度も軽減します。

virtual-guest プロファイルは Red Hat Enterprise Linux 7 ゲスト仮想マシンを作成する際に自動的に選択されます。これは仮想マシンに推奨されるプロファイルです。

このプロファイルは Red Hat Enterprise Linux 6.3 以降で利用できますが、仮想マシンのインストール時に手動で選択する必要があります。

virtual-host

throughput-performance プロファイルに基づき、virtual-host も仮想メモリーの スワップアウト処理頻度を減らし、ダーティーページのより集中的なライトバックを可能にします。このプロファイルは、KVM および Red Hat Enterprise Virtualization ホストを含む仮想化ホストのプロファイルに推奨されます。

Red Hat Enterprise Linux 7 インストールでは、tuned パッケージがインストールされ、tuned サービスが有効にされます。

利用可能な全プロファイルを一覧表示して、 現在アクティブなプロファイルを特定するため以下を実行します。

# tuned-adm list
Available profiles:
- balanced
- desktop
- latency-performance
- network-latency
- network-throughput
- powersave
- sap
- throughput-performance
- virtual-guest
- virtual-host
Current active profile: throughput-performance

さらに、一連のチューニングパラメーターをカプセル化するためにカスタム tuned プロファイルを作成することもできます。カスタム tuned プロファイルの作成方法については、tuned.conf man ページを参照してください。

現在アクティブなプロファイルだけを表示する場合は、 以下を実行します。

tuned-adm active

別のプロファイルに切り替える場合は、 以下を実行します。

tuned-adm profile profile_name

たとえば、virtual-host プロファイルに切り替えるには、以下を実行します。

tuned-adm profile virtual-host

重要

Red Hat Enterprise Linux 7.1 以降のチューニングされたプロファイルを設定した後は、変更を永続化させるには tuned サービスを有効にしてシステムを再起動する必要があります。詳細情報は、『Red Hat Enterprise Linux 7 パフォーマンスチューニングガイド』を参照してください。

手動で設定されたパラメーターを使用するために tuned を無効にする方が望ましい場合があります。すべてのチューニングを無効にするには、以下を実行します。

tuned-adm off

注記

tuned、tuned-adm および ktune の詳細は、『Red Hat Enterprise Linux 7 電力管理ガイド』 (https://access.redhat.com/documentation/en-US/) を参照してください。

⁠第5章 ネットワーク

⁠5.1. はじめに

本章では、 仮想化した環境におけるネットワークの最適化について説明しています。

⁠5.2. ネットワーク調整のヒント

単一ネットワークでのトラフィック混雑を避けるため複数のネットワークを使用します。 たとえば、 管理専用のネットワーク、 バックアップ専用のネットワーク、 ライブ移行専用のネットワークなどを設けます。

通常は、 すべてのコンポーネントでデフォルトの MTU (1500 バイト) に合わせれば十分でしょう。 大量のメッセージを必要とする場合は、 MTU 値を上げると断片化を軽減することができます。 MTU を変更する場合は、 パス内の全デバイスをその MTU 値に合わせてください。

arp_filter を使用して ARP 変動を防ぎます。ARP 変動はホストおよびゲストのいずれでも発生する可能性のある望ましくない状況で、マシンが ARP 要求に対して複数のネットワークインターフェースから応答してしまう原因となります。この設定を永続化するには、echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter を行なうか、または /etc/sysctl.conf を編集してください。

注記

ARP 変動に関する詳細は、 次の URL http://linux-ip.net/html/ether-arp.html#ether-arp-flux を参照してください。

⁠5.3. Virtio と vhost_net

以下の図は、Virtio および vhost_net アーキテクチャーにおけるカーネルの位置付けを示しています。

⁠

図5.1 Virtio および vhost_net アーキテクチャー

vhost_net では virtio ドライバーの一部をユーザー領域からカーネルに移動しています。これによりコピー操作が減り、待ち時間と CPU 使用量が低減します。

⁠5.4. デバイスの割り当てと SR-IOV

デバイス割り当てと SR-IOV の構造におけるカーネルの位置付けを示します。

⁠

図5.2 デバイスの割り当てと SR-IOV

デバイス割り当てにより、デバイス全体がゲストから見える状態になります。SR-IOV では、NIC やシステムボードなどドライバーやハードウェアのサポートを必要とします。複数の仮想デバイスを作成することが可能なため、それぞれ別々のゲストに渡すことができます。ゲスト内に製造元固有のドライバーが必要になりますが、SR-IOV はあらゆるネットワークオプションの中でも最小の待ち時間を実現します。

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

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

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

ゼロコピー送信モードは、大規模なパケットサイズで有効です。これは通常、ゲストネットワークと外部ネットワーク間で大規模なパケットを送信する場合に、スループットに影響を与えることなく、最大 15% までホスト CPU のオーバーヘッドを削減します。

これはゲスト間、ゲスト対ホスト、または小規模なパケットワークロードのパフォーマンスには影響を与えません。

ブリッジのゼロコピー送信は Red Hat Enterprise Linux 7 仮想マシンで完全にサポートされていますが、デフォルトでは無効にされています。ゼロコピー送信モードを有効にするには、vhost_net モジュールの experimental_zcopytx カーネルモジュールパラメーターを 1 に設定します。

注記

通常、サービス拒否および情報漏洩攻撃による脅威の軽減策として追加のデータコピーが送信時に作成されます。ゼロコピー送信を有効にすると、この脅威の軽減策が無効にされます。

パフォーマンスの低下が観察される場合やホスト CPU の利用率が問題にならない場合は、experimental_zcopytx を 0 に設定することでゼロコピー送信モードを無効にできます。

⁠5.5.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.5.2.1. マルチキュー virtio-net の設定

マルチキュー virtio-net を使用するには、以下をゲスト XML 設定に追加してゲストのサポートを有効にします (カーネルはマルチキュータップデバイスについて最高 8 つのキューをサポートするため、ここでは N の値を 1 から 8 に設定します)。

<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

⁠第6章 ブロック I/O

⁠6.1. はじめに

本章では、仮想化環境における I/O の最適化について説明します。

⁠6.2. ブロック I/O チューニング

virsh blkiotune コマンドを使うと、管理者はゲスト仮想マシンのブロック I/O パラメーターをゲスト XML 設定の <blkio> 要素に手動で設定したり、表示したりすることができます。

仮想マシンの現在の <blkio> パラメーターを表示するには、以下を実行します。

# virsh blkiotune virtual_machine

仮想マシンの <blkio> パラメーターを設定するには、以下のコマンドを参照し、ご使用の環境に応じて値を置き換えます。

# virsh blkiotune virtual_machine [--weight number] [--device-weights string] [--config] [--live] [--current]

パラメーターには以下が含まれます。

weight

I/O ウェイト値 (100 から 1000 の範囲内)。

device-weights

/path/to/device,weight,/path/to/device,weight 形式で 1 つ以上の device/weight のペアを一覧表示する単一文字列です。それぞれのウェイトは 100-1000 の範囲内にあるか、またはデバイスごとの一覧からデバイスを削除するには値は 0 である必要があります。文字列に一覧表示されているデバイスのみが変更されます。他のデバイスの既存のデバイスごとのウェイトは変更されません。

config

次回の起動時に変更を有効にするには、--config オプションを追加します。

live

実行中の仮想マシンに変更を適用するには、--live オプションを追加します。

注記

--live オプションは、ハイパーバイザーがこのアクションをサポートするように要求します。すべてのハイパーバイザーがメモリー上限のライブの変更を許可する訳ではありません。

current

変更を現在の仮想マシンに適用するには、--current オプションを追加します。

注記

virsh blkiotune コマンドの使用についての詳細は、# virsh help blkiotune を参照してください。

⁠6.3. キャッシュ

キャッシュオプションは、ゲストのインストール時に virt-manager で設定することも、ゲスト XML 設定を編集して既存のゲスト仮想マシン上で設定することもできます。

⁠

表6.1 キャッシュオプション

キャッシュオプション | 説明
Cache=none | ゲストからの I/O はホストではキャッシュされませんが、ライトバックディスクキャッシュに保持することができます。大きな I/O 要件を持つゲストにはこのオプションを使用します。 一般的にこのオプションが最適で移行に対応する唯一のオプションとなります。
Cache=writethrough | ゲストからの I/O はホストにはキャッシュされ、 物理的な媒体に書き込むことができます。 このモードを使用すると速度の低下が見られ、 またゲスト数の規模が一定以上になると問題が発生する傾向にあります。 I/O 要求が低い小規模のゲスト群への使用に適しています。 ゲスト移行の必要性がなく、 ライトバックキャッシュに対応していないゲストに推奨されるモードです(Red Hat Enterprise Linux 5.5 以前)。
Cache=writeback | ゲストからの I/O がホストにキャッシュされます。
Cache=directsync | writethrough と似ていますが、ゲストからの I/O はホストページのキャッシュをバイパスします。
Cache=unsafe | ホストはすべてのディスク I/O をキャッシュする可能性がありますが、ゲストからの同期要求は無視されます。
Cache=default | キャッシュモードが指定されない場合、システムのデフォルト設定が選択されます。

virt-manager では、キャッシュモードは Virtual Disk 以下で指定できます。キャッシュモードを変更するために virt-manager を使用する方法についての詳細は、「仮想ディスクパフォーマンスのオプション」 を参照してください。

ゲスト XML 内でキャッシュモードを設定するには、driver タグ内で cache 設定を編集し、キャッシュオプションを指定します。たとえば、キャッシュを writeback として設定するには、以下を実行します。

<disk type='file' device='disk'>
          <driver name='qemu' type='raw' cache='writeback'/>

⁠6.4. I/O モード

I/O オプションは、ゲストのインストール時に virt-manager で設定することも、ゲスト XML 設定を編集して既存のゲスト仮想マシン上で設定することもできます。

⁠

表6.2 I/O モードのオプション

I/O モードのオプション | 説明
IO=native | Red Hat Enterprise Virtualization 環境のデフォルトです。このモードは直接 I/O オプションが設定されたカーネルの非同期 I/O を参照します。
IO=threads | デフォルトは、ホストユーザーモードベースのスレッドです。
IO=default | Red Hat Enterprise Linux 7 におけるデフォルトはスレッドモードです。

virt-manager では、I/O モードは Virtual Disk 以下で指定できます。I/O モードを変更するために virt-manager を使用する方法についての詳細は、「仮想ディスクパフォーマンスのオプション」 を参照してください。

ゲスト XML 内で I/O モードを設定するには、driver タグ内で io 設定を編集し、native、threads、または default を指定します。たとえば、I/O モードを threads に設定するには、以下を実行します。

<disk type='file' device='disk'>
          <driver name='qemu' type='raw' io='threads'/>

⁠6.5. ブロック I/O のチューニング方法

本章では、仮想化環境におけるブロック I/O パフォーマンス調整の詳細の方法について説明します。

⁠6.5.1. ディスク I/O スロットリング

複数の仮想マシンが同時に実行される場合、それらは過剰なディスク I/O を使用することでシステムのパフォーマンスに影響を与える可能性があります。KVM のディスク I/O スロットリングは、仮想マシンからホストマシンに送られるディスク I/O 要求に制限を設定する機能を提供します。これにより、1 台の仮想マシンが共有リソースを過剰に使用し、他の仮想マシンのパフォーマンスに影響を与えることを防ぐことができます。

ディスク I/O スロットリングは、異なる顧客に属するゲスト仮想マシンが同じホストで実行されている場合や、異なるゲストについてサービスの品質保証がなされている場合などの各種の状況で役立ちます。ディスク I/O スロットリングは、低速なディスクをシミュレーションするために使用することもできます。

I/O スロットリングは、ゲストに割り当てられた各ブロックデバイスに独自に適用でき、スループットおよび I/O 操作上の制限をサポートします。virsh blkdeviotune コマンドを使用して仮想マシンの I/O 制限を設定します。以下の例を参照してください。

# virsh blkdeviotune virtual_machine device --parameter limit

device には、仮想マシンに割り当てられているディスクデバイスのいずれかの固有のターゲット名 (<target dev='name'/>) またはソースファイル (<source file='name'/>) を指定します。ディスクデバイス名の一覧については、virsh domblklist コマンドを使用します。

オプションのパラメーターには以下が含まれます。

total-bytes-sec

秒あたりのバイト単位の合計スループット制限

read-bytes-sec

秒あたりのバイト単位の読み込みスループット制限

write-bytes-sec

秒あたりのバイト単位の書き込みスループット制限

total-iops-sec

秒あたりの合計 I/O 回数制限

read-iops-sec

秒あたりの読み込み I/O 回数制限

write-iops-sec

秒あたりの書き込み I/O 回数制限

たとえば、virtual_machine 上の vda を 1 秒あたり 1000 I/O 操作および 1 秒あたり 50 MB スループットをスロットリングするには、このコマンドを実行します。

# virsh blkdeviotune virtual_machine vda --total-iops-sec 1000 --total-bytes-sec 52428800

⁠6.5.2. マルチキュー virtio-scsi

マルチキュー virtio-scsi は、virtio-scsi ドライバーにおける強化されたストレージパフォーマンスとスケーラビリティーを提供します。これは、他の vCPU に影響を与えることなく、それぞれの仮想 CPU に別個のキューや割り込みを持たせることができます。

⁠6.5.2.1. マルチキュー virtio-scsi の設定

マルチキュー virtio-scsi は Red Hat Enterprise Linux 7 ではデフォルトで無効にされています。

ゲストでマルチキュー virtio-scsi サポートを有効にするには、以下をゲスト XML 設定に追加します。ここで、N は vCPU キューの合計数です。

   <controller type='scsi' index='0' model='virtio-scsi'>
   <driver queues='N' />
    </controller>

⁠第7章 メモリー

⁠7.1. はじめに

本章では、 仮想化した環境におけるメモリーの最適化オプションについて説明しています。

⁠7.2. メモリーチューニングのヒント

仮想化環境でメモリーパフォーマンスを最適化するには、以下を考慮してください。

使用する量よりも多くのリソースをゲストに割り当てない。

可能であれば、リソースが NUMA ノードに十分にある場合はゲストを単一の NUMA ノードに割り当てます。NUMA の使用についての詳細は、8章NUMA を参照してください。

⁠7.3. 仮想マシン上でのメモリーチューニング

⁠7.3.1. メモリー監視ツール

メモリーの使用は、ベアメタル環境で使用されるツールを使って仮想マシンで監視することができます。メモリー使用の監視とメモリー関連の問題の診断に役立つツールには以下が含まれます。

top

vmstat

numastat

/proc/

注記

これらのパフォーマンスツールの使用方法についての詳細は、『Red Hat Enterprise Linux 7 パフォーマンスチューニングガイド』、およびこれらのコマンドについての man ページを参照してください。

⁠7.3.2. virsh を使用したメモリーチューニング

ゲスト XML 設定のオプションの <memtune> 要素により、管理者はゲスト仮想マシンのメモリー設定を手動で設定することができます。<memtune> が省略される場合、デフォルトのメモリー設定が適用されます。

virsh memtune コマンドを使って、仮想マシン内の <memtune> 要素にメモリーパラメーターを表示または設定します。ご使用の環境に応じて値を置き換えます。

# virsh memtune virtual_machine --parameter size

オプションのパラメーターには以下が含まれます。

hard_limit

仮想マシンが使用できる最大メモリーです。この値はキビバイト (1024 バイトのブロック) で表されます。

警告

この値の設定が低すぎると、仮想マシンがカーネルによって kill される可能性があります。

soft_limit

これは、メモリー競合中に強制するメモリーの制限です。この値はキビバイト (1024 バイトのブロック) で表されます。

swap_hard_limit

これは、仮想マシンが使用できる最大メモリーに swap を足したものです。この値はキビバイト (1024 バイトのブロック) で表されます。swap_hard_limit の値は hard_limit 値よりも大きくなければなりません。

min_guarantee

これは、仮想マシンへの割り当てを保証できる最小メモリーです。この値はキビバイト (1024 バイトのブロック) で表されます。

注記

virsh memtune コマンドの使用方法についての詳細は、# virsh help memtune を参照してください。

オプションの <memoryBacking> 要素には、仮想メモリーページがホストページで保護される方法に影響を与えるいくつかの要素が含まれる場合があります。

locked を設定すると、ホストがゲストに属するメモリーページをスワップアウトすることを回避します。ホストのメモリーで仮想メモリーページをロックするには、以下をゲスト XML に追加します。

<memoryBacking>
        <locked/>
</memoryBacking>

重要

locked を設定する際、<memtune> 要素の hard_limit には、ゲストに設定された最大メモリーにプロセス自体で消費されたメモリーを足したものを設定する必要があります。

nosharepages を設定すると、ホストがゲスト間で使用される同じメモリーをマージすることが回避されます。ハイパーバイザーに対してゲストの共有ページを無効にするよう指示するには、以下をゲストの XML に追加します。

<memoryBacking>
         <nosharepages/>
</memoryBacking>

⁠7.3.3. Huge Page および Transparent Huge Page (THP)

通常、x86 CPU は 4kB ページ単位でメモリーに対応しますが、huge page とも言われる 2MB または 1 GB の大容量ページを使用することも可能です。TLB （Transaction Lookaside Buffer) に対して CPU キャッシュの使用を増加させてパフォーマンスを向上させる場合、huge page メモリー対応で KVM のゲストを導入することができます。

huge page はカーネルの機能で、Red Hat Enterprise Linux 7 ではデフォルトで有効になっています。とくに大容量のメモリーやメモリー集約型のワークロードでパフォーマンスが大幅に向上します。Red Hat Enterprise Linux 7 では、huge page を使用することでページサイズを増加させ、より効率的な大容量メモリーの管理が可能になります。

⁠

手順7.1 ゲストの 1GB huge page を有効化

Red Hat Enterprise Linux 7.1 システムは、2MB または 1GB huge page をサポートします。これらは起動時またはランタイム時に割り当てることができます。どちらのページサイズもラインタイム時に解放できます。たとえば、起動時に 1GB の huge page を 4 ページと 2MB の huge page を 1024 ページ割り当てるには以下のコマンドラインを使用します。

'default_hugepagesz=1G hugepagesz=1G hugepages=4 hugepagesz=2M hugepages=1024'

または、huge page はランタイム時に割り当てることができます。ランタイム時の割り当てにより、システム管理者はそれらのページの割り当て元となる NUMA ノードを選択できます。ただし、ランタイム時のページ割り当ては、メモリーの断片化により起動時の割り当てよりも割り当てが失敗する確率が大きくなります。以下のランタイム時の割り当て例では、node1 から 1GB の huge page を 4 ページ割り当て、node3 から 2MB の huge page を 1024 ページ割り当てます。

# echo 4 > /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages
# echo 1024 > /sys/devices/system/node/node3/hugepages/hugepages-2048kB/nr_hugepages

次に、ホストに 2MB および 1GB huge page をマウントします。

# mkdir /dev/hugepages1G
# mount -t hugetlbfs -o pagesize=1G none /dev/hugepages1G
# mkdir /dev/hugepages2M
# mount -t hugetlbfs -o pagesize=2M none /dev/hugepages2M

ゲスト上で 1GB huge page の使用を有効にするために libvirtd を再起動します。

# systemctl restart libvirtd

ゲストについて 1GB huge page が利用可能になりました。NUMA ノード固有の huge page を設定するには、「ホストの Huge Page の複数ゲスト NUMA ノードへの割り当て」 を参照してください。

⁠7.3.3.1. Transparent Huge Page の設定

Transparent huge page (THP) は、パフォーマンスのシステム設定を自動的に最適化します。すべての空きメモリーをキャッシュとして使用できるようにすることで、パフォーマンスが向上します。

Transparent huge page は、/sys/kernel/mm/transparent_hugepage/enabled が always に設定される場合にデフォルトで使用されます。transparent huge page を無効にするには、以下を実行します。

# echo never > /sys/kernel/mm/transparent_hugepage/enabled

Transparent Huge Page サポートによって hugetlbfs の使用が妨げられることはありません。ただし、hugetlbfs を使用しない場合には、通常の 4 kb ページサイズではなく transparent hugepage が KVM によって使用されます。

⁠7.3.3.2. 静的 Huge Page の設定

huge page の制御を強化することが望ましい場合があります。ゲスト上で静的な huge page を使用するには、virsh edit を使用してゲスト XML 設定に以下を追加します。

<memoryBacking>
        <hugepages/>
</memoryBacking>

これは、ホストに対して、デフォルトのページサイズではなく huge page を使用してメモリーをゲストに割り当てるよう指示します。

Red Hat Enterprise Linux 7.1 では、ホストからの huge page はゲスト NUMA ノードに割り当てることができます。ゲスト XML の <memoryBacking> 要素に huge page サイズ、ユニット、およびゲスト NUMA ノードセットを指定します。詳細情報および設定例については、「ホストの Huge Page の複数ゲスト NUMA ノードへの割り当て」 を参照してください。

以下のコマンドを実行して、現在の huge page の値を表示します。

cat /proc/sys/vm/nr_hugepages

⁠

手順7.2 huge page の設定

以下の手順例は、huge page を設定するためのコマンドを示しています。

現在の huge page の値を確認:

# cat /proc/meminfo | grep Huge
AnonHugePages:      2048 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

Huge page は 2MB 単位で設定されます。huge page の数を 25000 に設定するには、以下のコマンドを使用します。

echo 25000 > /proc/sys/vm/nr_hugepages

注記

または、この設定を永続化するには、# sysctl -w vm.nr_hugepages=N コマンドを使用します。この際、N には huge page の数を指定します。

huge page のマウント:

# mount -t hugetlbfs hugetlbfs /dev/hugepages

libvirtd を再起動してから、以下のコマンドを使って仮想マシンを再起動します。

# systemctl start libvirtd

# virsh start virtual_machine

/proc/meminfo の変更を検証します。

# cat /proc/meminfo | grep Huge
AnonHugePages:         0 kB
HugePages_Total:   25000
HugePages_Free:    23425
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

huge page はホストだけでなくゲストにとっても便利ですが、huge page の合計ページ数は必ずホスト内で利用できるページ数より少なくしてください。

⁠第8章 NUMA

⁠8.1. はじめに

従来の x86 システムでは、 メモリーはすべて均等に全 CPU からアクセスできるようになっていました。 どの CPU が動作を実行するかに関わらず、 UMA (Uniform Memory Access) と呼ばれるアクセスタイムは同じになります。

最新の x86 プロセッサーでは、この動作が異なってきています。NUMA (Non-Uniform Memory Access) では、システムのメモリーが複数の NUMA ノード に区分けされます。これらのノードは、ソケット、またはシステムメモリーのローカルのサブセットに対する同一のアクセス待ち時間を持つ特定セットの CPU に対応しています。

本章では、仮想化した環境におけるメモリーの割り当ておよび NUMA チューニング設定について説明します。

⁠8.2. NUMA メモリー割り当てのポリシー

システム内のノードからどのようにメモリーを割り当てるのかは 3 つのポリシーで定義されます。

Strict

目的のノードにメモリーを割り当てられない場合、 他のノードにフォールバックするのが割り当てのデフォルト動作になります。 Strict ポリシーでは、 目的のノードにメモリーを割り当てられない場合は割り当てに失敗することになります。

Interleave

メモリーページはノードマスクで指定された複数のノード全体に割り当てられますが、 割り当てはラウンドロビン方式で行なわれます。

Preferred

単一の優先メモリーノードからのみメモリーの割り当てが行なわれます。 十分なメモリーが使用できない場合には、 他のノードからメモリーを割り当てることができます。

XML 設定で目的のポリシーを有効にします。

<numatune>
        <memory mode='preferred' nodeset='0'>
</numatune>

⁠8.3. NUMA の自動負荷分散

NUMA の自動負荷分散により、NUMA ハードウェアシステムで実行するアプリケーションのパフォーマンスが向上します。この機能は Red Hat Enterprise Linux 7 システムではデフォルトで有効にされます。

通常アプリケーションは、スレッドがスケジュールされるのと同じ NUMA ノード上でプロセスのスレッドがメモリーにアクセスする場合に最適に実行されます。NUMA の自動負荷分散は、スレッドがアクセスしているメモリーの近くにタスク (スレッドまたはプロセス) を移行します。さらに、アプリケーションデータを、これを参照するタスクの近くにあるメモリーに移動します。これはすべて、NUMA 自動負荷分散がアクティブな場合にカーネルによって自動的に実行されます。

NUMA の自動負荷分散は、数多くのアルゴリズムおよびデータ構造を使用します。これらは NUMA の自動負荷分散がシステム上でアクティブな場合にのみアクティブになり、割り当てられます。

Periodic NUMA unmapping of process memory (プロセスメモリーの定期的な NUMA マッピング解除)

NUMA hinting fault (NUMA ヒンティングフォールト)

Migrate-on-Fault (MoF) - メモリーを使用するプログラムが実行される場所にメモリーを移動します。

task_numa_placement - 実行中のプログラムをそれらのメモリーの近くに移動します。

⁠8.3.1. NUMA の自動負荷分散の設定

Red Hat Enterprise Linux 7 では、NUMA の自動負荷分散はデフォルトで有効にされており、この機能は NUMA プロパティーが設定されたハードウェア上で起動する際に自動的にアクティブにされます。

NUMA の自動負荷分散は、以下の条件の両方を満たす場合に有効にされます。

# numactl --hardware は複数のノードを表示します。

# cat /sys/kernel/debug/sched_features により、フラグに NUMA が表示されます。

NUMA の手動によるアプリケーションのチューニングは NUMA の自動負荷分散をオーバーライドし、メモリーの定期的なマッピング解除、NUMA フォールト、移行、およびそれらのアプリケーションの自動の NUMA 配置を無効にします。

システム全体での手動の NUMA チューニングがより望ましい場合があります。

NUMA の自動負荷分散を無効にするには、以下のコマンドを使用します。

# echo 0 > /proc/sys/kernel/numa_balancing

NUMA の自動負荷分散を有効にするには、以下のコマンドを使用します。

# echo 1 > /proc/sys/kernel/numa_balancing

⁠8.4. libvirt の NUMA チューニング

通常 NUMA システム上の最高のパフォーマンスは、単一 NUMA ノードのリソース量にゲストのサイズを制限することによって達成できます。複数の NUMA ノード間でリソースを不必要に分割することを避けてください。

numastat ツールを使用して、プロセスおよびオペレーティングシステムの NUMA ノードごとのメモリー統計を表示します。

以下の例では、numastat ツールは、複数の NUMA ノード間のメモリー配置が最適ではない 4 つの仮想マシンを示しています。

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51722 (qemu-kvm)     68     16    357   6936      2      3    147    598  8128
51747 (qemu-kvm)    245     11      5     18   5172   2532      1     92  8076
53736 (qemu-kvm)     62    432   1661    506   4851    136     22    445  8116
53773 (qemu-kvm)   1393      3      1      2     12      0      0   6702  8114
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total              1769    463   2024   7462  10037   2672    169   7837 32434

numad を実行して、ゲストの CPU とメモリーリソースを自動的に調整します。

次に numastat -c qemu-kvm を再び実行して実行中の numad の結果を表示します。以下の出力は、リソースが調整されていることを示しています。

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51747 (qemu-kvm)      0      0      7      0   8072      0      1      0  8080
53736 (qemu-kvm)      0      0      7      0      0      0   8113      0  8120
53773 (qemu-kvm)      0      0      7      0      0      0      1   8110  8118
59065 (qemu-kvm)      0      0   8050      0      0      0      0      0  8051
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total                 0      0   8072      0   8072      0   8114   8110 32368

注記

-c を指定して numastat を実行することにより、簡易出力が表示されます。-m オプションを追加することにより、システム全体でのメモリー情報のノード別の内訳が出力に追加されます。詳細は、numastat の man ページを参照してください。

⁠8.4.1. NUMA の vCPU ピニング

vCPU pinning は、ベアメタルシステム上でのタスクを固定する場合と同様の利点を提供します。vCPU はホストオペレーティングシステム上でユーザー領域タスクとして実行されるため、ピニングによりキャッシュ効率が増大します。この 1 つの例となるのは、すべての vCPU スレッドが同じ物理ソケット上で実行されるため、それらが L3 キャッシュドメインを共有する環境です。

vCPU ピニングを numatune と組み合わせることにより、NUMA ミスが回避されます。NUMA ミスによるパフォーマンスへの影響は大きく、通常はパフォーマンスが 10% 以上低下します。vCPU ピニングと numatune は一緒に設定する必要があります。

仮想マシンがストレージまたはネットワーク I/O タスクを実行している場合、I/O アダプターに物理的に接続されている同じ物理ソケットにすべての vCPU とメモリーを固定すると効果的です。

注記

lstopo ツールを使用して NUMA トポロジーを仮想化することができます。さらに、このツールは vCPU が同じ物理ソケットのコアにバインドされていることを検証する際にも役立ちます。lstopo についての詳細は、以下のナレッジベースの記事を参照してください: https://access.redhat.com/site/solutions/62879

重要

ピニングは、物理コアより多くの vCPU がある場合に複雑性を高めます。

以下の XML 設定例では、 ドメインプロセスが物理 CPU 0 から 7 に固定されています。 vCPU スレッドはそれぞれ独自の cpusetに固定されています。たとえば、vCPU0 は物理 CPU0 に、vCPU1 は物理 CPU 1 にといった具合に固定されています。

<vcpu cpuset='0-7'>8</vcpu>
        <cputune>
                <vcpupin vcpu='0' cpuset='0'/>
                <vcpupin vcpu='1' cpuset='1'/>
                <vcpupin vcpu='2' cpuset='2'/>
                <vcpupin vcpu='3' cpuset='3'/>
                <vcpupin vcpu='4' cpuset='4'/>
                <vcpupin vcpu='5' cpuset='5'/>
                <vcpupin vcpu='6' cpuset='6'/>
                <vcpupin vcpu='7' cpuset='7'/>
        </cputune>

vcpu と vcpupin タグ間には直接的な関係があります。vcpupin オプションを指定しないと、値は自動的に確定され、親となる vcpu タグオプションから継承されます。以下の設定では vcpu 5 の<vcpupin> がないことを示しています。したがって、vCPU5 は親タグの <vcpu> で指定しているように物理 CPU の 0 から 7 に固定される可能性があります。

<vcpu cpuset='0-7'>8</vcpu>
        <cputune>
                <vcpupin vcpu='0' cpuset='0'/>
                <vcpupin vcpu='1' cpuset='1'/>
                <vcpupin vcpu='2' cpuset='2'/>
                <vcpupin vcpu='3' cpuset='3'/>
                <vcpupin vcpu='4' cpuset='4'/>
                <vcpupin vcpu='6' cpuset='6'/>
                <vcpupin vcpu='7' cpuset='7'/>
        </cputune>

重要

最も確実に最適なパフォーマンスを達成するには、<vcpupin>、<numatune>、および <emulatorpin> を一緒に設定する必要があります。<numatune> タグの詳細は、「ドメインプロセス」 を参照してください。<emulatorpin> タグの詳細は、「emulatorpin の使用」 を参照してください。

⁠8.4.2. ドメインプロセス

Red Hat Enterprise Linux で規定されている通り、libvirt ではドメインプロセスのメモリーバインディングのポリシー設定に libnuma を使用します。これらのポリシーのノードセットは、static (ドメイン XML に指定) か、または auto (numad のクエリーで設定) のいずれかに設定することができます。<numatune> タグ内にこれらのポリシーを設定する方法は、以下の XML 設定例を参照してください。

<numatune>
        <memory mode='strict' placement='auto'/>
</numatune>

<numatune>
        <memory mode='strict' nodeset='0,2-3'/>
</numatune>

libvirt は、sched_setaffinity(2) を使ってドメインプロセスの CPU バインディングポリシーを設定します。cpuset オプションは static (ドメイン XML で指定) または auto (numad のクエリーで設定) にすることができます。<vcpu> タグ内にこれらを設定する方法については、以下の XML 設定例を参照してください。

<vcpu placement='auto'>8</vcpu>

<vcpu placement='static' cpuset='0-10,ˆ5'>8</vcpu>

<vcpu> および <numatune> に使用する配置モード間には暗黙的な継承ルールがあります。

<numatune> の配置モードでは <vcpu> と同じ配置モードにデフォルト設定されます。または、<nodeset> を指定した場合はstatic に設定されます。

同様に、<vcpu> の配置モードでは <numatune> と同じ配置モードにデフォルト設定されます。または、<cpuset> を指定した場合は static に設定されます。

つまり、ドメインプロセスのメモリーチューニングと CPU チューニングは別々に指定し、 定義することができますが、同時に相互の配置モードに依存するように設定することもできます。

起動時にすべての vCPU を固定せずに選択した数の vCPU を起動できるように numad を使用してシステムを設定することもできます。

たとえば、32 の vCPU が設定されたシステムで 8 つの vCPU のみを有効にするには、以下のように XML を設定します。

<vcpu placement='auto' current='8'>32</vcpu>

注記

vcpu および numatune に関する詳細は、http://libvirt.org/formatdomain.html#elementsCPUAllocation および http://libvirt.org/formatdomain.html#elementsNUMATuning を参照してください。

⁠8.4.3. ドメインの vCPU スレッド

ドメインプロセスのチューニングのほかにも、libvirt では XML 設定内の vcpu の各スレッドにピニングポリシーの設定を許可します。<cputune> タグ内に各 vcpu スレッドのピニングポリシーを設定します。

<cputune>
        <vcpupin vcpu="0" cpuset="1-4,ˆ2"/>
        <vcpupin vcpu="1" cpuset="0,1"/>
        <vcpupin vcpu="2" cpuset="2,3"/>
        <vcpupin vcpu="3" cpuset="0,4"/>
</cputune>

このタグでは、 libvirt は cgroup または sched_setaffinity(2) のいずれかを使って vcpu スレッドを指定の cpuset に固定しています。

注記

<cputune> の詳細は、以下の URL を参照してください: http://libvirt.org/formatdomain.html#elementsCPUTuning

⁠8.4.4. emulatorpin の使用

ドメインプロセスのピニングポリシーを調整する別の方法として、<cputune> 内で <emulatorpin> タグを使用する方法があります。

<emulatorpin> タグは、エミュレーター (vCPU を含まないドメインのサブセット) が固定されるホスト物理 CPU を指定します。<emulatorpin> タグは、エミュレーターのスレッドプロセスに正確な親和性を設定する方法を提供します。結果として vhost スレッドは物理 CPU およびメモリーの同じサブセットで実行されるため、キャッシュの局所性によるメリットがあります。たとえば、以下のようになります。

<cputune>
        <emulatorpin cpuset="1-3"/>
</cputune>

注記

Red Hat Enterprise Linux 7 では、NUMA の自動負荷分散はデフォルトで有効にされています。NUMA の自動負荷分散は、vhost-net エミュレータースレッドと vCPU タスクとの連携がより正確に行われるため、<emulatorpin> を手動で調整する必要性を軽減します。NUMA の自動負荷分散についての詳細は、「NUMA の自動負荷分散」 を参照してください。

⁠8.4.5. virsh を使用した vcpu ピニングのチューニング

重要

以下に示すのは説明を目的としたコマンド例に過ぎません。 実際には、使用する環境に適した値を入力する必要があります。

以下の virsh コマンド例では、ID が 1 の vcpu スレッド (rhel7) を物理 CPU 2 に固定しています。

% virsh vcpupin rhel7 1 2

さらに、virsh コマンドで 現在の vcpu ピニング設定を取得することもできます。以下は例になります。

% virsh vcpupin rhel7

⁠8.4.6. virsh を使用したドメインプロセスの CPU ピニングのチューニング

重要

以下に示すのは説明を目的としたコマンド例に過ぎません。 実際には、使用する環境に適した値を入力する必要があります。

emulatorpin オプションでは、各ドメインプロセスに関連付けられたスレッドに CPU 親和性の設定を適用します。詳細のピニングを実行するには、virsh vcpupin (前述) と virsh emulatorpin の両方を各ゲストに使用する必要があります。例を示します。

% virsh emulatorpin rhel7 3-4

⁠8.4.7. virsh を使用したドメインプロセスのメモリーポリシーのチューニング

ドメインプロセスのメモリーには動的なチューニングを実行できます。以下のコマンド例を参照してください。

% virsh numatune rhel7 --nodeset 0-10

これらのコマンドの詳細な使用例については、virsh の man ページを参照してください。

⁠8.4.8. ゲスト NUMA トポロジー

ゲスト NUMA トポロジーは、ゲスト仮想マシンの XML の <cpu> タグ内にある <numa> タグを使って指定できます。以下の例を参照し、値を適宜置き換えてください。

<cpu>
        ...
    <numa>
      <cell cpus='0-3' memory='512000'/>
      <cell cpus='4-7' memory='512000'/>
    </numa>
    ...
</cpu>

それぞれの <cell> 要素は NUMA セルまたは NUMA ノードを指定します。cpus は、ノードの一部である CPU または CPU の範囲を指定します。memory はノードメモリーをキビバイト単位で指定します (1024 バイトのブロック)。それぞれのセルまたはノードには、0 から始まる昇順で cellid または nodeid が割り当てられます。

⁠8.4.9. ホストの Huge Page の複数ゲスト NUMA ノードへの割り当て

Red Hat Enterprise Linux 7.1 では、ホストからの huge page は複数のゲスト NUMA ノードに割り当てることができます。これにより、ゲストがホストによって割り当てられた huge page を引き続き使用できる一方でゲスト NUMA ノードを必要に応じてホストの NUMA ノードに移行できるため、メモリーのパフォーマンスを最適化できます。

ゲスト NUMA ノードトポロジーを設定した後 (詳細は、「ゲスト NUMA トポロジー」 を参照)、ゲスト XML の <memoryBacking> 要素に huge page サイズおよびゲスト NUMA ノードセットを指定します。page size および unit はホストからの huge page のサイズを参照します。nodeset は huge page が割り当てられるゲスト NUMA ノード (またはいくつかのノード) を指定します。

以下の例では、ゲスト NUMA ノード 0-5 (NUMA ノード 4 を除く) は 1GB の huge page を使用し、ゲスト NUMA ノード 4 は、ホスト上のゲスト NUMA ノードの位置にかかわらず 2MB の huge page を使用します。ゲストに 1GB の huge page を使用するには、ホストを 1GB の huge page を有効にした状態でまず起動しておく必要があります。1 GB の huge page を有効にする方法は、「Huge Page および Transparent Huge Page (THP)」 を参照してください。

<memoryBacking>
        <hugepages/>
          <page size="1" unit="G" nodeset="0-3,5"/>
          <page size="2" unit="M" nodeset="4"/>
        </hugepages>
</memoryBacking>

これにより、一部のゲスト NUMA ノードを単一のホスト NUMA ノードにマージするものの、huge page の複数の異なるサイズを継続して使用するのが便利な場合に huge page の制御を強化できます。たとえば、ゲスト NUMA ノード 4 および 5 がホストの NUMA ノード 1 に移行される場合でも、それらがいずれも異なるサイズの huge page を引き続き使用する場合などが考えられます。

注記

strict メモリーノードを使用する場合、NUMA ノードに利用可能な huge page が十分にない場合はゲストが起動に失敗します。<numatune> 内の strict メモリーモードオプションの設定例については、「ドメインプロセス」 を参照してください。

⁠8.4.10. PCI デバイスの NUMA ノード局所性

新規の仮想マシンを起動する際、ホスト NUMA トポロジーと PCI デバイスの NUMA ノードとの関連生の両方について理解しておくことは大切です。PCI パススルーが要求される場合、ゲストがメモリーパフォーマンスの最適化に向けて正しい NUMA ノードに固定されるようにするためです。

たとえば、ゲストが NUMA ノード 0-1 に固定するが、その PCI デバイスのいずれかがノード 2 に関連付けられる場合、ノード間のデータ送信にはいくらかの時間がかかります。

Red Hat Enterprise Linux 7.1 では、libvirt はゲスト XML で PCI デバイスの NUMA ノード局所性をレポートし、管理アプリケーションによってより良いパフォーマンス関連の決定ができるようにします。

この情報は、/sys/devices/pci*/*/numa_node の sysfs ファイルに表示されます。これらの設定を検証する 1 つの方法は、lstopo ツールを使用して sysfs データをレポートする方法です。

# lstopo-no-graphics
Machine (126GB)
  NUMANode L#0 (P#0 63GB)
    Socket L#0 + L3 L#0 (20MB)
      L2 L#0 (256KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0 + PU L#0 (P#0)
      L2 L#1 (256KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1 + PU L#1 (P#2)
      L2 L#2 (256KB) + L1d L#2 (32KB) + L1i L#2 (32KB) + Core L#2 + PU L#2 (P#4)
      L2 L#3 (256KB) + L1d L#3 (32KB) + L1i L#3 (32KB) + Core L#3 + PU L#3 (P#6)
      L2 L#4 (256KB) + L1d L#4 (32KB) + L1i L#4 (32KB) + Core L#4 + PU L#4 (P#8)
      L2 L#5 (256KB) + L1d L#5 (32KB) + L1i L#5 (32KB) + Core L#5 + PU L#5 (P#10)
      L2 L#6 (256KB) + L1d L#6 (32KB) + L1i L#6 (32KB) + Core L#6 + PU L#6 (P#12)
      L2 L#7 (256KB) + L1d L#7 (32KB) + L1i L#7 (32KB) + Core L#7 + PU L#7 (P#14)
    HostBridge L#0
      PCIBridge
        PCI 8086:1521
          Net L#0 "em1"
        PCI 8086:1521
          Net L#1 "em2"
        PCI 8086:1521
          Net L#2 "em3"
        PCI 8086:1521
          Net L#3 "em4"
      PCIBridge
        PCI 1000:005b
          Block L#4 "sda"
          Block L#5 "sdb"
          Block L#6 "sdc"
          Block L#7 "sdd"
      PCIBridge
        PCI 8086:154d
          Net L#8 "p3p1"
        PCI 8086:154d
          Net L#9 "p3p2"
      PCIBridge
        PCIBridge
          PCIBridge
            PCIBridge
              PCI 102b:0534
                GPU L#10 "card0"
                GPU L#11 "controlD64"
      PCI 8086:1d02
  NUMANode L#1 (P#1 63GB)
    Socket L#1 + L3 L#1 (20MB)
      L2 L#8 (256KB) + L1d L#8 (32KB) + L1i L#8 (32KB) + Core L#8 + PU L#8 (P#1)
      L2 L#9 (256KB) + L1d L#9 (32KB) + L1i L#9 (32KB) + Core L#9 + PU L#9 (P#3)
      L2 L#10 (256KB) + L1d L#10 (32KB) + L1i L#10 (32KB) + Core L#10 + PU L#10 (P#5)
      L2 L#11 (256KB) + L1d L#11 (32KB) + L1i L#11 (32KB) + Core L#11 + PU L#11 (P#7)
      L2 L#12 (256KB) + L1d L#12 (32KB) + L1i L#12 (32KB) + Core L#12 + PU L#12 (P#9)
      L2 L#13 (256KB) + L1d L#13 (32KB) + L1i L#13 (32KB) + Core L#13 + PU L#13 (P#11)
      L2 L#14 (256KB) + L1d L#14 (32KB) + L1i L#14 (32KB) + Core L#14 + PU L#14 (P#13)
      L2 L#15 (256KB) + L1d L#15 (32KB) + L1i L#15 (32KB) + Core L#15 + PU L#15 (P#15)
    HostBridge L#8
      PCIBridge
        PCI 1924:0903
          Net L#12 "p1p1"
        PCI 1924:0903
          Net L#13 "p1p2"
      PCIBridge
        PCI 15b3:1003
          Net L#14 "ib0"
          Net L#15 "ib1"
          OpenFabrics L#16 "mlx4_0"

この出力は以下の点を示しています。

NIC em* およびディスク sd* は NUMA ノード 0 およびコア 0、2、4、6、8、10、12、14 に接続されます。

NIC p1* および ib* は NUMA ノード 1 およびコア 1、3、5、7、9、11、13、15 に接続されます。

⁠8.5. NUMA 対応 KSM (Kernel SamePage Merging)

Kernel SamePage Merging (KSM) により、仮想マシンは同一のメモリーページを共有することができます。KSM はシステムが NUMA を使用していることを検知でき、かつ複数の異なる NUMA ノード間でマージするページを制御できます。

sysfs /sys/kernel/mm/ksm/merge_across_nodes パラメーターを使用して、複数の異なる NUMA ノード間でのページのマージを制御します。デフォルトで、すべてのノードのページは 1 つにマージできます。このパラメーターが 0 (ゼロ) に設定されると同じノードのページのみがマージされます。

通常、システムメモリーをオーバーサブスクライブしない場合、KSM 共有を無効にすることにより、ランタイムパフォーマンスを強化できます。

重要

KSM が複数のゲスト仮想マシンを持つ NUMA ホストの複数のノード間でマージする場合、より離れた場所にあるノードのゲストおよび CPU において、マージされた KSM ページへのアクセスの待ち時間が大幅に増加する可能性があります。

ハイパーバイザーに対してゲストの共有ページを無効にするよう指示するには、以下をゲストの XML に追加します。

<memoryBacking>
         <nosharepages/>
</memoryBacking>

<memoryBacking> 要素を使用してメモリー設定を調整する方法についての詳細は、「virsh を使用したメモリーチューニング」 を参照してください。

⁠付録A 改訂履歴

改訂履歴

改訂 1.0-15.1
Tue Nov 24 2015
Aiko Sasaki

翻訳ファイルを XML ソースバージョン 1.0-14 と同期

改訂 1.0-14
Fri Feb 27 2015
Dayle Parker

SME フィードバックに基づき huge page の章を更新 (BZ#1134744)。

改訂 1.0-13
Wed Feb 25 2015
Dayle Parker

SME フィードバックに基づき huge page の章を更新 (BZ#1134744)。

7.1 GA リリース向けのバージョンを更新

改訂 1.0-12
Wed Feb 18 2015
Dayle Parker

7.1 GA リリース向けのバージョン

改訂 1.0-11
Tue Feb 17 2015
Dayle Parker

PCI デバイスセクションの NUMA ノードの局所性を追加 (BZ#1134746)。

1GB huge page テキストに対する若干の編集。

改訂 1.0-10
Fri Feb 13 2015
Dayle Parker

厳密なページサイズについての注意点を追加 (BZ#1134660)。

huge page の章および NUMA huge page のセクションに 1 GB huge page についての注意点を追加 (BZ#1134744)。

改訂 1.0-09
Wed Jan 21 2015
Scott Radvan

sysctl コマンド構文を修正 (BZ#1183951)

改訂 1.0-08
Tue Jan 13 2015
Scott Radvan

ガイドの更新バージョンを公開

改訂 1.0-07
Mon Jan 12 2015
Scott Radvan

tuned パッケージがデフォルトでインストール (サービスは有効な状態)。yum/systemctl の指示を削除。BZ#1096788 を参照。

改訂 1.0-06
Mon Dec 8 2014
Scott Radvan

スプラッシュページを更新し、新しい sort_order を実装

改訂 1.0-05
Thurs Dec 4 2014
Dayle Parker

RHEL 7.1 Beta リリースを公開

改訂 1.0-04
Fri Nov 28 2014
Dayle Parker

huge page の複数ゲスト NUMA ノードへの割り当てについての huge page の参照を編集 (BZ#1134665)。

改訂 1.0-03
Thurs Nov 27 2014
Dayle Parker

huge page の複数ゲスト NUMA ノードへの割り当てに関するコンテンツを編集 (BZ#1134665)。

改訂 1.0-02
Wed Nov 26 2014
Dayle Parker

第 1 章の URL をサポート情報で更新。

ゲスト NUMA ノードの huge page のメモリーへの割り当てに関する章の段落および例を追加 (BZ#1134665)。

監視ツールが先頭に来るように、またメモリーチューニングおよび NUMA チューニング (関連) が 1 つにまとめられるように章の順番を再編成。

改訂 0.1-53
Mon Nov 17 2014
Dayle Parker

新規の tuned 機能についての注意点を追加 (BZ#1132234)。

改訂 0.1-52
Tues Sept 9 2014
Dayle Parker

システムメモリーの KSM へのオーバーサブスクライブに関するのセクションについての注意点を追加 (BZ#1098010)

改訂 0.1-51
Fri Aug 1 2014
Dayle Parker

tuned に関する章のカスタマーポータルのリンクを更新。

改訂 0.1-50
Tues June 3 2014
Dayle Parker

7.0 GA リリース向けバージョン

改訂 0.1-49
Tues June 3 2014
Dayle Parker

仮想マシンマネージャーの章のスクリーンショットを更新。

第 1 章のサポートに関する制限の URL を更新 (BZ#1064612)。

QE フィードバックに合わせて nosharepages パラメーターについての注意点をメモリーの章に追加 (BZ#1064616)。

改訂 0.1-48
Fri May 23 2014
Dayle Parker

QE フィードバックに合わせて NUMA の章の用語およびゲスト名を変更 (BZ#1064618)。

QE フィードバックに合わせてブロック I/O の章の blkiotune コマンドを編集し、「live」および「current」オプションを追加 (BZ#1064617)。

QE フィードバックに合わせて tuned-adm 一覧のコマンド出力を編集し、tuned 章の tuned.conf man ページの参照を追加 (BZ#1096793 および BZ#1096795)。

改訂 0.1-47
Tues May 20 2014
Dayle Parker

「はじめに」の章のサポートに関する制限の URL を更新。

改訂 0.1-46
Mon May 19 2014
Dayle Parker

「はじめに」の章および前書き部分のドキュメントスイート一覧を削除。

改訂 0.1-45
Fri May 9 2014
Dayle Parker

スタイル変更のための再ビルド。

改訂 0.1-43
Wed April 30 2014
Dayle Parker

emulatorpin の説明、vcpupin、numatune、および emulatorpin の設定についての拡張された注意点を NUMA 章に追加 (BZ#1031911)。

改訂 0.1-42
Thurs April 17 2014
Dayle Parker

numastat サンプルを NUMA 章に追加 (BZ#1011786)。

改訂 0.1-41
Fri April 11 2014
Dayle Parker

SME フィードバックに合わせてオーバーコミットの説明を編集、numastat コマンドを libvirt NUMA チューニングセクションに追加、および KSM についての表現を修正 (BZ#1011786)。

改訂 0.1-40
Wed April 9 2014
Dayle Parker

ベータ向けのビルドの更新。

改訂 0.1-38
Fri April 4 2014
Dayle Parker

メモリーの章を編集 (BZ#1057397)。

改訂 0.1-37
Thurs April 3 2014
Dayle Parker

メモリーの章を編集 (BZ#1057397)。

改訂 0.1-36
Wed April 2 2014
Dayle Parker

perf コマンドを vPMU セクションに追加 (BZ#799750)。

改訂 0.1-35
Tues April 1 2014
Dayle Parker

ブロック I/O の章の IO モードのオプションを編集。virt-manager の章の相互参照および新規スクリーンショットを追加。

SME フィードバックに合わせてゼロコピー送信の説明を編集 (BZ#794627)。

QE フィードバックに合わせて vPMU コマンドを編集 (BZ#1059016)。

改訂 0.1-33
Thurs March 27 2014
Dayle Parker

作成者グループを編集。

複数の章内のサブセクションを再編成。

「はじめに」の部分に Red Hat Enterprise Linux パフォーマンスチューニングガイドの参照を追加。

virt-manager の章の導入部を編集。

NUMA セクションを編集 (BZ#1031911)。

改訂 0.1-32
Wed March 26 2014
Dayle Parker

ディスク I/O スロットリングの説明を編集 (BZ#799753)。

blkiotune セクションに追加 (BZ#1031912)。

SME フィードバックのガイド全体を編集 (BZ#1011786 および BZ#1031911)。

改訂 0.1-31
Mon March 24 2014
Dayle Parker

ブロック I/O の章を編集 (BZ#799753 および BZ#1031912)。

SME フィードバックに合わせてガイド全体を編集 (BZ#1011786)。

改訂 0.1-30
Wed March 19 2014
Dayle Parker

新たな Red Hat Enterprise Virtualization ドキュメントが含まれるように仮想化ドキュメントスイートを更新

SME フィードバックに基づき tuned の章を編集 (BZ#952966)。

QE フィードバックに合わせて vPMU セクションを編集 (BZ#1059016)。

改訂 0.1-29
Tues Mar 11 2014
Dayle Parker

メモリーの章に virsh memtune コマンドを組み込む (BZ#1056915)。

改訂 0.1-28
Fri Mar 7 2014
Dayle Parker

SME フィードバックに基づいて transparent huge page セクションおよび NUMA の章を追加。

より多くの理論的な説明が必要な箇所にマーク付けをするため一時的なコメントを追加 (BZ#1031911)。

改訂 0.1-27
Thurs Mar 6 2014
Dayle Parker

ゲスト NUMA トポロジーのセクションを編集 (BZ#1056917)。

改訂 0.1-26
Tues Mar 4 2014
Dayle Parker

メモリーの章を編集 (BZ#1056915)。

改訂 0.1-25
Mon Mar 3 2014
Dayle Parker

cgroup についてのテキストを追加。

ゲスト NUMA トポロジーセクションを追加 (BZ#1056917)。

メモリーの章を編集 (BZ#1056915)。

改訂 0.1-24
Tues Feb 25 2014
Dayle Parker

導入部のマルチキュー virtio-scsi の説明を編集 (BZ#1034020)。

チューニング関連のコンテンツを「仮想化の導入および管理ガイド」から本書に移行。

仮想パフォーマンスの監視ユニットセクションを追加。

改訂 0.1-22
Fri Feb 14 2014
Dayle Parker

NUMA 対応の KSM セクションの若干の編集 (BZ#949244)。

SME のレビューに従って NUMA の導入部の用語を編集。

改訂 0.1-21
Thurs Feb 13 2014
Dayle Parker

若干の編集 (BZ#1056909)。

若干の編集 (BZ#1032535)。

改訂 0.1-19
Fri Feb 7 2014
Dayle Parker

ゼロコピー送信のセクションを作成および簡潔な説明を編集 (BZ#794627)。

NUMA の章を編集 (BZ#1032535)。

改訂 0.1-17
Wed Feb 5 2014
Dayle Parker

マルチキュー virtio-net セクションを編集 (BZ#794608、および BZ#1056909)。

NUMA の章を編集 (BZ#1032535 および BZ#1056917)。

改訂 0.1-16
Fri Jan 24 2014
Dayle Parker

SME フィードバックを、準仮想化された時刻関連の vsyscall の最適化 (BZ#1034029)、マルチキュー virtio-net (BZ#794608)、および APIC 仮想化 (BZ#799749) の説明に適用。

Hugepage および tuned セクションのコマンドを訂正。

改訂 0.1-13
Tues Dec 10 2013
Dayle Parker

SME フィードバックに基づいて NUMA の自動負荷分散のセクションを編集 (BZ#1032535)。

改訂 0.1-10
Fri Dec 6 2013
Dayle Parker

ベータリリース向けのバージョン

改訂 0.1-9
Thurs Dec 5 2013
Dayle Parker

Red Hat Enterprise Linux 7 パフォーマンス機能の一覧を編集。

SME フィードバックに基づいて NUMA の自動負荷分散のセクションを編集 (BZ#1032535)。

改訂 0.1-8
Wed Nov 27 2013
Dayle Parker

huge page セクションを編集。

パフォーマンス機能一覧にディスク I/O スロットリングを追加 (BZ#799753)。

章の構成についての注意点を「本ガイドについて」に追加。

改訂 0.1-7
Mon Nov 25 2013
Dayle Parker

multi-queue NIC サポートの説明を追加 (BZ#794608)。

Red Hat Enterprise Linux 7 パフォーマンス機能についての一覧を拡張。

改訂 0.1-6
Wed Nov 20 2013
Dayle Parker

Red Hat Enterprise Linux 7 におけるパフォーマンスの改善点についてのセクションを追加。

NUMA の自動負荷分散および NUMA 対応の KSM に関するセクションを追加 (BZ#1032535 および BZ#949244)。

ゼロコピー送信の説明を追加 (BZ#794627)。

改訂 0.1-5
Mon Nov 4 2013
Dayle Parker

パフォーマンスプロファイル情報を tuned セクションに追加 (BZ#952966)。

改訂 0.1-4
Thurs Oct 31 2013
Dayle Parker

「仮想化の導入および管理ガイド」に参照を追加 (BZ#1009206)。

第 1 章の仮想化ドキュメントスイートの一覧を更新。

改訂 0.1-3
Wed Oct 30 2013
Dayle Parker

本書の Red Hat Enterprise Linux 6 バージョン全体で改善された更新および表現を組み込む。

既存のコンテンツで tunued の章を作成。

ガイド全体でイメージのサイズ変更パラメーターを調整。

改訂 0.1-2
Wed Jan 23 2013
Scott Radvan

内部プレビューサイトへ送信。バージョン 7 向け初期ビルド

改訂 0.1-1
Thu Jan 17 2013
Scott Radvan

Red Hat Enterprise Linux 6 バージョンのドキュメントからブランチング。