VMware CPUソケットごとのコア数を設定する方法:ベストプラクティス

新しい仮想マシンのプロセッサ設定を構成する際には、いくつかの重要な概念を理解する必要があります。CPUごとのプロセッサコア数やソケットごとのCPUコア数を計算する方法、およびこれらの設定が仮想マシンの速度にどのように影響するかを理解することが重要です。さらに、どのようにすればVMのパフォーマンスが向上するかを理解することも重要です: プロセッサの数を制限し、より多くのCPUコアを持つか、少ないコアを持つよりも多くのプロセッサを持つか?

これらの概念とESXiホスト上の仮想マシンのCPU構成の基本原則について詳しく読んでください。

用語

まず、仮想マシンのCPU設定を構成する際に使用される用語の定義から始めましょう。これらの用語は、CPUごとのコア数、ソケットごとのCPUコア数、CPUコアの数と速度に関する混乱を避けるのに役立ちます。

CPUソケット

A CPU Socket is a physical connector on the motherboard to which a single physical CPU is connected. A motherboard has at least one CPU socket. Server motherboards usually have multiple CPU sockets that support multiple multicore processors. CPU sockets are standardized for different processor series. Intel and AMD use different CPU sockets for their processor families.

CPU

A CPU (central processing unit, microprocessor chip, or processor) is a computer component. It is the electronic circuitry with transistors that is connected to a socket. A CPU executes instructions to perform calculations, run applications, and complete tasks.

プロセッサのクロック速度がヒートバリアに近づいたとき、製造業者はプロセッサのアーキテクチャを変更し、複数のCPUコアを持つプロセッサを製造し始めました。物理プロセッサと論理プロセッサまたはプロセッサコアの混乱を避けるため、一部のベンダーは物理プロセッサをソケットとして参照しています。

CPUコア

A CPU core is the part of a processor containing the L1 cache. The CPU core performs computational tasks independently without interacting with other cores and external components of a “big” processor that are shared among cores. Basically, a core can be considered as a small processor built into the main processor that is connected to a socket. Applications should support parallel computations to use multicore processors rationally.

ハイパースレッディング

ハイパースレッディングは、インテルのエンジニアが開発した技術であり、1つのプロセッサコアに並列計算をもたらすものです。ハイパースレッディングの登場は、2002年にPentium 4 HTプロセッサがリリースされ、デスクトップコンピュータ向けに配置された時でした。オペレーティングシステムは、ハイパースレッディングを備えたシングルコアプロセッサを、2つの論理コア(物理コアではなく)を持つプロセッサとして検出します。同様に、ハイパースレッディングを備えた4つのコアプロセッサは、オペレーティングシステムにとって8つのコアを持つプロセッサと見なされます。各コアで実行されるスレッドが増えるほど、並列で実行できるタスクが増えます。

現代のインテルプロセッサには、複数のコアとハイパースレッディングの両方が備わっています。ハイパースレッディングは通常、デフォルトで有効になっており、BIOSで有効または無効にできます。AMDの同時マルチスレッディング(SMT)は、AMDプロセッサ向けのハイパースレッディングの対応物です。

vCPU

A vCPU is a virtual processor that is configured as a virtual device in the virtual hardware settings of a VM. A virtual processor can be configured to use multiple CPU cores. A vCPU is connected to a virtual socket.

CPUオーバーコミットメント

CPUオーバーコミットメントは、物理ホストの論理プロセッサ(CPUコア)を、物理ホストで利用可能な論理プロセッサの総数よりも多くのVMにプロビジョニングすることです。CPUオーバーコミットメントにより、リソース利用の柔軟性と効率が向上しますが、トータルの需要が利用可能な物理CPU容量を超えると性能の低下につながる可能性があります。

NUMA

NUMA(非一様メモリアクセス)は、マルチプロセッサコンピュータで使用されるコンピュータメモリ設計です。そのアイデアは、各プロセッサに個別のメモリを提供することです(すべてのプロセッサがバスを介して共有メモリにアクセスするUMAとは異なります)。同時に、プロセッサは共有バスを使用して他のプロセッサに属するメモリにアクセスできます(すべてのプロセッサがコンピュータ上のすべてのメモリにアクセスします)。CPUは、マルチプロセッサコンピュータ上の他のメモリよりも自分自身のローカルメモリにアクセスする性能の利点があります。

これらの基本的なアーキテクチャは、現代のマルチプロセッサコンピュータで混在しています。プロセッサは、マルチコアCPUパッケージまたはノードにグループ化されます。同じノードに属するプロセッサは、UMAアーキテクチャと同様にメモリモジュールへのアクセスを共有します。また、プロセッサは共有インターコネクトを介してリモートノードのメモリにアクセスできます。プロセッサはNUMAアーキテクチャで行いますが、性能は低下します。このメモリアクセスは、直接ではなく、そのメモリを所有しているCPUを介して行われます。

NUMAノードは、CPUソケットと最も近いメモリモジュールで構成されるCPU/メモリカップルです。NUMAは、通常、BIOSでノードのインタリービングまたはインターリーブメモリ設定として構成されます。

:ESXiホストには2つのソケット(2つのCPU)と256 GBのRAMがあります。各CPUには6つのプロセッサコアがあります。このサーバーには2つのNUMAノードが含まれています。各NUMAノードには、1つのCPUソケット(1つのCPU)、6つのコア、128 GBのRAMがあります。

ESXiは常に、VMのメモリをネイティブ(ホーム)NUMAノードから割り当てようとします。VMの負荷やESXiサーバーの負荷に変更がある場合、ホームノードは自動的に変更されます。

vNUMA

仮想NUMA(vNUMA)は、VMware仮想マシン向けのNUMAの類似物です。 vNUMAは、最適なパフォーマンスを提供するために複数の物理NUMAノードのハードウェアリソースを消費します。 vNUMAテクノロジーは、ゲストオペレーティングシステムにNUMAトポロジを公開します。その結果、ゲストOSは、最も効率的な使用のために基盤となるNUMAトポロジを認識します。 VMの仮想ハードウェアバージョンは8以上である必要があります。

vNUMAの処理は、VMware vSphere 6.5で大幅に改善され、この機能はもはやVM構成のCPUソケットごとのコア数で制御されません。デフォルトでは、8つ以上の論理プロセッサ(vCPU)を持つVMに対してvNUMAが有効になります。 VMのVMX構成ファイルを編集して、VMに対してvNUMAを手動で有効にすることができます。その際、行を追加します。numa.vcpu.min=Xここで、Xは仮想マシンのvCPU数です。

コアの数の計算

サーバー上の物理CPUコア数、論理CPUコア数、およびその他のパラメータを計算する方法を調べてみましょう。

  • ホストマシン上の物理CPUコアの総数は、次の式で計算されます:

    (プロセッサソケットの数)×(1プロセッサあたりのコア数)=物理プロセッサコアの数

    インストールされたプロセッサがあるプロセッサソケットのみを考慮する必要があります。

  • もしハイパースレッディングがサポートされている場合、論理プロセッサコアの数を以下の式を使って計算してください:

    (物理プロセッサコアの数) × (1つの物理プロセッサあたり2つのスレッド) = 論理プロセッサの数

  • 最後に、仮想マシンに割り当てることができる利用可能なプロセッサリソースを計算する単一の式を使用してください:

    (CPUソケット) × (CPUコア) × (スレッド)

例えば、各々4つのコアを持ち、ハイパースレッディングをサポートしている2つのプロセッサを搭載したサーバがある場合、仮想マシンに割り当てることができる論理プロセッサの総数は:

2(CPU) × 4(コア) × 2(HT) = 16論理プロセッサ

1つの論理プロセッサは、VM設定で1つのプロセッサまたは1つのCPUコアとして割り当てることができます。

仮想マシンに関しては、ハードウェアエミュレーション機能により、構成で複数のプロセッサとCPUコアを使用できます。1つの物理CPUコアは、VMの構成で仮想CPUまたは仮想CPUコアとして構成することができます。

  • VMに利用可能なクロックサイクルの総量は以下のように計算されます:

    (論理ソケットの数) × (CPUのクロック速度)

たとえば、物理プロセッサのクロック速度が3.0 GHzである場合、VMを2つのvCPUと2つのコアで構成した場合、合計クロック速度は2x2x3=12 GHzになります。ESXiホストでCPUのオーバーコミットメントが使用されている場合、CPU集中型のタスクを実行している場合、VMの利用可能な周波数は計算よりも少なくなる可能性があります。

CPUソケットごとの制限

vSphere 7.0 Update 1およびvSphere 8.0のCPU/コアの制限は以下の通りです。

  • VMに割り当てられる仮想プロセッサソケットの最大数は768です。768を超える仮想プロセッサを割り当てる場合は、VMをマルチコアプロセッサを使用するように構成します。
  • 単一のVMに割り当てることができるプロセッサコアの最大数は768です。仮想マシンは、物理マシンの論理プロセッサコア数よりも多くのCPUコアを使用できません。
  • CPUのホット追加。VMが128 vCPU以下の場合、このVMにCPUホット追加機能を使用することはできず、VMが実行中の状態でVMのCPU構成を編集することはできません。OS CPU制限。オペレーティングシステムがプロセッサの数に制限を持っている場合、仮想プロセッサをさらに割り当てても、ゲストOSで追加のプロセッサが識別されず使用されません。制限はOSの技術設計やOSのライセンス制限によって引き起こされる場合があります。ソケットごとやCPUコアごとにライセンスされているオペレーティングシステムがあることに注意してください(たとえば、Windows Server 2019)。
  • OS CPU制限。オペレーティングシステムにプロセッサ数の制限があり、VMに仮想プロセッサを追加で割り当てた場合、追加のプロセッサはゲストOSに認識されず、使用されません。制限は、OSの技術的な設計やOSライセンスの制限によって引き起こされる可能性があります。Windows Server 2019など、ソケットごと、CPUコアごとにライセンスされるOSがあることに注意してください。

特定のオペレーティングシステムのCPUサポート制限:

  • Windows 10 Pro – 2 CPU
  • Windows 10 Home – 1 CPU
  • Windows 10 Workstation – 4 CPUs
  • Windows Server 2019 Standard/Datacenter – 64 CPUs
  • Windows XP Pro x64 – 2 CPUs
  • Windows 7 Pro/Ultimate/Enterprise – 2 CPUs
  • Windows Server 2003 Datacenter – 64 CPUs

VMwareのウェブサイトで、使用しているvSphereバージョンの構成の最大値を確認できます。

構成の推奨事項

古いvSphereバージョンの場合、VM構成でコアよりもソケットを使用することをお勧めします。最初は、VMのパフォーマンスにおいてCPUソケットとCPUコアの違いはあまり見られません。いくつかの構成機能が違いを生み出すことに注意してください。最適なパフォーマンスを得るために、VMに複数の仮想プロセッサ(ソケット)を設定する際に、NUMAとvNUMAについて考慮してください。

仮想NUMA(vNUMA)が自動的に設定されない場合は、物理サーバーのNUMAトポロジをミラーリングしてください。VMware vSphere 6.5以降のVMに関する推奨事項は以下の通りです。

  • VMの論理プロセッサ数(vCPU)を定義する際は、コアあたりのスレッド構成を好む。ESXiサーバーの単一NUMAノード上のCPUコア数を超えるまで続けてください。物理ESXiサーバーの単一NUMAノード上のメモリ量を超えるまで同じロジックを使用してください
  • 場合によっては、VM構成の論理プロセッサ数が単一NUMAノード上の物理CPUコア数を超えるか、RAMの量が単一NUMAノードの総メモリ量を超えることがあります。論理プロセッサ(vCPU)の数を最小数のNUMAノードに分散させることを検討してください。
  • CPUカウントやメモリ量がCPUコア数を超える場合、奇数のvCPU数を設定しないでください。同様に、メモリが物理サーバーの単一NUMAノードのメモリ量を超える場合も同様です。
  • 物理ホストの物理プロセッサコア数を超えるvCPU数を持つVMを作成しないでください。
  • vNUMAを無効にできない場合は、vCPUホットアド機能を有効にしないでください。

ゲストオペレーティングシステムおよび他のVMにインストールされたソフトウェアが、プロセッサ単位でライセンスされている場合、VMをより多くのCPUコアを持つ少ないプロセッサを使用するように構成します。たとえば、Windows Server 2012 R2はソケットごとにライセンスされており、Windows Server 2016はコアごとにライセンスされています。

VMware仮想マシンの構成でCPUオーバーコミットメントを使用する場合は、次の値に注意してください。

1:1から3:1- VMの実行に問題はありません

  • 3:1から5:1- パフォーマンスの低下が観察されます
  • 6:1- 重大なパフォーマンスの低下による問題に備えてください
  • 通常の値でのCPUオーバーコミットメントは、リスクを伴わずにテストおよび開発環境で使用できます。

ESXiホストのVMの構成

まず、物理ホストの論理プロセッサ(CPUの数)の数を、十分なパフォーマンスで正常に動作するために必要な仮想マシンの数を決定します。次に、以前の推奨事項と制限を考慮して、VMの設定に設定する必要のある仮想ソケットの数(vSphere Clientでのソケットの数)およびCPUコアの数(ソケットごとのコア)を定義します。以下の表は、必要な構成を選択するのに役立ちます。

まず、仮想マシンが適切に動作し、十分なパフォーマンスを発揮するために必要な物理ホストの論理プロセッサ(CPUの数)を決定します。その後、前述の推奨事項と制限事項を考慮しながら、仮想ソケットの数(vSphereクライアント内のソケット数)とCPUコアの数(ソケットあたりのコア数)を定義します。以下の表は、必要な構成を選択する際に役立ちます。

仮想マシンに8つ以上の論理プロセッサを割り当てる必要がある場合、ロジックは同じです。vSphereクライアント内の論理CPUの数を計算するには、ソケット数にコア数を掛けます。たとえば、2つのプロセッサソケットを持つVMを構成する必要があり、それぞれが2つのCPUコアを持つ場合、論理CPUの総数は2*2=4です。これは、vSphereクライアントの仮想ハードウェアオプションでVMに4つのCPUを選択することを意味します。

vSphereクライアントでのCPUコアの設定

VMware vSphereクライアントでVMのCPUオプションを設定する方法を説明しましょう。WebブラウザでvCenter ServerのIPアドレスを入力し、VMware vSphereクライアントを開きます。ナビゲータでHosts and Clustersを開き、構成する必要がある仮想マシンを選択します。CPU構成を変更できるように、VMがオフになっていることを確認してください。構成プロセスはvSphere 6.x、7.0、および8.0で同一です。

  1. VMを右クリックし、コンテキストメニューでEdit Settingsをクリックして仮想マシン設定を開きます。
  2. CPU セクションを 仮想ハードウェア タブの 設定の編集 ウィンドウで展開します。
  3. CPU。CPU ストリングのドロップダウン メニューをクリックし、この VM に必要な論理プロセッサの総数を選択します。この例では、Ubuntu VM (blog-Ubuntu1) に 4 つの論理プロセッサを選択します。
  4. ソケットあたりのコア。このストリングでドロップダウン メニューをクリックし、各仮想ソケット (プロセッサ) に必要なコア数を選択します。
  5. CPU ホットプラグ。この機能を使用する場合は、CPU ホット アド を有効にする チェックボックスを選択します。制限事項と要件を覚えておいてください。

  6. 予約。ESXi ホストまたはクラスター上の仮想マシンの CPU クロック速度 (周波数、MHz、または GHz) の保証された最小割り当てを選択します。
  7. 制限。VM プロセッサの最大 CPU クロック速度を選択します。この周波数は仮想マシンの最大周波数であり、この VM が ESXi ホストまたはクラスター上で実行されている唯一の VM であっても、より多くの空きプロセッサ リソースがある場合でも、設定された制限は有効です。設定された制限は、VM のすべての仮想プロセッサに当てはまります。VM が 2 つのシングルコア プロセッサを持っており、制限が 1000 MHz の場合、両方の仮想プロセッサは合計クロック速度が 1 秒あたり 100 万サイクル (各コアあたり 500 MHz) で動作します。
  8. 株式。このパラメーターは、ESXiホストまたはリソースプール上の仮想マシンによるリソース消費の優先順位(低、標準、高、カスタム)を定義します。 Reservation および Limit パラメーターとは異なり、Shares パラメーターは、ESXiホスト、リソースプール、またはDRSクラスター内でCPUリソースが不足している場合にのみ、VMに適用されます。

    Shares

    パラメーターの利用可能なオプション:

    • Low – 仮想プロセッサーあたり500株
    • Normal – 仮想プロセッサーあたり1000株
    • High – 仮想プロセッサーあたり2000株
    • Custom – カスタム値を設定します

    Shares 値が高いほど、ESXiホストまたはリソースプール内のVMに割り当てられるCPUリソースの量が多くなります。

  9. ハードウェア仮想化。このチェックボックスを選択して、ネスト仮想化を有効にします。このオプションは、テストまたは教育目的でVM内でVMを実行したい場合に便利です。
  10. パフォーマンスカウンター。この機能は、仮想マシン内にインストールされたアプリケーションをデバッグし、CPUパフォーマンスを測定した後に最適化するために使用されます。
  11. スケジューリングアフィニティ。このオプションは、特定のプロセッサにVMを割り当てるために使用されます。入力される値は次のようになります:“0、2、4-7”
  12. I/O MMU. This feature allows VMs to have direct access to hardware input/output devices such as storage controllers, network cards, and graphic cards (rather than using emulated or paravirtualized devices). I/O MMU is also called Intel Virtualization Technology for Directed I/O (Intel VT-d) and AMD I/O Virtualization (AMD-V). I/O MMU is disabled by default. Using this option is deprecated in vSphere 7.0. If I/O MMU is enabled for a VM, the VM cannot be migrated with vMotion and is not compatible with snapshots, memory overcommit, suspended VM state, physical NIC sharing, and NSX network virtualization.

単独のESXiホストを使用し、WebブラウザでVMware Host Clientを使用してVMを構成する場合、構成原則はVMware vSphere Clientと同じです。

VMware WorkstationでCPUごとのコアを構成する

VMware WorkstationでvCenter ServerまたはESXiホストに接続し、vSphere VMのVM設定を開くと、仮想プロセッサの基本設定を編集できます。

  1. VM>設定をクリックし、ハードウェアタブを選択し、プロセッサをクリックします。
  2. 仮想プロセッサ(ソケット)の数とプロセッサごとのコア数を選択します。

次のスクリーンショットでは、vSphere Clientで以前に構成された同じUbuntu VMのプロセッサ構成が表示されます。

合計プロセッサコア数(ESXiホストまたはクラスターの物理プロセッサの論理コア)が自動的に計算され、下部に表示されます。対照的に、vSphere Clientのインターフェイスでは、合計プロセッサコア数(CPUオプション)を設定し、プロセッサごとのコア数を選択し、その後、仮想ソケットの数が計算され、表示されます。PowerCLIでVMプロセッサを構成

パワーCLIでVMプロセッサーを構成する

VMware vSphereのコンポーネントを構成するためにコマンドラインインターフェイスを好む場合は、PowerCLIを使用してVMのCPU構成を編集します。PowerCLIでUbuntu 19のVMのCPU構成を編集する方法を見てみましょう。これらのコマンドはシャットダウンされたVMに使用されます。

  1. VMが2つのシングルコア仮想プロセッサー(使用される2つの仮想ソケット)を使用するように構成するには、次のコマンドを使用します。

    get-VM -name Ubuntu19 | set-VM -NumCpu 2

    別のプロセッサー(ソケット)数を設定する場合は、別の数値を入力してください。

  2. 次の例では、VMが2つのデュアルコア仮想プロセッサー(使用される2つのソケット)を使用するように構成する方法を示しています。

    $VM=Get-VM -Name Ubuntu19

    $VMSpec=New-Object -Type VMware.Vim.VirtualMachineConfigSpec -Property @{ "NumCoresPerSocket" = 2}

    $VM.ExtensionData.ReconfigVM_Task($VMSpec)

    $VM | Set-VM -NumCPU 2

  • 仮想マシンに新しいCPU構成が適用されると、その構成はVMのVMX構成ファイルに保存されます。私たちの場合、VMデータストアのVMディレクトリにあるUbuntu19.vmxファイルを確認します(/vmfs/volumes/datastore2/Ubuntu19/)。新しいCPU構成が含まれる行は、VMXファイルの末尾にあります。

    numvcpus = “2”

    cpuid.coresPerSocket = “2”

  1. VMのプロセッサ(ソケット)の数を減らす必要がある場合は、以前に示したコマンドと同じコマンドを使用して、数量を減らしてください。たとえば、VMのプロセッサ(ソケット)を1つに設定するには、次のコマンドを使用します。

    get-VM -name Ubuntu19 | set-VM -NumCpu 1

PowerCLIの主な利点は、複数のVMを一括で構成できることです。タスクの自動化は、仮想マシンの数が多い場合に重要で便利です。VMwareのコマンドレットとMicrosoft PowerShellの構文を使用してスクリプトを作成してください。

結論

仮想マシン上で実行されるアプリケーションのパフォーマンスは、正しいCPUとメモリの構成に依存しています。 VMware vSphere 6.5以降のバージョンでは、仮想マシンのCPUにより多くのコアを設定し、CPUコアあたりのソケットを使用してください。 vSphere 6.5より古いバージョンを使用する場合は、新しいおよび古いvSphereバージョンのvNUMAの動作が異なるため、VMのCPUコア数を増やさずにソケット数を設定してください。 VMにインストールする必要があるソフトウェアのライセンスモデルを考慮してください。ソフトウェアがCPUごとにライセンスされている場合は、VMの設定でCPUあたりのコアを増やしてください。

VMware vSphereで仮想マシンを使用する際には、VMwareバックアップツールを使用するのを忘れないでください。 NAKIVO Backup&Replicationを使用して、複数のコアを持つVMを含む仮想マシンをバックアップしてください。定期的なバックアップは、データを保護し、災害が発生した場合にデータを回復するのに役立ちます。

Source:
https://www.nakivo.com/blog/the-number-of-cores-per-cpu-in-a-virtual-machine/