ストレージ読み取りキャッシュ
読み取りキャッシュでは、外部ディスクからの最初の読み取り後、データがホストの空きメモリにキャッシュされるので、仮想マシンのディスクパフォーマンスが向上します。単一のベース仮想マシンから多数の仮想マシンが複製されている状況では、ディスクからの読み取りブロック数が大幅に削減されるため、パフォーマンスが向上します。たとえば、Citrix Virtual DesktopsのMachine Creation Services(MCS)環境などです。
データがメモリにキャッシュされるため、ディスクから複数回読み取る場合には常にパフォーマンスが向上します。最も顕著な例は、負荷の高いI/O処理によりサービス速度が低下している場合です。たとえば、次のような場合です:
- 多数のエンドユーザーが、非常に短時間の間に一斉に起動する場合(ブートストーム)
- 多数の仮想マシンが同時刻にマルウェアスキャンを実行するようにスケジュール指定されている場合(アンチウイルスストーム)。
適切なライセンスの種類がある場合は、読み取りキャッシュはデフォルトで有効です。
注:
ストレージ読み取りキャッシュ機能は、XenServer Premium Editionユーザーが利用できます。
読み取りキャッシュを有効または無効にする
NFS、EXT3/EXT4、SMB、GFS2ストレージリポジトリなど、ファイルベースのストレージリポジトリの場合、読み取りキャッシュはデフォルトでオンになっています。ほかのストレージリポジトリの場合はすべてデフォルトでオフです。
xe CLIを使用して、特定のストレージリポジトリで読み取りキャッシュを無効にするには、次のコマンドを実行します:
xe sr-param-set uuid=sr-uuid other-config:o_direct=true
<!--NeedCopy-->
XenCenterを使用して、特定のストレージリポジトリで読み取りキャッシュを無効にするには、そのストレージリポジトリの [プロパティ] ダイアログボックスに移動します。[読み取りキャッシュ] タブで、読み取りキャッシュを有効にするか無効にするかを選択できます。
詳しくは、「ストレージリポジトリプロパティの変更」を参照してください。
制限事項
-
読み取りキャッシュは、NFS、EXT3/EXT4、SMB、GFS2ストレージリポジトリの場合にのみ使用できます。そのほかの種類のストレージリポジトリでは使用できません。
-
読み取りキャッシュは、読み取り専用のVDIおよび親VDIに対してのみ適用されます。これらのVDIは、「高速複製」またはディスクスナップショットから作成された仮想マシン上に存在します。最もパフォーマンスが向上するのは、多数の仮想マシンが単一の「ゴールドイメージ」から複製されている場合です。
-
パフォーマンスが向上する度合いは、ホストのコントロールドメイン(dom0)で使用可能な空きメモリ量に応じて異なります。dom0のメモリ量を増やすと、読み取りキャッシュに割り当てられるメモリ量も増加します。dom0のメモリ量の設定について詳しくは、CTX134951を参照してください。
-
メモリ読み取りキャッシュがオンになっていると、キャッシュミスによってI/Oがシリアル化します。これは、読み取りキャッシュをオフにするよりもコストがかかる場合があります。読み取りキャッシュがオフの場合は、I/Oを並列化できるためです。キャッシュミスの影響を軽減するには、使用可能なdom0メモリの量を増やすか、SRの読み取りキャッシュを無効にします。
IntelliCacheとの比較
IntelliCacheおよびメモリベースの読み取りキャッシュは、ある意味において相補的です。IntelliCacheは、別の階層でキャッシュするだけではなく、読み取りおよび書き込みの両方をキャッシュします。IntelliCacheは、ネットワークからの読み取りをローカルディスクにキャッシュします。インメモリ読み取りキャッシュは、ネットワークまたはディスクからの読み取りをホストメモリにキャッシュします。インメモリ読み取りキャッシュの利点は、メモリの方がSolid-State Disk(SSD)よりも速度が10倍速いということです。このため、ブートストームや負荷の高いI/O処理の状況でも、パフォーマンスが向上します。
読み取りキャッシュとIntelliCacheは、同時に有効にすることができます。この場合、ネットワークからの読み取りをIntelliCacheがローカルディスクにキャッシュし、そのローカルディスクからの読み取りを、読み取りキャッシュがメモリにキャッシュします。
読み取りキャッシュサイズを設定する
読み取りキャッシュのパフォーマンスを最適化するには、XenServerのコントロールドメイン(dom0)のメモリ量を増やします。
重要:
最適化のために、読み取りキャッシュサイズは、プール内のすべてのホストで個別に設定する必要があります。読み取りキャッシュサイズに変更を加える場合は、プール内のすべてのホストに対して設定する必要があります。
XenServerホストのローカルシェルを開き、ルートユーザーとしてログオンします。
読み取りキャッシュサイズを設定するには、次のコマンドを実行します:
/opt/xensource/libexec/xen-cmdline --set-xen dom0_mem=nnM,max:nnM
<!--NeedCopy-->
初期値と最大値は、いずれも同じ値に設定する必要があります。たとえば、dom0メモリを20,480 MiBに設定するには、次のように入力します:
/opt/xensource/libexec/xen-cmdline --set-xen dom0_mem=20480M,max:20480M
<!--NeedCopy-->
重要:
読み取りキャッシュサイズを変更したら、すべてのホストを再起動します。
現在のdom0のメモリ割り当てを表示する
現在のdom0のメモリ設定を表示するには、次のように入力します:
free -m
<!--NeedCopy-->
free -m
の出力は、現在のdom0のメモリ設定を示しています。この値は、さまざまなオーバーヘッドにより想定された値よりも小さくなっている場合があります。次の表は、dom0を2.6GiBに設定した場合のホストの出力例です。
| | Total | Used | Free | Shared | Buffer/cache | Available |
|---------------------|--------|------|-------|--------|--------------|-----------|
| Mem: | 2450 | 339 | 1556 | 9 | 554 | 2019 |
| Swap: | 1023 | 0 | 1023 | | | |
<!--NeedCopy-->
使用可能な値の範囲は?
XenServerコントロールドメイン(dom0)は64ビットであるので、大きい値を使用できます(たとえば、32,768 MiB)。ただし、コントロールドメインに1 GiB未満のdom0メモリを割り当てることはお勧めしません。
XenCenterの表示に関する注意事項
ホストの全メモリがXenハイパーバイザー、dom0、仮想マシン、および空きメモリから構成されていることを認識する必要があります。通常、dom0と仮想マシンのメモリのサイズは固定されていますが、Xenハイパーバイザーが使用するメモリ量は可変です。使用されるメモリの量は、さまざまな要素によって異なります。これらの要素には、常時ホストで実行中の仮想マシン数と、これらの仮想マシンの設定方法が含まれます。Xenが使用するメモリ量は制限できません。メモリ量を制限すると、Xenでメモリが不足し、ホストに空きメモリが存在する場合でも、別の仮想マシンが起動できなくなる可能性があります。
ホストに割り当てられているメモリ量を表示するには、XenCenterでホストを選択してから [メモリ] タブをクリックします。
[XenServer]フィールドに、dom0に割り当てられているメモリとXenメモリの合計容量が表示されます。このため、表示されるメモリ量は、管理者が指定した容量よりも大きくなることがあります。また、管理者がdom0に固定サイズを設定した場合でも、仮想マシンの起動および停止時にメモリサイズが変動することがあります。