ディスクレイアウトには RAID 10 が推奨されます。RAID 10 は、ミラー化セットをストライプ化したものであり、データの ZFS ストライプ化が複数のセット間で自動的に行われます。このレイアウトは 7000 シリーズでは、「ミラー」と呼ばれています。このディスクレイアウトは使用可能なディスク容量の 50% を冗長性に使用しますが、iSCSI の典型的アクセス特性である集中的な小領域のランダムアクセスによる読み取り/書き込みでは、RAID 5 より高速です。
ストレージサーバーは、iSCSI を使用して Oracle VM VirtualBox によりアクセスされる仮想ディスクを提供します。iSCSI は多大な CPU 負荷がかかるプロトコルであるため、ストレージサーバーのコア数が、性能を左右する要素の 1 つとなります。その他の重要な要素には、記憶域サイズ (キャッシュ)、ディスク数、および使用できるネットワーク帯域幅があります。
ネットワーク帯域幅は非常に流動的であり、デスクトップの起動 (* ピークネットワーク帯域幅 *) と使用中のアプリケーションをキャッシュしたデスクトップ (* 平均ネットワーク帯域幅 *) の関係により決定されます。仮想マシンを起動すると (XP guest)、150M バイトのネットワーク負荷が発生します。この負荷は 30 秒以内に満たされなければなりません。同時に多くのデスクトップが起動されると、iSCSI トラフィックで作成される負荷をストレージの CPU で処理できる場合、要求されるネットワーク帯域幅は 1 Gbps を超える可能性もあります。このシナリオは、交代勤務制を採っている企業では一般的です。このような場合、「プール」、「複製」、または「マシンの状態」オプションを「実行中」に設定します。これにより、デスクトップが常に実行中となり、OS の起動がユーザーのログインから切り離されます。もう 1 つのオプションは、複数のインタフェースを中継して、1 つの IP で 1 Gbps を越える帯域幅を提供することです。ジャンボフレームを使用して iSCSI 接続を高速化することもできます。ジャンボフレームは、ネットワークに接続しているすべての部分 (ストレージサーバー、Oracle VM VirtualBox サーバー、およびスイッチ) で構成する必要があります。ジャンボフレームは標準化されていないため、非互換のリスクがあります。
Oracle VDI は Oracle VM VirtualBox と共に、ZFS の疎ボリューム機能を使用します。疎ボリュームを使用すると、実際に書き込まれるデータがストレージの容量を超えなければ、物理的に使用できる以上のディスク容量をボリュームに割り当てることができます。この機能があり、また複製されたデスクトップではテンプレートの変更されないデータが再使用されるため、使用可能なディスク容量が非常に効率的に使用されます。したがって、次に示すディスク容量の計算は、すべてのボリュームがテンプレートと違うデータで完全に使用されると仮定した最悪ケースのシナリオです。
コア数 = 使用中の仮想ディスク数 / 200
例: 2 CPU 構成の x7210 ストレージで各 CPU にコアが 4 つある場合、2 x 4 x 200 = 1600 仮想ディスクまで対応できます
記憶域サイズ - 多ければ多いほどよい。空き記憶域は、アクセス時間を低減するディスクキャッシュとして使用できます。
ディスク数 = デスクトップ数 / 10
平均ネットワーク帯域幅 [M ビット/秒] = 使用中の仮想ディスク数 x 0.032M ビット/秒
例: 1G ビット Ethernet インタフェース 1 つを備えた x7210 ストレージが対応できる仮想ディスクの数は、1000 / 0.032 = 31250 までです。
ピークネットワーク帯域幅 [M ビット/秒] = 使用中の仮想ディスク数 x 40M ビット/秒
例: 1G ビット Ethernet インタフェース 1 つを備えた x7210 ストレージが対応できる仮想ディスクの数は、1000 / 40 = 25 までです。
ディスク容量 [G バイト] = デスクトップ数 x 仮想ディスクサイズ [G バイト]
例: 容量が 46T バイトの x7210 ストレージは、46 x 1024G バイト / 2 / 8G バイト = 2944 台の 8G バイトディスク (RAID 10 構成) をサポートできます
デスクトップのパフォーマンスを改善する方法の詳細については、「デスクトップイメージの作成」 のデスクトップイメージの最適化に関するセクションを参照してください。
このセクションでは、ZFS キャッシュの構造とパフォーマンスの簡単な概要と、ZFS キャッシュを Sun Storage 7000 シリーズ Unified Storage System のハードウェアにマップする方法について説明します。
Zettabyte File System (ZFS) は、サポートされている Solaris および Sun Storage 7000 シリーズ Unified Storage System のストレージプラットフォームの基盤となるファイルシステムです。
Adaptive Replacement Cache (ARC) は、メインメモリー (DRAM) の ZFS 読み取りキャッシュです。
Second Level Adaptive Replacement Cache (L2ARC) はメインメモリー以外の場所に読み取りキャッシュデータを格納する場合に使用されます。Sun Storage 7000 シリーズ Unified Storage System は、L2ARC の読み取り用に最適化された SSD (Readzillas と呼ばれる) を使用します。SSD は DRAM よりも低速ですが、ハードディスクよりはかなり高速です。L2ARC では非常に大きなキャッシュを使用できるため、読み取りのパフォーマンスが改善されます。
ZFS Intent Log (ZIL) は、同期書き込みとクラッシュした場合の復旧の POSIX 要件を満たしています。非同期書き込みには使用されません。ZFS のシステム呼び出しは ZIL によって記録され、システムがクラッシュした場合に再現するのに十分な情報が含まれています。Sun Storage 7000 シリーズ Unified Storage System では、書き込み用に最適化された SSD (Writezillas または Logzillas と呼ばれる) を ZIL に使用します。Logzillas が使用できない場合はハードディスクが使用されます。
書き込みキャッシュは、速く書き込むために揮発性 (電源を切ると情報が失われる) DRAM にデータを格納する場合に使用されます。Sun Storage 7000 シリーズ Unified Storage System の書き込みキャッシュが有効である場合は、システム呼び出しは ZIL に記録されません。
パフォーマンスを改善するために、キャッシュ内のデータと同じ量を格納するように読み取りキャッシュをサイジングします。最初に ARC (DRAM) を最大にし、次に L2ARC (Readzillas) を追加します。
Oracle VDI では、Oracle VDI が使用するすべての iSCSI ボリュームの書き込みキャッシュがデフォルトで有効になっています。ZIL を使用しないため、この構成は非常に高速であり、Logzillas を利用しません。ZIL を使用しないと、Sun Storage 7000 シリーズ Unified Storage System が再起動する場合、またはデスクトップがアクティブである間に電源が失われた場合に、データが失われる危険があります。ただし、これによって ZFS 自体が破損することはありません。
Oracle VDI の書き込みキャッシュを無効にして、データ損失のリスクを最小限に抑えます。Logzillas を使用しない場合、ZIL は使用可能なハードディスクによってバックアップされるため、パフォーマンスが著しく低下します。ZIL をスピードアップするには、Logzillas を使用します。2 つまたは 4 つの Logzillas を使用する場合は、「ストライプ化された」プロファイルを使用してパフォーマンスをさらに改善します。
インメモリー書き込みキャッシュをオフにするには、Oracle VDI Manager でストレージを選択し、「編集」をクリックしてストレージの編集ウィザードを開き、「キャッシュ」チェックボックスをオフにします。この変更は、新たに作成する Oracle VDI Hypervisor のデスクトップにも、Microsoft Hyper-V 仮想プラットフォームで新たに起動するデスクトップにも適用されます。
標準的なハードディスクのブロックサイズは 512 バイトです。Oracle Solaris および Sun Unified Storage では ZFS ファイルシステムを使用しています。ZFS ファイルシステムのデフォルトのブロックサイズは 8K バイトです。仮想マシンのゲストオペレーティングシステムに応じて、ゲストファイルシステムの 1 つの論理ブロックでストレージの 2 つの ZFS ブロックを使用できます。図8.2「不整列ブロックと整列ブロックと例」に示すように、これはブロックの不整列と呼ばれます。ブロックの不整列を避けることをお勧めします。これは、ゲスト OS ファイルシステムのブロックにアクセスする場合に、ブロックの不整列によってストレージでの IO が倍になるためです (完全なランダムアクセスパターンを使用し、キャッシュを使用しないことを前提とする)。
Windows XP は、ブロックの不整列が発生する可能性がある特殊な例です。通常、ディスク上の 1 つのパーティションはディスクセクター 63 から始まります。Windows パーティションの整列を確認するには、次のコマンドを使用します。
wmic partition get StartingOffset, Name, Index
このコマンドの出力例を次に示します。
Index Name StartingOffset 0 Disk #0, Partition #0 32256
開始セクターを見つけるには、StartingOffset の値を 512 で割ります。
32256 ÷ 512 = 63
NTFS クラスタのサイズは、通常 4K バイトです。最初の NTFS クラスタはディスクセクター 63 から始まり、ディスクセクター 70 で終わります。ストレージでは、4 番目の ZFS ブロックがディスクセクター 48 ~ 63 にマップされ、5 番目の ZFS ブロックセクターがディスクセクター 64 ~ 79 にマップされます。図8.2「不整列ブロックと整列ブロックと例」に示すように、1 番目の NTFS クラスタにアクセスする場合に両方の ZFS ブロックにアクセスする必要があるため、不整列が発生します。
ブロックを正しく整列させるには、StartingOffset の値が完全に 8192 (基盤となる ZFS ストレージのデフォルトのブロックサイズ) で割り切れる必要があります。
次の例では、ブロックの不整列が発生します。
wmic partition get StartingOffset, Name, Index Index Name StartingOffset 0 Disk #0, Partition #0 32256
32556 ÷ 8192 = 3.97412109
次の例では、ブロックは整列されます。
wmic partition get StartingOffset, Name, Index Index Name StartingOffset 0 Disk #0, Partition #0 32768
32768 ÷ 8192 = 4
Windows 2003 SP1 以降の diskpart.exe ユーティリティには、パーティションのブ ック整列を指定するための ·align オプションがあります。Windows XP では、parted などのサードパーティ製のディスクパーティション分割ツールを使用して、開始セクターを定義してパーティションを作成します (次の例を参照)。その他のオペレーティングシステムでのパーティションの整列方法の詳細については、システムドキュメントを参照してください。
この例では、Knoppix などの起動可能なライブ Linux システムのディスクユーティリティを使用して、ブロックが正しく整列されたディスクパーティションを作成します。
新しい仮想マシンを作成します。
ライブ Linux システムの ISO イメージを、仮想マシンの CD/DVD-ROM ドライブに割り当てます。
仮想マシンを起動します。
コマンドシェルを開き、root ユーザーになります。
ディスクの合計セクター数を取得します。
ディスクの情報を取得するには、fdisk -ul コマンドを使用します。
次の例では、ディスクのセクター数は 20971520 です。
# fdisk -ul Disk /dev/sda doesn't contain a valid partition table Disk /dev/sda: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
ディスクに MS-DOS パーティションテーブルを作成します。
パーティションテーブルを作成するには、parted
<disk>
mklabel
msdos コマンドを使用します。
次の例では、/dev/sda ディスクにパーティションテーブルが作成されています。
# parted /dev/sda mklabel msdos
パーティションの開始セクターと終了セクターを指定して、新しいパーティションを作成します。
パーティションを作成するには、parted
<disk>
mkpartfs primary
fat32 64s
<end-sector>
s
コマンドを使用します。<end-sector>
は、ディスクの合計セクター数から 1
を引いた数です。たとえば、ディスクに
20971520
セクターがある場合、<end-sector>
は 20971519 になります。
使用する parted のバージョンによっては、最適なパフォーマンスが得られるようにパーティションが適切に整列されていないという警告が表示される場合があります。この警告は無視しても問題ありません。
次の例では、/dev/sda ディスクにパーティションが作成されます。
# parted /dev/sda mkpartfs primary fat32 64s 20971519s
パーティションが作成されたことを確認します。
パーティションを確認するには、parted
<disk>
print
コマンドを使用します。
次の例では、/dev/sda ディスクのパーティションを確認しています。
# parted /dev/sda print Model: ATA VBOX HARDDISK (scsi) Disk /dev/sda: 10.7GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 32.8kB 10.7GB 10.7GB primary fat32 lba
仮想マシンをシャットダウンし、ISO イメージの割り当てを解除します。
Windows XP のインストール ISO イメージを仮想マシンの CD/DVD-ROM ドライブに割り当てます。
仮想マシンを起動し、Windows XP をインストールします。
プロンプトが表示されたら、新しく作成されたパーティションを選択します。
(省略可能) プロンプトが表示されたら、ファイルシステムを FAT32 から NTFS に変更します。
インストールを完了します。
管理者として Windows XP ゲストにログインします。
StartingOffset が 32768 であることを確認します。
wmic partition get StartingOffset, Name, Index Index Name StartingOffset 0 Disk #0, Partition #0 32768
このセクションでは、ストレージに適用する Oracle VDI のグローバル設定について説明します。これらの設定を一覧表示および編集するには、vda settings-getprops および vda sett ngs-setprops コマンドを使用します。
グローバル設定 | 説明 |
---|---|
| ストレージで並行して実行されるコマンド数。 デフォルトは 10 です。 この設定を変更するには、Oracle VDI サービスを再起動する必要があります。 この設定は Oracle VDI インストールに対してグローバルであり、IP または DNS 名によって決定される物理ストレージに適用されます。 Oracle VDI のホスト数は、物理ストレージで Oracle VDI によって実行される並列記憶装置の最大アクション数に影響しません。「ストレージが応答しない」というメッセージが断続的に表示される場合は、この数値を減らしてストレージの負荷を軽減します。これを行うと、複製とリサイクルのパフォーマンスに影響します。 そのホストで Oracle VDI Center エージェントが実行しなくなっている場合でも、このオプションは機能します。 |
| Oracle VDI サービスがストレージに対してディスク容量の合計と使用可能なディスク容量を問い合わせる時間 (秒)。 デフォルトは 180 秒です。 これを実行するのは 1 つの Oracle VDI ホストのみであるため、通常はこの設定を変更する必要はありません。 |
| Oracle VDI サービスがストレージに対して可用性を問い合わせる時間 (秒)。 デフォルトは 30 秒です。 これを実行するのは 1 つの Oracle VDI ホストのみであるため、通常はこの設定を変更する必要はありません。 |
| 高速のストレージコマンドが失敗したと Oracle VDI サービスが判断する時間 (秒)。 デフォルトは 75 秒です。 この設定を変更するには、Oracle VDI サービスを再起動する必要があります。 このコマンドの期間を使用する Oracle VDI 機能のみが、ストレージのウォッチドックとなり、定期的に ping を発行してストレージの可用性を確認します。 |
| 中位の速度のストレージコマンドが失敗したと Oracle VDI サービスが判断する時間 (秒)。 デフォルトは 1800 秒 (30 分) です。 この設定を変更するには、Oracle VDI サービスを再起動する必要があります。 Oracle VDI が使用するストレージコマンドの大部分は、このコマンド期間を使用します。 |
| 低速のストレージコマンドが失敗したと Oracle VDI サービスが判断する時間 (秒)。 デフォルトは 10800 秒 (3 時間) です。 この設定を変更するには、Oracle VDI サービスを再起動する必要があります。 Oracle VDI が使用する一部のストレージスクリプトのみが、このコマンド期間を使用します。このようなスクリプトは頻繁には実行されません。通常は 1 日に 1 回です。 |
storage.max.commands
設定は、最も頻繁に変更される設定です。デフォルトでは、Sun
Storage 7000 シリーズ Unified Storage System は 4
つのコマンドのみを並行して実行できます。残りのコマンドはキューに投入されます。パフォーマンスを向上させるために、Oracle VDI
VDI
は意図的にストレージキューをオーバーコミットします。たとえば負荷が高いためにストレージが低速になった場合、キューのコマンドの実行に時間がかかりすぎている可能性があります。また、期間設定に指定された期間よりもコマンドの実行時間が長い場合、ストレージが応答できないと不適切にマーク付けされている可能性があります。このような状況が定期的に発生する場合は、storage.max.commands
設定の値を小さくすることができます。ただし、ストレージがビジーでない場合は、値を小さくすることでパフォーマンスが低下する場合があります。
間隔の設定はほとんど変更する必要はありません。これは、Oracle VDI Center 内の一次ホストのみがコマンドを実行するためです。この設定の値を小さくすると、ストレージのディスク容量に関する最新の情報が増え、応答しないストレージホストの検出が速くなります。また一方で、ストレージホストの負荷が高くなります。これらの設定値のデフォルトを維持することをお勧めします。
期間の設定値には安全のためのマージンが含まれています。ストレージが一定時間内にコマンドを実行できない場合のみに、期間の設定値を変更します。
Oracle Solaris 10 10/09 (以降) のストレージプラットフォームを高速化する 1 つの方法は、ZFS Intent Log (ZIL) を無効にすることです。高速化する方法は複数ありますが、ディスク I/O の同期、およびストレージに障害が発生した場合のデータの整合性が重要な場合は、ZIL を無効にすると危険であることに注意してください。
ZIL をただちに無効にするコマンドは次のとおりです。
echo zil_disable/W0t1 | mdb -kw
ZIL をただちに有効にするコマンドは次のとおりです。
echo zil_disable/W0t0 | mdb -kw
ZIL
を無効にするコマンドによって再起動しないようにするには、/etc/system
を編集して次の行を追加します。
set zfs:zil_disable=1
ZFS プールがマウントされている場合、ZIL の状態を変更すると特定の ZFS プールに影響します。そのため、設定値を変更したら (再起動の間に暗黙的に実行される)、ZFS プールを作成、再マウント、またはインポートする必要があります。
ZIL の設定はストレージに対してグローバルに適用され、再起動後はストレージのすべての ZFS プールの ZIL が無効になるため、同期セマンティクスがなくなり、ZFS が提供するシステムのルートボリュームが不要な動作を示す可能性があります。
このような影響の衝突を避けるためのベストプラクティスは、少なくとも 2 つのディスクを持つサーバーを使用することです。1 番目のディスクは、UFS ファイルシステムを使用して OS のシステムスライスをホストします。残りのディスクを ZFS 形式にして、Oracle VDI のストレージとして使用します。これを行うと、ZIL を無効にすることができます。また、ZIL には ZFS のみを使用するため、UFS ディスクは引き続き同期セマンティクスを提供します。
ZFS および ZIL の参照用ページは次のとおりです。
http://www.solarisinternals.com/wiki/index.php/ZFS_Evil_Tuning_Guide#Disabling_the_ZIL_.28Don.27t.29