normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Microsoft Azure の Premium Storage を利用してみた

Azure: Premium Storage, RemoteApp, SQL Database Update, Live Media Streaming, Search and More の記事で2014年12月に発表された Premium Storage だが、漸く利用可能になったのでさっそく検証してみた。
Premium Storage を利用することにより「仮想マシンの IOPS がイマチイなんだよねぇ…」というケースの解として提案可能になるが、2015年2月15日現在はプレビュー期間中であり日本リージョンでは利用できない(West US, East US 2, West Europe で利用可能)点に注意が必要だ。

最初に今回のまとめ

Premium Storage: High-Performance Storage for Azure Virtual Machine Workloads に詳しい記載があるが、注意が必要な点は以下になる。

  • 2015年2月15日現在、プレビュー期間中であり日本リージョンでは利用できない(West US, East US 2, West Europe で利用可能
  • PowerShell コマンドと portal.azure.com 側で作成可能(※注 manage.windowsazure.com 側ポータルでは作成できない
  • 作成するディスクサイズによって IOPS 上限が異なる(※注 5000 IOPS がほしければ 512GB より大きなディスクを作成する必要がある
  • Premium Storage を利用できるインスタンスサイズは STANDARD_DS シリーズのみ(※注 manage.windowsazure.com 側ポータルでは作成できない
  • STANDARD_DS シリーズのサイズにより IOPS 上限が異なる(※注 STANDARD_DS1 だと 3200 IOPS 上限になってしまう

DS シリーズのインスタンスサイズによる IOPS 制限は以下になる。お金をケチって STANDARD_DS1 にすると、Premium Storage の旨味をそこまで引き出せなくなることが分かる。

VM Size CPU cores Max. IOPS Max. Disk Bandwidth
STANDARD_DS1 1 3,200 32 MB per second
STANDARD_DS2 2 6,400 64 MB per second
STANDARD_DS3 4 12,800 128 MB per second
STANDARD_DS4 8 25,600 256 MB per second
STANDARD_DS11 2 6,400 64 MB per second
STANDARD_DS12 4 12,800 128 MB per second
STANDARD_DS13 8 25,600 256 MB per second
STANDARD_DS14 16 50,000 512 MB per second

更に、Premium Storage を利用するディスクサイズによっては 500 IOPS 程度に抑えられる場合がある点も注意。公式ドキュメントのサンプルが 128GB なので、うっかりすると 500 IOPS 程度になる。。。。

Premium Storage Disk Type P10 P20 P30
Disk size 128 GB 512 GB 1024 GB (1 TB)
IOPS per disk 500 2300 5000
Throughput per disk 100 MB per second * 150 MB per second * 200 MB per second *

インスタンスサイズ、ディスクサイズによる制限に注意すれば Premium Storage を活用できる(はず)。次から実際に Premium Storage を利用してみる。

まずは簡単に Premium Storage を使ってみる - STANDARD_DS2 & P10

Premium Storage を利用するためには専用のストレージアカウントを作成する必要がある。以下の様に Type に Premium_LRS と指定する。

# Create Premium Storage
New-AzureStorageAccount -StorageAccountName "<accout name>" -Location "West US" -Type "Premium_LRS"

更に現在 Premium Storage を利用できるインスタンスは STANDARD_DS シリーズのみとなる(つまり、現在は G シリーズのインスタンスと併用できない)。以下の様に InstanceSize に DS シリーズであることを指定して仮想マシンを作成する(まずは STANDARD_DS2 で作成した)。

# Create Instance using Premium Storage 
$image = Get-AzureVMImage | Where-Object {$_.label -like “Windows Server 2012 R2*”} | Sort-Object -Descending PublishedDate | Select-Object -Index 0
$storageAccount = "daisamipremiumaccount"
$adminName = "<username>"
$adminPassword = "<password>"
$vmName ="<vmname>"
$location = "West US"
$vmSize ="Standard_DS2"
$OSDiskPath = "https://" + $storageAccount + ".blob.core.windows.net/vhds/" + $vmName + "_OS_PIO.vhd"
$vm = New-AzureVMConfig -Name $vmName -ImageName $image.ImageName -InstanceSize $vmSize -MediaLocation $OSDiskPath
Add-AzureProvisioningConfig -Windows -VM $vm -AdminUsername $adminName -Password $adminPassword
New-AzureVM -ServiceName $vmName -VMs $VM -Location $location

更に、ディスクをアタッチしてみる。まずは以下の様に 128GB のディスクとしてアタッチしてみた。

# Attach Premium Storage to VM Instance
$vm = Get-AzureVM -ServiceName $vmName -Name $vmName
$LunNo = 1
$path = "http://" + $storageAccount + ".blob.core.windows.net/vhds/" + "myDataDisk_" + $LunNo + "_PIO.vhd"
$label = "Disk " + $LunNo
Add-AzureDataDisk -CreateNew -MediaLocation $path -DiskSizeInGB 128 -DiskLabel $label -LUN $LunNo -HostCaching ReadOnly -VM $vm | Update-AzureVm

こちらに対する CrystalDiskMark の実行結果は以下になった。ご覧のとおり、ディスクサイズが小さいと 500 IOPS 制限に引っかかっている。

-----------------------------------------------------------------------
CrystalDiskMark 3.0.3 x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :    66.587 MB/s
          Sequential Write :    39.150 MB/s
         Random Read 512KB :    67.051 MB/s
        Random Write 512KB :    34.970 MB/s
    Random Read 4KB (QD=1) :     2.097 MB/s [   511.9 IOPS]
   Random Write 4KB (QD=1) :     1.664 MB/s [   406.2 IOPS]
   Random Read 4KB (QD=32) :     2.089 MB/s [   510.1 IOPS]
  Random Write 4KB (QD=32) :     2.089 MB/s [   510.1 IOPS]

  Test : 100 MB [F: 0.1% (0.1/128.0 GB)] (x5)
  Date : 2015/02/14 5:14:31
    OS : Windows Server 2012 R2 Datacenter (Full installation) [6.3 Build 9600] (x64)
    afasdfadfadsfa

STANDARD_DS2 & P30 で Premium Storage を使ってみる

ディスクサイズ P10 の制限に引っかかったことが分かったので、次は 1023 GB のディスクを作成してみた。

# Attach Premium Storage to VM Instance
$vm = Get-AzureVM -ServiceName $vmName -Name $vmName
$LunNo = 2
$path = "http://" + $storageAccount + ".blob.core.windows.net/vhds/" + "myDataDisk_" + $LunNo + "_PIO.vhd"
$label = "Disk " + $LunNo
Add-AzureDataDisk -CreateNew -MediaLocation $path -DiskSizeInGB 1023 -DiskLabel $label -LUN $LunNo -HostCaching ReadOnly -VM $vm | Update-AzureVm

結果は以下の通り、5000 IOPS 程度出ている。

-----------------------------------------------------------------------
CrystalDiskMark 3.0.3 x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :    66.587 MB/s
          Sequential Write :    40.273 MB/s
         Random Read 512KB :    67.040 MB/s
        Random Write 512KB :    35.620 MB/s
    Random Read 4KB (QD=1) :    20.947 MB/s [  5114.0 IOPS]
   Random Write 4KB (QD=1) :     1.670 MB/s [   407.7 IOPS]
   Random Read 4KB (QD=32) :    20.896 MB/s [  5101.6 IOPS]
  Random Write 4KB (QD=32) :    20.943 MB/s [  5113.1 IOPS]

  Test : 100 MB [G: 0.0% (0.2/1023.0 GB)] (x5)
  Date : 2015/02/14 5:57:24
    OS : Windows Server 2012 R2 Datacenter (Full installation) [6.3 Build 9600] (x64)

念のため 600GB のディスクサイズだとどうなるか確かめた。

# Attach Premium Storage to VM Instance
$vm = Get-AzureVM -ServiceName $vmName -Name $vmName
$LunNo = 3
$path = "http://" + $storageAccount + ".blob.core.windows.net/vhds/" + "myDataDisk_" + $LunNo + "_PIO.vhd"
$label = "Disk " + $LunNo
Add-AzureDataDisk -CreateNew -MediaLocation $path -DiskSizeInGB 600 -DiskLabel $label -LUN $LunNo -HostCaching ReadOnly -VM $vm | Update-AzureVM

こちらでも P30 の 5000 IOPS が出ている。

-----------------------------------------------------------------------
CrystalDiskMark 3.0.3 x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :    66.576 MB/s
          Sequential Write :    40.191 MB/s
         Random Read 512KB :    67.040 MB/s
        Random Write 512KB :    35.677 MB/s
    Random Read 4KB (QD=1) :    20.940 MB/s [  5112.3 IOPS]
   Random Write 4KB (QD=1) :     1.616 MB/s [   394.4 IOPS]
   Random Read 4KB (QD=32) :    20.893 MB/s [  5100.9 IOPS]
  Random Write 4KB (QD=32) :    20.892 MB/s [  5100.5 IOPS]

  Test : 100 MB [H: 0.0% (0.2/600.0 GB)] (x5)
  Date : 2015/02/14 6:57:53
    OS : Windows Server 2012 R2 Datacenter (Full installation) [6.3 Build 9600] (x64)
  

Storage Pool の利用

更に、Storage Pool を利用して Premium Storage のディスクを束ねて利用してみた。まずは STANDARD_DS2 のまま P30x2 での速度を確認した。8000 IOPS 以上出ているが、こちらは STANDARD_DS2 のインスタンスサイズによる IOPS 制限を受けている。

-----------------------------------------------------------------------
CrystalDiskMark 3.0.3 x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :    67.109 MB/s
          Sequential Write :    66.905 MB/s
         Random Read 512KB :    67.040 MB/s
        Random Write 512KB :    57.867 MB/s
    Random Read 4KB (QD=1) :    33.477 MB/s [  8173.0 IOPS]
   Random Write 4KB (QD=1) :     1.588 MB/s [   387.6 IOPS]
   Random Read 4KB (QD=32) :    33.525 MB/s [  8184.7 IOPS]
  Random Write 4KB (QD=32) :    33.420 MB/s [  8159.2 IOPS]

  Test : 100 MB [F: 0.0% (0.2/1197.9 GB)] (x5)
  Date : 2015/02/14 8:03:39
    OS : Windows Server 2012 R2 Datacenter (Full installation) [6.3 Build 9600] (x64)

以下のコマンドを利用して Standard_DS14 サイズに変更した。

# Standard_DS14 に変更
Get-AzureVM -ServiceName <service name> -Name <instance name> | Set-AzureVMSize -InstanceSize Standard_DS14 | Update-AzureVM

再度 IOPS を計測すると、今度は 10000 IOPS 以上出ており 5000 IOPSx2 を束ねた速度が出ていることが分かる。

-----------------------------------------------------------------------
CrystalDiskMark 3.0.3 x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   408.735 MB/s
          Sequential Write :   106.377 MB/s
         Random Read 512KB :   408.468 MB/s
        Random Write 512KB :    56.950 MB/s
    Random Read 4KB (QD=1) :    40.708 MB/s [  9938.4 IOPS]
   Random Write 4KB (QD=1) :     1.469 MB/s [   358.6 IOPS]
   Random Read 4KB (QD=32) :    41.542 MB/s [ 10142.2 IOPS]
  Random Write 4KB (QD=32) :    41.382 MB/s [ 10103.0 IOPS]

  Test : 100 MB [F: 0.0% (0.2/1197.9 GB)] (x5)
  Date : 2015/02/15 1:45:38
    OS : Windows Server 2012 R2 Datacenter (Full installation) [6.3 Build 9600] (x64)

Storage Pool で束ねるディスクをさらに増やすことで IOPS は増すことができそうなので、他の方にもチャレンジしてほしい。