
当社の IT 部門は、私が要求した 4 つの CPU ではなく、2 つの CPU を割り当てた VM を作成しました。その理由は、VM のパフォーマンスは 4 つの CPU よりも 2 つの CPU のほうが優れているためです (IT 部門によると)。その理由は、VM ハイパーバイザー (この場合は VMWare) は、CPU のいずれかを使用する前に、すべての CPU が使用可能になるまで待機するためです。したがって、2 つの CPU よりも 4 つの CPU を待機する方が時間がかかります。
この発言は意味を成していますか?
答え1
これは以前は真実でしたが、今では完全に真実というわけではありません。
彼らが言及しているのは厳格な共同スケジュール。
最も重要なのは、厳密な共同スケジューリングアルゴリズムでは、遅れているvCPUが存在すると仮想マシン全体が共同停止するのに対し、緩和された共同スケジューリングアルゴリズムでは、先行するvCPUが、最も遅い兄弟vCPUとの偏差に基づいて共同停止するかどうかを決定することです。
今、もしホストにスレッドが 4 つしかない場合、それらすべてを割り当てるのは愚かなことです。もし2つのプロセッサとプロセッサあたり4つのスレッドがある場合、かもしれないハイパーバイザーはメモリ アクセスを高速化するために vCPU を同じ NUMA ノード上に維持しようとするため、単一プロセッサのすべてのコンテンツを割り当てることは望ましくありません。また、ソケット全体を単一の VM に割り当てると、このジョブがさらに困難になります (上記の PDF の 12 ページを参照)。
そのため、vCPUの数が少ないシナリオもありますできるより多くよりも優れたパフォーマンスを発揮しますが、100% 当てはまるわけではありません。
とはいえ、ゲストごとに 3 つ以上の vCPU を割り当てることはほとんどありません。デフォルトではすべてのゲストに 2 個割り当てられ、負荷が高い場合は 3 個、SQL Server や非常に負荷の高いバッチ処理 VM、または多数のユーザーがいるターミナル サーバーの場合は 4 個割り当てられます。
答え2
これは、基盤となるハイパーバイザーとそれを実行する管理者に大きく依存します。説明しましょう:
- 要求されたからといって、勝手に4つのCPUを与えるのはよくありません。一般的に言えば、考える4 個必要ですが、リソース監視では 1 個だけ必要であると表示されます。
- VMware ESXiの例vCPUがCPUリソースを要求するときにすべてのpCPUをロックする必要がある; そのため、このハイパーバイザーではパフォーマンスが低下します。KVM は ESXi のようにロックを実行しません。基盤となるカーネル スケジューラを使用しますが、長期的には CPU 競合が発生する可能性があります。
- 最初から 4 つの CPU でシステムを構築している場合、実際にはスケール アウトではなくスケール アップになります (特に VM では悪い習慣です)。作業中のシステムをどのように設計しているかを調べて、今日の最新のクラウド インフラストラクチャに合わせて拡張できるように構築することをお勧めします。
このことから何を学べるでしょうか? 常に最小限のリソースで VM を作成し、必要に応じて増やしてください。常にスケールアップではなくスケールアウトすれば、どこでもアプリを実行できるようになります。
ハイパーバイザーで発生する可能性のあるロックのため、2 つの CPU が 4 つの CPU よりも高速になる可能性があるというのは事実です。
答え3
はい、この記述は一般的には意味をなします。ただし、正確な構成とワークロードについてはテストする必要があります。CPU を実際に活用できる場合は、CPU の数が多いほうがよい場合があります。ただし、実際にそれほど多くの並列処理がない場合は、CPU を少なく構成した VM の方が、CPU 準備完了状態の一時停止による速度低下を回避できるため、パフォーマンスがわずかに向上することがよくあります。
多数の VM の vCPU を減らしたところ、大部分の VM でスループットが向上しました。一部の VM ではスループットが悪化したため、vCPU の数を増やす必要がありました。