...

NUMAアーキテクチャ:現代のサーバーで重要な役割を果たす理由

NUMAアーキテクチャ 最新のサーバーがスレッドにメモリを供給する速度と、高負荷時のワークロードのスケーラビリティを決定します。ローカルメモリアクセスがレイテンシと帯域幅に与える影響、ハイパーバイザーが NUMA を活用する方法、VM での設定によって直接的なパフォーマンス向上が得られる理由についてご説明します。.

中心点

主な知見を簡単にまとめ、データセンターで最大の効果をもたらす要素を強調します。.

  • ローカルメモリー レイテンシを最小限に抑え、スループットを向上
  • NUMAノード CPUとRAMを効率的に構造化する
  • vCPUサイズ ノードサイズに合わせて VM ごとに調整
  • 仮想NUMA ゲストOSに渡す
  • スパンニングルール 大容量のRAM要件を定義する

私は一貫して以下に焦点を当てています。 レイテンシー また、サーバーのパフォーマンスはデータに近ければ近いほど良いからです。大きなソケット、多数のコア、大容量の RAM は、スレッドが常にリモートメモリ領域を待機している場合にはあまり意味がありません。私は、VM を NUMA ノードに収まるようにサイズ設定し、メモリの割り当てをローカルに保つようにしています。ハイパーバイザーの機能は、すべてをグローバルに有効にするのではなく、必要に応じてサポートしています。これにより、 スケーリング 負荷のピーク時に予期せぬ事態が発生することはありません。.

NUMA の真価

私は考える ノード:各 NUMA ノードは、CPU コアと、アクセスパスが非常に短いローカル RAM 領域を組み合わせています。スレッドが L1、L2、または L3 キャッシュ内のデータにアクセスすると、すべてが非常に高速に実行されます。データセットがローカル RAM にある場合、レイテンシは低いままであります。しかし、スレッドが別のノードにアクセスすると、待ち時間が長くなり、スループットが低下します。まさにこの違いが、 非制服 メモリアクセスを無効にします。そのため、ワークロードの大部分がローカルでアクセスされるように調整しています。.

UMAが限界に達する理由

UMA は、すべてのプロセッサに共通の 保存パス コア数が増えると、渋滞が発生します。追加のコアはすべて同じキューに割り込み、帯域幅を争います。多くの旧式の設定では、CPU 使用率は高いものの、アプリケーションの反応が遅くなるまでレイテンシが蓄積されていました。これは「CPU が限界に達している」ように感じられますが、実際にはメモリアクセスにボトルネックがあります。NUMA はまさにこの問題を解決します。 閉塞 ローカルパスとノードトポロジーによって。.

NUMA 対 UMA:違いの概要

私は、主な違いをコンパクトにまとめておきたいと思います。 テーブル 決定を迅速に行うために、この概要は、アーキテクチャ、レイテンシ、スケーリングにおいて重要な要素を示しています。これは、新しいホストのサイジングや、実稼働環境でのトラブルシューティングに役立ちます。ローカルアクセスとリモートアクセスの違いを明確に理解している人は、VM のカスタマイズや RAM の割り当てにおいて、より適切な決定を下すことができます。まさにここで、決定が下されるのです。 パフォーマンス 負荷がかかっている

基準 NUMA UMA 実用的効果
メモリアクセス ローカルまたはリモート 標準化 ローカルアクセスはより高速ですが、リモートアクセスはレイテンシがかかります。
スケーリング 結び目とよく合う 早期限定 NUMA では、より多くのコアがより確実にスケーリングされます。
トポロジー 複数のノード 統一プール トポロジーを意識した計画が必要
ハイパーバイザー 仮想NUMAが利用可能 あまり関連性がない ゲストOSはNUMA対応のスケジューリングが可能
微調整 ノードあたりの vCPU/RAM グローバルチューニング ノードに適合したVMが安定性を提供

仮想環境におけるNUMA

ハイパーバイザーに トポロジー ゲスト OS に渡して、スケジューラとメモリ管理がローカルで計画できるようにする。 Virtual NUMA はゲストにノードの境界を表示するため、データベース、JVMs、.NET ワーカーはヒープとスレッドをより効率的に配置できます。これにより、高価なリモートアクセスを回避し、レイテンシを安定させることができます。デリケートな設定では、これを一貫したピンニング戦略と固定 RAM 割り当てと組み合わせています。非常に短い応答時間を実現するために、さらに マイクロレイテンシーホスティング ジッターをさらに低減するために検討してください。.

VM サイズと CPU 割り当てのベストプラクティス

私は寸法を決定します vCPU VM が NUMA ノードに収まるか、あるいはそのノードにわずかに接触する程度になるようにします。例:ホストに 20 コアのノードが 2 つある場合、4 から 16 の vCPU を備えた VM は、1 つのノード内に配置することを優先します。 それを超える場合は、リモートアクセスや不要な待ち時間が発生するリスクがあります。RAM は、ゲスト OS がページをローカルに保持するように、可能な限り静的に分散します。シングルスレッドの割合が高いワークロードについては、適切なコア戦略を考慮し、次のような分析を利用します。 シングルスレッドとマルチコアの比較.

ホスティングハードウェアの具体的なメリット

クリーンな NUMA プランニングにより、私は 密度 ホストごとに、応答時間を犠牲にすることなく。多くのデータセンターでは、これにより、ソケットごとに大幅に多くの VM を稼働させながら、アプリケーションの応答性を確実に維持することができます。レイテンシの短縮は、ユーザーエクスペリエンスとバッチスループットに直接貢献します。CPU 時間と RAM がより効率的に使用されるため、ワークロードあたりのコストが削減されます。ハードウェアの選択を慎重に行うことで、最新のテクノロジーの恩恵も受けることができます。 高性能ウェブホスティングハードウェア 高いメモリ帯域幅を備えた。.

ワークロードの調整:データベース、キャッシュ、コンテナ

私は次のことを確認している。 データベース ヒープをローカルに保持し、ワーカースレッドを「自身の」ノードで計算します。SQL エンジン、インメモリキャッシュ、および JVM については、CPU の固定割り当てとメモリ予約が有効です。 コンテナオーケストレーションは、ノードアフィニティの恩恵を受けて、ポッドが最短のストレージパスを利用できるようにします。I/O 負荷が高い場合は、NUMA に近い NVMe 割り当てを使用して、データをノードの近くに保持します。これにより、ホットパスが短く保たれ、 応答時間 フレンドリー。.

NUMA のモニタリングとトラブルシューティング

測る レイテンシー CPU 使用率だけを見るのではなく、リモートアクセスをターゲットにします。ツールは、ノードごとに、リモートにあるページの数と、メモリ圧迫を引き起こしているスレッドを表示します。リモートミスが増加した場合、vCPU サイズ、アフィニティ、または RAM 割り当てを調整します。CPU のリザーブが高いにもかかわらずスループットが低いままの場合は、多くの場合、メモリパスが原因です。 ノードの可視性は、私にとって最速の方法です。 原因, 、症状だけでなく。.

NUMAスパンニング:正しい使用方法

起動させる スパンニング 非常に大きな RAM 要求や並外れた帯域幅を必要とする VM に特化しています。この VM は複数のノードからメモリを取得できるため、巨大なフットプリントを持つ単一インスタンスが可能になります。 その代償として、時折リモートアクセスが発生しますが、CPU アフィニティとページローカリティの割合を高めることで、その影響を緩和しています。混合負荷の場合は、1 つの非常に大きなインスタンスよりも、複数の中規模の VM を選択することをお勧めします。そうすることで、 計画性 日常生活で受け取る。.

ライセンス、密度、および実際のコスト

私の評価 コスト ホストレベルではなく、ワークロードごと、月ごとにユーロで計算されます。NUMA によって VM の密度が向上すると、インスタンスあたりの固定費が削減され、パフォーマンスの余裕が増します。これは、コアあたりのライセンスだけでなく、サポート費用やエネルギー費用にも影響します。リモートアクセスを削減することで、同じタスクで計算時間を短縮し、エネルギーを節約できます。結局、重要なのは 全体のバランスシート サーバーあたりのユーロだけでなく、結果あたりのユーロも。.

ハードウェアトポロジーと相互接続を正しく理解する

私は物理的なものを購入します。 トポロジー 私の計画に積極的に取り入れています。最新のサーバーは、複数の部品で構成される CPU 設計を採用し、インターコネクトを介してチップレットやダイを接続しています。つまり、すべてのコアがすべての RAM モジュールに同じ経路でアクセスできるわけではなく、ソケット内でも優先的な経路が存在します。ソケット間のリンクを流れるトラフィックが多いほど、その傾向は強くなります。 レイテンシー およびコヒーレンシーオーバーヘッド。そのため、ノードごとにアクティブなメモリチャネルの数、すべての DIMM スロットが対称的に装備されているかどうか、およびメインボードでノードがどのように接続されているかを確認します。ノードを小さなドメインに分割するサブ NUMA 機能は、ワークロードが明確にセグメント化されている場合、ホットスポットを分散することができます。また、以下も監視しています。 L3トポロジースレッドとそのデータが異なるキャッシュドメインにある場合、キャッシュ転送だけでパフォーマンスが著しく低下します。簡単な帯域幅テストとトポロジーの概要を確認することで、プラットフォームが期待される局所性を提供しているかどうか、あるいは相互接続がボトルネックになっているかどうかをすぐに把握できます。.

有効となるファームウェアおよび BIOS オプション

BIOS で、以下のことを確認します。 ノードインターリービング NUMA 構造が可視のままになるように、無効に設定しています。サブ NUMA クラスタリングや類似のモードは、ワークロードに中規模で明確に分離された作業量が多い場合に、意図的に使用しています。一貫したレイテンシを得るために、パフォーマンス重視のエネルギープロファイルを選択し、より深い Cステート そして、アグレッシブなコアパーキングは避けてください。メモリの配置は、フルに最適化します。 メモリチャネル帯域幅; 非対称のDIMM構成は、スループットと待ち時間に直接影響します。また、プリフェッチャーとRASオプションも確認します。一部の保護メカニズムは、ワークロードに貢献することなくレイテンシを増加させることがあります。重要:BIOSの調整は、実際の負荷でテストします。キャッシュや相互接続による微細な影響は、負荷がかかったときに初めて現れることが多いからです。.

ゲスト OS およびランタイムのチューニング:ファーストタッチからヒュージページまで

ゲストとして利用しています ファーストタッチ-私の利点となる割り当て:スレッドは「自身の」メモリを初期化して、ページがローカルに作成されるようにします。Linux では、ワークロードに応じて、自動 NUMA バランス調整を意図的に有効または無効にします。データベース関連のシステムは、安定したバインディングの恩恵を受けることが多い一方、分散型 Web ワーカーは、わずかな移行にも耐えることができます。numactl またはタスクピンニングを使用して、サービスをノードにバインドし、定義します。 membind-ガイドライン。. 巨大なページ TLB プレッシャーを低減します。レイテンシが重要なデータベースでは、ページフォールトのピークを回避するために、静的な巨大ページとウォームメモリ(プリタッチ)を優先します。透明巨大ページは、エンジンに応じて「madvise」で動作させるか、デフラグのレイテンシが発生する場合は無効にします。私は以下を制御しています。 IRQ アフィニティ ネットワークおよび NVMe 割り込みを適切なノードに分散します。RPS/XPS およびマルチキューは、データパスの一貫性を維持するのに役立ちます。 Windows では、プロセッサグループとスタック内のソフト NUMA を使用し、メモリを大量に消費するサービスでは「メモリ内のページをロック」し、.NET ではサーバー GC を有効にします。JVMs では、NUMA 対応ヒューリスティック、プリタッチヒープを使用し、GC とワーカーが同じノードを使用するようにスレッドアフィニティを制御します。.

ハイパーバイザー固有の設定を明確に調整する

私はそれを調整します。 vNUMAトポロジー 物理構造に合わせて設定します。「ソケット」、「ソケットあたりのコア数」、「コアあたりのスレッド数」のパラメータは、ハイパーバイザーがノード間で VM を分割しないように選択します。レイテンシに敏感なインスタンスについては、バルーニングやスワッピングが発生しないように RAM を予約し、アフィニティまたは適切なスケジューラオプションを使用して pCPU リソースを確保します。 CPU またはメモリのホットアドには注意してください。多くのプラットフォームでは、これによりゲストの vNUMA が無効になり、その結果、隠れたリモートアクセスが発生します。ライブマイグレーションは、ターゲットホストが互換性のある NUMA トポロジーを持つように計画し、マイグレーション後に VM が ページロカリティー 再構築する(プレタッチ、ウォームアップ)。KVM 環境では、NUMA チューニングオプションと cpuset-Cgroups を使用しています。他のハイパーバイザーでは、exstop/類似のツールを使用して、vCPU の分散とノードヒットをリアルタイムで確認しています。.

PCIe および I/O のローカリティを無駄にしない

私は組織する NVMe-ドライブ、HBA、および NIC を、計算スレッドが実行されているノードに割り当てます。SR-IOV または vNIC キューは、同じノードのコアにバインドし、それに応じて割り込みを制御します。 高いパケットレートでは、受信/送信キューをスケーリングし、ローカルコアに一貫して分散します。ストレージスタックでは、データパスが相互接続を横切ることを避けるため、I/O サブミットおよび完了のワーカスレッドが同じノードで動作するように注意しています。 また、マルチパスおよびソフトウェア RAID もノードごとに計画します。「短い」パスは、ほとんどの場合、外部アクセスを伴う「広い」パスよりも優れています。これにより、ジッターを低減し、I/O 負荷の下で CPU時間 効果のある場所に。.

キャパシティプランニング、オーバーコミット、メモリ機能

レイテンシー重視のワークロードは、私は優先的に運用しています。 オーバーコミット RAM に、そして vCPU に適度に。バルーニング、圧縮、ハイパーバイザーのスワップは、外部アクセスやページフォールトのピークを発生させるけど、これはまさに避けたいことなんだ。 透過的なページ共有は、多くの設定では効果がなく、真の局所性を覆い隠してしまう可能性があります。私は、メモリ帯域幅を大量に消費する複数のインスタンスが同じノードで衝突しないように、VM の組み合わせを調整しています。インメモリエンジンについては、余裕のある ご予約 また、適切な場合には、ハイパーバイザーが通過できるゲスト内の巨大なページを使用します。これにより、TLB ヒット率とアクセス時間が予測可能になります。.

ライブマイグレーションと高可用性

私は、 移住 VM のサイドロカリティーを一時的に破壊します。移動後、重要なヒープをウォームアップし、バックグラウンドジョブでホットセットを再構築します。vNUMA を再構築する必要がないよう、ターゲットホストは同様の NUMA トポロジーで計画します。 異機種ハードウェアの HA ケースでは、ポリシーを定義します。一時的に高いレイテンシを受け入れるか、互換性のあるノードサイズのホストを優先します。移行後の監視が重要です。リモートページ比率が上昇した場合は、アフィニティを調整するか、プリフォールトをトリガーして、 地域性 再び合う。.

実用的な診断パターン

典型的な NUMA の問題は、いくつかのパターンから認識できます。CPU は「高温」で動作していますが、 サイクルごとの指示 低いままであり、レイテンシは波のように変動し、コアが空き状態であるにもかかわらず、個々のスレッドがメモリアクセスでブロックされます。このような場合、私はリモートヒット、相互接続の負荷、TLBミス、およびノードごとのアクティブなスレッドの分布を確認します。アプリケーションを実行しているコアと割り込み負荷の相関関係を調べ、ノード間でキャッシュが絶えず無効化されていないかどうかを確認します。 簡単な検証方法としては、VM を 1 ノードに縮小します。レイテンシがすぐに低下した場合、スパニングまたはスケジューリングが原因でした。同様に、専用テストによりノードごとの RAM 帯域幅を明らかにし、DIMM 実装または BIOS オプションが速度低下の原因であるかどうかを確認します。.

実践チェックリスト

  • トポロジの把握:ノード、メモリチャネル、PCIeマッピング、キャッシュドメイン
  • BIOS を確認:ノードインターリービングオフ、パフォーマンスのエネルギープロファイル、フラットな C ステート
  • VM の削減:VM あたりの vCPU ≤ ノードサイズ、vNUMA が正しい、ホットアドに注意
  • RAMの確保:レイテンシワークロードの予約、適切な場合の巨大ページ
  • アフィニティの設定:スレッド、IRQ、I/O キューを同じノードにバインドする
  • コンテナ/ポッド:ノードアフィニティ、CPU マネージャー、トポロジー認識の活用
  • 的を絞ったスパンニング:ポリシーとモニタリングによる大規模インスタンスのサポート
  • 移行の計画:適切なターゲットトポロジー、ヒープの事前タッチ、ローカリティの観察
  • モニタリングの強化:リモートアクセス、ノードごとの帯域幅、相互接続の利用率
  • 定期的なテスト:ファームウェアまたはホストの変更後の帯域幅/遅延チェック

現在の記事