Azureのマネージドディスクは、サイズに応じたIOPSを割り当てたりクレジットベースのバーストという仕組みを設けたりする事で、なるべく多くの要件に対してチューニングなしに要件を満たすような工夫をしています。ですが、場合によってはチューニングが必要になる事もあるでしょう。このページでは「ディスクの種類(storage-sku)の選択」「ホストキャッシュ」「パフォーマンス レベル」「オンデマンド バースト」などの性能変更方法を説明します。
ここに示した手法は副作用の大きい手法です。デメリットを理解できない場合は安易に使用しない事をお勧めします。また、デメリットを理解できたとしても「何かあった時の手のひら返し」が多い職場ならば、この手法は「知らないフリ」をした方が得策な場合もあります。
前提
公式ドキュメント
参考になる公式ドキュメントを以下に示します。
- Azure マネージド ディスクの種類
- マネージド ディスクのバースト
- オンデマンドのバーストを有効にする
- マネージド ディスクのパフォーマンス レベル
- Azure PowerShell モジュールまたは Azure CLI を使用してダウンタイムなしでパフォーマンス レベルを変更する
- 書き込みアクセラレータを有効にする
事前設定
以下、リソースグループを作成します。
az group create --name MyResourceGroup --location japaneast
ディスクの種類(storage-sku)
Azureのマネージドディスクには以下4つの種類があります。
- Ultra ディスク
- Premium SSD
- Standard SSD
- Standard HDD
各ディスクの詳細説明は「Azure マネージド ディスクの種類」に任せますが、アプリケーションが求めるサービスレベルに応じてディスクの種類を変更する事ができます。
仮想マシン作成時、引数storage-skuにディスクの種類を指定する事ができます。
az vm create \ --resource-group MyResourceGroup \ --name linux010 \ --image UbuntuLTS \ --admin-username azureuser \ --size Standard_B1s \ --ssh-key-values ~/.ssh/authorized_keys \ --storage-sku StandardSSD_LRS
ディスク毎に異なる指定をする場合は、以下のように操作します。
az vm create \ --resource-group MyResourceGroup \ --name linux020 \ --image UbuntuLTS \ --admin-username azureuser \ --size Standard_B1s \ --ssh-key-values ~/.ssh/authorized_keys \ --data-disk-sizes-gb 16 32 \ --storage-sku os=StandardSSD_LRS 0=Premium_LRS 1=Standard_LRS
ホストキャッシュ
ディスクの読み書きに関するキャッシュは「None(なし)」「ReadOly(読み取り専用)」「ReadWrite(読み取り/書き込み)」の3種類から選ぶ事ができます。
現在の設定がどのようになっているかは、「すべてのサービス」から辿る場合は「コンピューティング」「Virtual Machines」「仮想マシン名(linux020)」「ディスク」の順に画面遷移すると確認できます。
azコマンドで確認する場合は以下の通りです。
$ az vm show \ --resource-group MyResourceGroup \ --name linux020 \ --query "storageProfile" { "dataDisks": [ { "caching": "None", "createOption": "Empty", "deleteOption": "Detach", "detachOption": null, "diskIopsReadWrite": null, "diskMBpsReadWrite": null, "diskSizeGb": 16, "image": null, "lun": 0, "managedDisk": { "diskEncryptionSet": null, "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/linux020_disk2_1d530173dc39438e804756b57daed9fd", "resourceGroup": "MyResourceGroup", "storageAccountType": "Premium_LRS" }, "name": "linux020_disk2_1d530173dc39438e804756b57daed9fd", "toBeDetached": false, "vhd": null, "writeAcceleratorEnabled": null }, { "caching": "None", "createOption": "Empty", "deleteOption": "Detach", "detachOption": null, "diskIopsReadWrite": null, "diskMBpsReadWrite": null, "diskSizeGb": 32, "image": null, "lun": 1, "managedDisk": { "diskEncryptionSet": null, "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/linux020_disk3_4914ebdd41d34fb5b01ce92a3e7c2c3e", "resourceGroup": "MyResourceGroup", "storageAccountType": "Standard_LRS" }, "name": "linux020_disk3_4914ebdd41d34fb5b01ce92a3e7c2c3e", "toBeDetached": false, "vhd": null, "writeAcceleratorEnabled": null } ], "imageReference": { "exactVersion": "18.04.202203080", "id": null, "offer": "UbuntuServer", "publisher": "Canonical", "sharedGalleryImageId": null, "sku": "18.04-LTS", "version": "latest" }, "osDisk": { "caching": "ReadWrite", "createOption": "FromImage", "deleteOption": "Detach", "diffDiskSettings": null, "diskSizeGb": 30, "encryptionSettings": null, "image": null, "managedDisk": { "diskEncryptionSet": null, "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/linux020_OsDisk_1_1a383cb8917442458697ad0b0deaccc4", "resourceGroup": "MyResourceGroup", "storageAccountType": "StandardSSD_LRS" }, "name": "linux020_OsDisk_1_1a383cb8917442458697ad0b0deaccc4", "osType": "Linux", "vhd": null, "writeAcceleratorEnabled": null } }
データディスクを「None(なし)」から「ReadOly(読み取り専用)」に変更します。
もし、「読み取り/書き込み(読み取り/書き込み)」を使用するならば、十分注意して使用してください。「Azure portal を使用して Azure VM ディスク キャッシュを有効化して構成する」によると、「キャッシュ データの永続ディスクへの書き込みがご利用のアプリケーションで必要に応じて適切に処理される場合にのみ、このオプションを使用します。」との警告が書かれています。
az vm update \ --resource-group MyResourceGroup \ --name linux020 \ --set "storageProfile.dataDisks[0].caching=ReadOnly"
パフォーマンス レベル
初期設定の確認
Azureのマネージドディスクは、初期設定のディスクの種類とサイズによって、パフォーマンスが定義されます。「すべてのサービス」から辿ると、「コンピューティング」「Virtual Machines」「仮想マシン名(linux020)」「ディスク」「ディスク名(linux020_disk2_…)」の順に画面遷移し、
「サイズおよびパフォーマンス」を押下すると、ディスクのパフォーマンス(IOPS, throughputなど)を確認できます。
これをコマンドラインで確認する場合は、以下のようになります。
DISK_NAME=$(az vm show \ --resource-group MyResourceGroup \ --name linux020 \ --query "storageProfile.dataDisks[0].name" \ --output tsv ) az disk show \ --resource-group MyResourceGroup \ --name ${DISK_NAME} \ --query "tier"
設定変更
パフォーマンスを変更します。Ultra Diskを除き、任意のIOPSやthroughputは指定できず、「サイズおよびパフォーマンス」画面の「ディスク層」に羅列された値しか指定できません。
パフォーマンスを変更するには以下のように操作します。以下はP3(120IOPS, 25Mbps)からP6(500IOPS, 100Mbps)へ変更する設定例です。
DISK_NAME=$(az vm show \ --resource-group MyResourceGroup \ --name linux020 \ --query "storageProfile.dataDisks[0].name" \ --output tsv ) az disk update \ --resource-group MyResourceGroup \ --name ${DISK_NAME} \ --set tier=P6
オンデマンドバースト
概要
マネージドディスクのバーストの考え方は以下の2つがあります。
- クレジットベースのバースト
- オンデマンド バースト
デフォルト設定では「クレジットベースのバースト」で、使っていない時はクレジットが蓄積され、使う時はクレジットが消費されます。QoSに馴染みのある方はToken Bucketをイメージすると良いでしょう。Bucketが満タンの状態でIOを使用すると、30分は最大バーストでIOを使う事ができます。ですので、30分程度のバーストならばデフォルト設定の「クレジットベースのバースト」で十分と言えます。
この条件で要件を満たさない場合は、「オンデマンド バースト」を設定する事ができます。最大で30,000IOPS/1,000MbpsのIOを処理できますが、前述の「パフォーマンス レベル」を超えた処理量は重量課金になってしまうのが難点です。
1024GBのディスクの「パフォーマンス レベル」はP30(500IOPS/200Mbps)です。具体的に言えば、このパフォーマンスレベルを超過した処理が課金対象になります。
事前準備
ほとんどの場合は「クレジットベースのバースト」のみで十分でしょう。それでも要件を満たさない場合は、「パフォーマンス レベル」の変更を検討します。それでも要件を満たさない場合は、「オンデマンド バースト」を検討します。ですので、かなりの大規模システム向けの設定です。
オンデマンドバーストは、512GBを超えるのPremium SSDに対してのみ有効にする事ができます。512GB以下のディスクで「構成」の画面を見ると、「オンデマンド バーストを有効にする」の設定欄がグレーアウトされている事が分かります。
事前準備として、512GBを超える(513GB以上)のPremium SSDをアタッチした仮想マシンを作成します。
将来、仕様変更される可能性はありますが、2022年4月時点では512GBのPremium SSDに対してオンデマンドバーストを有効にする事はできません。
az disk create \ --resource-group MyResourceGroup \ --name linux030_disk2 \ --size-gb 513 \ --sku Premium_LRS az vm create \ --resource-group MyResourceGroup \ --name linux030 \ --image UbuntuLTS \ --admin-username azureuser \ --size Standard_B1s \ --ssh-key-values ~/.ssh/authorized_keys \ --attach-data-disks linux030_disk2
操作方法
マネージドディスクを「クレジットベースのバースト」から「オンデマンドバースト」への変更を試みます。「オンデマンドバースト」への変更は、デタッチされた状態にする必要がありますので、「割り当て解除」または「ディスクのデタッチ」をします。
az vm disk detach \ --resource-group MyResourceGroup \ --vm-name linux030 \ --name linux030_disk2
以下のようにenable-burstingにtrueを指定します。
az disk update \ --resource-group MyResourceGroup \ --name linux030_disk2 \ --enable-bursting true
再び、ディスクをアタッチします。
az vm disk attach \ --resource-group MyResourceGroup \ --vm-name linux030 \ --name linux030_disk2
その他 チューニング手法
その他、「書き込みアクセラレータを有効にする」「Azure Ultra ディスクの使用」などの手法もあります。この手法は非常に高額のため、当サイトでは取り扱いません。