Linuxカーネル - CPU制限

Linuxカーネル - CPU制限

最近、Linuxカーネルコードの検索中にカーネルがサポートできるCPUの数に関する多くの質問に遭遇しました。

私が理解したのは、アーキテクチャによってはコアが特定の数のCPUを処理できることです。この番号はKconfigファイルで指定され、CONFIG_NR_CPUSオプションとして渡されます。

これは私のdmesg出力です。

setup_percpu: NR_CPUS:5120 nr_cpumask_bits:240 nr_cpu_ids:240 nr_node_ids:1 RCU restricting CPUs from NR_CPUS=5120 to nr_cpu_ids=240

私の質問は次のとおりです

  • なぜそんなに大きいのですNR_CPUSか?

  • 240はどこからnr_cpumask_bits来ましたかnr_cpu_ids

助けてくれてありがとう

答え1

NR_CPUSがなぜそんなに大きいのか?

これは、実際のLinuxシステムのCPU数がこの順序であるためです。私は1024 CPUマシンで実際のテスト結果を見ました。

私は、小規模な独立システムのクラスタではなく、複数のCPUコアがあり、すべて単一のLinuxカーネルを実行している単一のコンピュータについて話しています。

例えば、SGIは現在最大32個のCPUソケットまで拡張できるシステムです。現在、Intel Xeonシリーズの最大コア数は22個です。これにより、最大704のコアを追加してから2倍に増やすことができます。ハイパースレッディング。この記事が作成された時点とこの記事を読んだ時点の間に、このコア制限が超過した可能性があります。

240 nr_cpumask_bitsとnr_cpu_idsはどこから来たのですか?

実際のハードウェアにはいくつかの制限があります。 2つの物理プロセッサがある場合でも、これを処理するには特別に設計されたシステムが必要です。多くの物理CPUチップをサポートできるシステムでは、効率を向上させるためにさまざまな特別なハードウェアサポートが必要です。クロスバースイッチ構造計画など

関連情報