仮想マシンによる処理性能を向上するには、どうしたらよいか。それには大きく三つの方法がある。「構成の最適化」「スケールアップ」「スケールアウト」だ。これらの方法を組み合わせることで、性能を高めやすくなる。以降で順に解説する。

(1)構成の最適化

 Azure仮想マシンの性能でボトルネックになりやすいのは、ストレージである。

 CPU性能は、Azureのハイパーバイザーのオーバーヘッドが比較的小さく、オンプレミス(自社所有)環境に近い性能を出すことができる。それとは対照的に、Azure仮想マシンにアタッチするDisk Storageは、HDDを使った「Standard Managed Disks」で1台当たり500IOPS(1秒当たりの読み込み・書き込み回数)が最大値。一般的なSASディスクの200IOPS前後という性能に比べると悪くはないが、オンプレミス環境のストレージがハードウエアRAIDにより1000~1500IOPS以上を実現していることを考えると、見劣りがする。

 Disk Storageの性能は、SSDを使った「Premium Managed Disks」の大容量タイプを選べば高められる。Premium Managed DisksのIOPSと転送速度は、容量が大きいタイプほど高速だ。具体的な数字を挙げると、128GBで500IOPS、512GBで2300IOPS、2TBで7500IOPSである。

 もっともPremium Managed Disksの価格は、Standard Managed Disksと比べて4倍近い。コストの制約が強いシステムでは使えないケースもあるだろう。

 そこで、ストレージ性能の低さを補うAzureおよびゲストOSの機能を活用したい。それは「一時ディスク」「ホストキャッシュ」「ストライピング」だ。それぞれを使ったストレージ性能の高め方を説明する。

 一時ディスク

 前回に説明した通り、Azure仮想マシンではホスト(仮想マシンを稼働させる物理サーバー)の高速なディスク(これが一時ディスク)にページファイルを割り当てることで、全体の性能を高めている。ページファイルは性能のボトルネックになりやすいので、一時ディスクの効果は高い。DシリーズやFシリーズなど一時ディスクがSSDになっているインスタンスを使うと、より性能を向上できる。

 ホストキャッシュ

 Disk Storageには、仮想マシンホスト上のキャッシュ機構が備わっている。これを「ホストキャッシュ」(あるいは「Azureキャッシュ」)と呼ぶ。仮想マシンを作成すると、システムディスク(OSを入れたボリューム)ではホストキャッシュが自動で有効になる。

 ただしホストキャッシュはシステムディスクに最適化されており、データディスクに対する効果は期待できない。場合によっては、かえって遅くなることすらあるようだ。そのため通常は、データディスクのホストキャッシュは無効にするほうがよい(図1)。

図1 ホストキャッシュの設定画面
図1 ホストキャッシュの設定画面
[画像のクリックで拡大表示]

 ホストキャッシュは、ディスクの属性ではなく、仮想マシンの属性として設定する。

 ストライピング

 データディスクはストライピング(RAID 0)の構成にすることで、性能を向上できる。Azureのストレージではデータが自動で複製されるので、RAIDで冗長化する必要はない。

 AzureでRAID構成を組むには、仮想マシンのOS(ゲストOS)のソフトウエアRAIDを用いる。Windowsでは記憶域プールを、Linuxの場合はLVM(Logical Volume Manager)を使う。どちらもOSの標準機能である。

 このうちWindows標準のソフトウエアRAIDに良い印象を持っていない人が多いかもしれない。その印象は改めたほうがよい。Windows Server 2012から追加された「記憶域プール」が提供するRAIDは、廉価なSANストレージ並みの機能と性能を備える。

 なおWindowsの記憶域プールはシステムディスクとして使用できない。またLinuxでも、LVMをシステムディスクに適用すると手間が掛かるうえにトラブルシューティングが困難になるので、通常はシステムディスクに使わない。