5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure VM の仮想コアのカスタマイズ機能の紹介

5
Last updated at Posted at 2026-04-04

本記事は、Azure VM の仮想コアのカスタマイズ機能に関する内容です。
本機能は、2026 年 8 月 19 日に GA(一般提供)されましたので、GA 後に再検証を行って、情報を更新しました。
なお、Microsoft Learn のドキュメントでは、まだプレビュー時点の情報のままの記載となっている箇所がありますので、より後に提供されている以下の情報を最新版として判断しています。

はじめに

この記事は、2026 年 8 月 19 日に GA となった Azure VM の VM 仮想コアのカスタマイズ機能に関してまとめた記事となります。
類似の内容として、Azure VM の VM サイズには、データベース ワークロードの制約付き vCPU サイズ というものがあります。
これは、特定の VM サイズにおいて、vCPU 数を制限されたサイズが提供されていることを意味しています。
一方、本記事で紹介する機能では、条件を満たす VM において、ユーザー自身が、vCPU 数を制限することができるようになります。

TL;DR

  • Azure VM の仮想コアカスタマイズでは、SMT 無効化(1コア=1 vCPU)と vCPU 制限(制約付きコア)を、単独または併用で設定可能です。
  • SMT 無効時は vCPU=1 を設定できるケースを検証から確認しましたが、ドキュメントには偶数のみと記載されているため、この点の説明を追加するようにフィードバックしました。(2026 年 9 月時点で追加で検証したところ、VM サイズによっては、vCPU=45 も指定可能でした)
  • 料金は制限後の vCPU 数ではなく選択した VM SKU 基準で課金されます。
  • 検証では、Standard_D8as_v6 に対して Azure CLI の設定値がポータル表示と OS 上の CPU 数に反映されることを確認しました。
  • 実行中の VM に対する更新でも設定変更はできましたが、適用時に再起動が発生し、実質的にサイズ変更に近い挙動でした。

二つの機能:同時マルチスレッドの無効化と構成可能な制約付きコアの構成

同時マルチスレッドの無効化機能

この同時マルチスレッドの無効化は、一般に SMT(Simultaneous Multi-Threading)と呼ばれる技術(Intel CPU では Hyper-Threading とも呼ばれます)を無効化する機能となります。

Azure VM では、一般的に同時マルチスレッドが有効となっていて、1 つの物理コアが 複数の論理コア(vCPU)を提供しています。
一般的には、1 物理コア当たり 2 vCPU を提供する構成となっています。

同時マルチスレッドの無効化機能を利用すると、1 物理コア当たり 1 vCPU の構成にして、一つの物理コアを完全に使用できるようになります。
この機能は、特定のワークロードにおいて、同時マルチスレッドが原因で性能が低下する場合に有効な機能となります。

構成可能な制約付きコアの構成機能

この機能は、簡単に言うと、VM の vCPU 数を減らすことができる機能となります。
Azure VM では、vCPU の数は、VM サイズによって事前に定義されていて、ユーザーが vCPU の数を直接指定することはできません。

この結果として、例えば、データベース製品等、vCPU 数に基づいてライセンスコストが発生する製品などを利用する場合に、メモリ等の他の要件に起因して、必要以上の vCPU 数を持つ VM サイズを選択せざるを得ない場合があります。
結果として、必要以上の vCPU を利用することになり、ライセンスコストも多く払う必要が発生する場合があります。

この機能を使うと、指定している VM サイズの vCPU 数を超えない範囲において、必要な vCPU 数を指定できるようになります。
ただし、指定できる値は VM サイズごとに決まっており、任意の整数を指定できるわけではありません。
また、同時マルチスレッドの有効・無効によっても、指定できる値が変わります。

指定できる vCPU 数に関して
公式ドキュメントには「偶数のみ指定可能」と記載されていますが、これは 同時マルチスレッドが有効な場合の規則 です。
検証の結果、同時マルチスレッドを無効化した場合は「偶数のみ」という規則が成り立たず、物理コア数を上限として、候補リストに含まれる奇数も指定できる ことを確認しました。
実際に、1 vCPU のほか、96 vCPU(物理 48 コア)のサイズでは 45 vCPU の構成も可能でした。
ただし指定できる値は VM サイズごとの候補リストで決まっており、任意の整数を指定できるわけではありません。

ポイント

これらの機能は、いくつかのポイントがあります。

  • 片方だけ、もしくは両方を同時に利用可能
    これらの機能に関しては、もちろん片方だけ利用するということも可能ですが、両方を同時に利用することも可能です。
  • 同時に有効化した場合、両方の制約が適用される
    機能を同時に有効化した場合、同時マルチスレッドの無効化と、構成可能な制約付きコアの両方の制約が適用されることになります。
    例えば、同時マルチスレッドの無効化機能を利用した状態だと、1 物理コアあたり 1 vCPU の構成となるので、4 物理コアある VM サイズにおいて、3 vCPU を指定可能に思えます。
    しかし、指定できる vCPU 数は VM サイズごとの候補リストで決まっており、Standard_D8as_v6 の候補は 1, 2, 4, 6, 8 です。3 はこのリストに含まれないため、指定できません。
  • コストは選択した VM SKUのコストとなる
    同時マルチスレッドを無効化することによって、vCPU 数が減った場合や、vCPU 数の制限をした場合でも、コストは選択した VM SKU のコストとなります。
    例えば、Standard_D8as_v6(8 vCPU) を選択して、同時マルチスレッドの無効化機能を利用して、4 vCPU の構成にした場合でも、コストは Standard_D8as_v6 のコストとなります。

具体的に、Standard_D8as_v6 (8 vCPU) の例を記載してみます。

機能 vCPU 数 備考
なし 8 同時マルチスレッド有効、コア数の制限無し
同時マルチスレッドの無効化 4 同時マルチスレッド無効、コア数の制限無し
構成可能な制約付きコアの構成(vCPU 数を2に設定) 2 同時マルチスレッド有効のため、1 物理コアあたり 2 vCPU で稼働
両方(同時マルチスレッドの無効化+vCPU 数を2に設定) 2 同時マルチスレッドが無効のため、2 物理コア 2 vCPU で稼働

注意
ファーストパーティの Azure Marketplace イメージ(Windows Server、Ubuntu、Red Hat、SUSE 等)およびカスタムイメージのみサポートされています。
SQL Server on Virtual Machines 等の特殊な Marketplace イメージはサポートされていません。

実際の VM の構成例

bicep での構成例

今回の機能の検証環境の構築方法に関しては、Bicep を利用した検証環境の構築方法を準備しました。

具体的な環境の構築方法は、私の GitHub リポジトリ にて公開をしておりますので、そちらを参照していただけますよう、よろしくお願いいたします。

なお、検証環境の構築に利用した Bicep テンプレートは、あくまでも検証用のテンプレートとなりますので、実際の環境に適用する際には、必要に応じて、パラメータの変更や、リソースの追加等を行っていただけますよう、よろしくお願いいたします。

また、検証用のテンプレートとなりますことから、現状の状態での公開となります。ご利用いただいた結果、何か問題が発生した場合でも、私の方では責任を負いかねますので、あらかじめご了承ください。

Azure CLI での構成例

Azure CLI を利用して、VM の仮想コアのカスタマイズ機能を利用する場合には、以下のようなコマンドでデプロイ可能です。

resourceGroup="<リソースグループ名>"
vmName="<VM名>"
location="<リージョン名>"

# リソースグループの作成
az group create --name $resourceGroup --location $location

# VM の作成(例: Standard_D8as_v6 サイズ、同時マルチスレッド無効、vCPU 数を 2 に設定)
az vm create --name $vmName --resource-group $resourceGroup --image Win2022Datacenter --size Standard_D8as_v6 --admin-user <ユーザ名> --v-cpus-per-core 1 --v-cpus-available 2

このコマンドでは、検証用の Windows Server 2022 Datacenter イメージを利用して、Standard_D8as_v6 サイズの VM を作成しています。

同時マルチスレッドを無効化するために、--v-cpus-per-core 1 オプションを指定し、vCPU 数を 2 に制限するために、--v-cpus-available 2 オプションを指定しています。

実際にデプロイした結果を確認

Bicep や Azure CLI を利用して、上記のコマンドで VM を作成した後に、Azure ポータルや、VM に接続して、実際に同時マルチスレッドが無効化されていて、vCPU 数が制限されていることを確認できます。

具体的には、まず、Azure Portal の VM の概要ページにて、VM サイズが Standard D8as v6 (8 vcpu 数、32 GiB メモリ) であるにもかかわらず、プロパティ部分で、サイズの部分を確認すると、vCPU 数が 2 vCPU となっていることが確認できます。

Azure Portal での VM サイズの確認

次に、Azure CLI を利用して、az vm show コマンドで、VM の情報を確認すると、hardwareProfile の部分に、vmSizeProperties として、vCpusAvailable が 2、vCpusPerCore が 1 となっていることが確認できます。

az vm show --resource-group $resourceGroup --name $vmName

# 実行結果抜粋
#{
#  "hardwareProfile": {
#    "vmSize": "Standard_D8as_v6",
#    "vmSizeProperties": {
#      "vCpusAvailable": 2, # 指定したプロパティが正しくセットされていることを確認できる
#      "vCpusPerCore": 1
#    }
#  },
#}

さらに、VM に接続して、OS 上での論理 CPU 数を確認します。

VM に RDP で接続して、OS上で確認しても問題ありませんが、今回は、実行コマンドを利用して、確認してみます。

Azure Portal の VM のページを開いて、左側のメニューの「実行コマンド」から、「RunPowerShellScript」を選択して、以下の PowerShell コマンドを実行します。

# 物理コア数を取得
$physical = (Get-CimInstance Win32_Processor | Measure-Object -Property NumberOfCores -Sum).Sum
# 論理コア数を取得
$logical = (Get-CimInstance Win32_ComputerSystem).NumberOfLogicalProcessors
Write-Host "Number of physical core: $physical"
Write-Host "Number of vCPU: $logical"
Write-Host "SMT (HT) ratio: $($logical / $physical):1"

結果として、以下の画像のように、物理コア数が 2、論理コア数が 2 となっていることが確認できます。

runcommandの実行結果

PowerShell コマンドの実行結果の抜粋は以下となります。
OS上からも物理コア数が 2、論理コア数が 2 となっていることが確認できます。

Number of physical core: 2
Number of vCPU: 2
SMT (HT) ratio: 1:1

次に、vCpuPerCore を 2にして、vCpuAvailable を 2 にした結果についても検証します。
同様のコマンドをオプションを変えて作成した VM が以下の通りとなります。

# VM 情報を取得するコマンド
az vm show --resource-group $resourceGroup --name $vmName
# 取得結果の vCPU 情報(実行結果抜粋)
#{
#  "hardwareProfile": {
#    "vmSize": "Standard_D8as_v6",
#    "vmSizeProperties": {
#      "vCPUsAvailable": 2, # vCPU 数が 2
#      "vCPUsPerCore": 2    # 同時マルチスレッドが有効
#    }
#  },
#}

この状況で、同様に PowerShell コマンドを実行すると以下の通りです。
想定通りではありますが、物理コア 1 つに対して、2 vCPU という構成になっていることが確認できます。

Number of physical core: 1
Number of vCPU: 2
SMT (HT) ratio: 2:1

利用中の環境に設定する方法

ドキュメントでは「CPU options can only be specified at VM creation time or during a resize operation(CPUオプションはVM作成時またはリサイズ操作中にのみ指定可能)」と記載されています。
以下の検証では az vm update コマンドで起動中の VM に対して設定変更を試みたところ、自動的に再起動が発生し、設定が反映されました。

注意
ドキュメントの記載からは、事前に VM を割り当て解除しておく必要があるようにも読めますが、実際には起動中の VM に対して az vm update コマンドが受け付けられ、自動的に再起動が発生したうえで設定が反映されました。
なお、ドキュメント上の記載においては、割り当て解除が必須ともとれる記載となっているため、本番環境ではドキュメントの記載に従って割り当て解除後に設定変更を行うことを推奨します。
また、VM の起動中に設定変更を行った場合でも、自動的に再起動が発生しますので、ご注意ください。

Azure CLI を利用して同時マルチスレッドの設定を変更・vCPU 数の制限を変更する

まず、変更前の VM の状態を確認します

# VM の設定を確認
az vm show --resource-group $resourceGroup --name $vmName
# 実行結果抜粋
#{
#  "hardwareProfile": {
#    "vmSize": "Standard_D8as_v6",
#    "vmSizeProperties": {
#      "vCpusAvailable": 2, # vCPU 数が 2 であることを確認
#      "vCpusPerCore": 2    # 同時マルチスレッドが有効であることを確認
#    }
#  },
#}

# VM の電源状態を確認
az vm get-instance-view --resource-group $resourceGroup --name $vmName --query "instanceView.statuses[?starts_with(code, 'PowerState/')].displayStatus" --output tsv

# 実行結果
# VM running    VM が起動中であることを確認

VM の起動状態のままで、同時マルチスレッドを無効化して、vCPU 数を 4 に変更してみます。
(Standard_D8as_v6 は、物理コアが 4 コアで、vCPU 数が 8 vCPU のため、変更は成功することが想定されます)

# 実行コマンド
az vm update --resource-group $resourceGroup --name $vmName --v-cpus-per-core 1 --v-cpus-available 4
# 実行結果抜粋
#{
#  "hardwareProfile": {
#    "vmSize": "Standard_D8as_v6",
#    "vmSizeProperties": {
#      "vCPUsAvailable": 4, # vCPU 数が 4 に変更されていることを確認
#      "vCPUsPerCore": 1    # 同時マルチスレッドが無効化されていることを確認
#    }
#  },
#}

上記のように、実際に実行は成功しました。

この時、変更に際して、起動中の仮想マシンが自動で再起動しています。

仮想マシンを起動中にサイズ変更をした際と同様の挙動となっているように見えること、ドキュメント上、CPUオプションはVM作成時かサイズ変更操作中にのみ指定可能とあることから、コマンドを実行した際に、起動中の仮想マシンでサイズ変更をした場合と同様に、内部的にはサイズ変更が行われているような挙動となっているのではないかと推測されます。

同時マルチスレッドの無効化した状態で vCPU 数を 1 に設定してみる

最後に、同時マルチスレッドの無効化した状態であれば、vCPU 数を 1 に設定可能かどうかを試してみます。
先の検証と同様に Azure CLI コマンドで検証します。
実際に実行したコマンドと実行結果は以下の通りです。

# 実行コマンド(--v-cpus-available 1 を指定して、vCPU 数を 1 に設定)
az vm update --resource-group $resourceGroup --name $vmName --v-cpus-per-core 1 --v-cpus-available 1
# 実行結果抜粋
#{
#  "hardwareProfile": {
#    "vmSize": "Standard_D8as_v6",
#    "vmSizeProperties": {
#      "vCPUsAvailable": 1, # vCPU 数が 1 に変更されていることを確認
#      "vCPUsPerCore": 1
#    }
#  },
#}

結果として、うまく変更できることが確認できました。
また、先ほどと同様に、RunCommand を活用して、OS上で認識されている vCPU 数も併せて確認してみます。
以下が、そのコマンドの実行結果です。

Number of physical core: 1
Number of vCPU: 1
SMT (HT) ratio: 1:1

vCPU 数が 1 に設定されていることが確認できました。

そのため、ドキュメント上は、偶数個の vCPU 数が指定可能と記載されていますが、同時マルチスレッドを無効化した状態であれば、1 も指定可能であるようでした。
この点に関しては、ドキュメントのフィードバックリンクからフィードバックを実施しました。

同時マルチスレッドの無効化した状態で 45 vCPU に設定してみる(2026年9月時点での検証結果に基づくUpdate)

VM で実際に指定可能な vCPU 数の範囲を確認するために、以下のコマンドが利用可能です。

az vm list-skus --location japaneast --resource-type virtualMachines --query "[?name=='<VM サイズ>'].{Name:name, vCPUs:capabilities[?name=='vCPUs'].value|[0], Allowed:capabilities[?name=='vCPUsConstraintsAllowed'].value|[0]}" --output tsv
# 実行結果
# Standard_D96as_v6          96       1, 2, 4, 6, 8, 10, 12, 15, 16, 18, 20, 24, 28, 30, 32, 36, 40, 44, 45, 48, 60, 64, 72, 80, 88, 96

ここで、注目いただきたいのは、Allowed の列に 1 以外にも 45 が含まれている点です。
つまり、vCPU 数として 45 を指定可能であるように見受けられます。

そのため、1 が境界値としての例外なのか、それとも偶数制約そのものに例外があるのかを確認するため、より大きなサイズで奇数を指定してみます。

96 vCPU(物理 48 コア)の VM サイズに対して、同時マルチスレッドを無効化したうえで 45 vCPU を指定します。

# 実行コマンド
az vm update --resource-group $resourceGroup --name $vmName --v-cpus-per-core 1 --v-cpus-available 45
# 実行結果抜粋
#"hardwareProfile": {
#    "vmSize": "Standard_D96as_v6",
#    "vmSizeProperties": {
#      "vCPUsAvailable": 45,
#      "vCPUsPerCore": 1
#    }
#}

結果として、45 vCPU の構成が可能でした。
1 だけが例外的に許可されているのではなく、同時マルチスレッドを無効化した場合は、候補リストにある奇数値も物理コア数まで指定できる ことが確認できました。

まとめ

今回は、VMの 同時マルチスレッドの無効化機能と、構成可能な制約付きコアの構成機能に関して、実際に検証を行いながら、紹介しました。
これまでは、データベース ワークロードの制約付き vCPU サイズ しか、このような vCPU 数を制限する方法が無かったので、ユーザーにとっては、選択可能な VM サイズを増やすという意味でいいものだと思います。
できれば、制限した場合に、実際に利用している物理コア数に依存して、コストがお安くなるともっと嬉しいところです。

Reference

今回のドキュメントフィードバック内容

今回の検証を通して、記事に誤植と思われるものや、誤解を招く可能性がある部分が見受けられました。
以下のような内容でフィードバックしています。

フィードバック1: 同時マルチスレッドを無効化したときの vCPUsAvailable=1 が指定可能な件について

(出典: VM vCore Customization の "Considerations" セクション、2026 年 9 月時点)

[原文(英語)]
I think this article is very helpful for understanding functionality. But I faced some confusing about this article on Consideration section.
When we disable Hyper threading, we can set v-cpus-available parameter to 1. but, from following two sentences, I think we cannot set v-cpus-available parameter to 1 (document says we can just set an even number). So, to improve this article, I recommend MS teams to describe this special case.

(Article quote)
•	On VM sizes that are hyperthreaded (default 2 threads/core), any custom vCPU count must be an even number.
•	You can disable hyperthreading and constrain vCPUs at the same time on the same VM. In this case, both above rules apply.

[日本語訳]
この記事は機能性を理解するのに非常に役立つと思います。しかし、この「考慮」セクションの記事について少し難しい点がありました。
ハイパースレッディングを無効にすると、v-cpus-availableパラメータを1に設定できます。
一方で、以下の2文からすると、v-cpus-availableパラメータを1に設定できないようです(文書には偶数を設定できると書かれています)。
そのため、この記事を改善するために、MSチームは、この特殊なケースを説明を入れてもらいたいです。

(記事引用)
• ハイパースレッド(デフォルト2スレッド/コア)の VM サイズでは、カスタム vCPU 数は偶数でなければなりません。
• ハイパースレッディングを無効にし、同時にvCPUを制約することも可能です。この場合、上記の両方のルールが適用されます。

その後の追加検証
上記フィードバックの送信後、96 vCPU(物理 48 コア)のサイズで同時マルチスレッドを無効化し、45 vCPU を指定できることを確認しました。
奇数が指定できるのは 1 に限った話ではなく、同時マルチスレッドを無効化すると、VM サイズごとの候補リストに含まれる奇数値も指定できるようです。

フィードバック2: Constrain vCPU Count セクションの記載誤りについて

(出典: VM vCore Customization の "Constrain vCPU Count (Customize Cores)" セクション、2026 年 9 月時点)

[原文(英語)]
I think this article is very helpful for understanding the VM vCore Customization feature. However, I found a potentially incorrect description in the ARM Template section under "Constrain vCPU Count (Customize Cores)".

The article states:
"Here, we requested two cores. On Standard_D8s_v6 (which is hyperthreaded by default), 2 physical cores are allocated, and since SMT is still on by default (2 threads per core), the VM has 4 logical vCPUs."

However, based on my verification, when setting vCPUsAvailable=2 with SMT enabled (vCPUsPerCore=2), the actual result is:
- Physical cores: 1
- Logical vCPUs: 2

This is consistent with the parameter definition stated earlier in the same article: "vCPUsAvailable - Set this to the number of vCPUs you want active." — meaning vCPUsAvailable specifies the number of logical vCPUs, not physical cores.

The description "2 physical cores are allocated... the VM has 4 logical vCPUs" appears to be incorrect. I recommend updating this example to reflect the actual behavior.

[日本語訳]
この記事は VM の仮想コアカスタマイズ機能を理解するのに非常に役立つと思います。ただし、ARM テンプレートセクションの「vCPU 数の制約(コアのカスタマイズ)」の例示に誤りと思われる記述を発見しました。

記事には以下のように記載されています:
「Here, we requested two cores. On Standard_D8s_v6 (which is hyperthreaded by default), 2 physical cores are allocated, and since SMT is still on by default (2 threads per core), the VM has 4 logical vCPUs.」
(訳:2 つのコアを要求しました。Standard_D8s_v6(デフォルトでハイパースレッディング)では、2 つの物理コアが割り当てられ、SMT がデフォルトでオンのため(コアあたり 2 スレッド)、VM には 4 つの論理 vCPU があります。)

しかし、実際に vCPUsAvailable=2、vCPUsPerCore=2(SMT 有効)で検証したところ、結果は以下の通りでした:
- 物理コア数:1
- 論理 vCPU 数:2

これは、同じ記事の前半に記載されているパラメータの定義「vCPUsAvailable - Set this to the number of vCPUs you want active.」(アクティブにする vCPU の数に設定します)と整合しており、vCPUsAvailable は物理コア数ではなく論理 vCPU 数を指定するパラメータです。

「2 physical cores are allocated... the VM has 4 logical vCPUs」という説明は誤りと思われるため、実際の動作を反映した内容に修正することを推奨します。
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?