Linuxカーネルはいくつのコアを処理できますか?

Linuxカーネルはいくつのコアを処理できますか?

私は理論的な限界とおそらく大きなCPUを持つシステムの例に興味があります。

答え1

実際には少なくとも2048年です。具体的な例として、SGIはその製品を販売しています。紫外線システムは、256個のソケット(2,048個のコア)と16TBの共有メモリを使用でき、どちらも単一のコアで動作します。私はこの構成で販売されているシステムを少なくともいくつか知っています。

SGIによると:

Altix UVは、NovellやRed Hatの標準ディストリビューションを含む完全に変更されていないLinuxを実行します。

答え2

ランチパッドです。言わなければならないUbuntuに関しては、他の人にも当てはまると思います。

1.Intel x86:
Maximum CPUs: 32 (including logical CPUs)
Maximum memory: 64GB
Maximum filesize: 8TB
Maximum filesystem size (ext3) 16TB
Maximum per-process virtual address space: 4GB

2.AMD64/EM64T:
Maximum CPUs: 64
Maximum memory: 128GB
Maximum filesize: 8TB
Maximum filesystem size (ext3): 16TB
Maximum per-process virtual address space: N/A

These are standard max limitations whereas Linux cluster systems can scale up to 1024 CPU's.

x86とx86_64の場合、これはそれぞれ32または64 CPUです。

Redhatも同じことを言ったがテーブル管理が簡単。 Redhat EL6はx86の場合は32個のCPUコアを提供し、x86_64の場合は128または4096個のCPUコアを提供できます。

答え3

x86_64 Linuxカーネルは、単一のシステムイメージで最大4096個のプロセッサスレッドを処理できます。これは、ハイパースレッディングが有効な場合、最大プロセッサコア数が2048であることを意味します。はい、2048を超えるプロセッサコアを搭載したコンピュータがありますが、高速相互接続(通常はInfinibandファブリック)で接続されている複数のLinuxカーネルが協力しているクラスタとして実行されます。

~/arch/x86/Kconfig の最新カーネル 3.13 から開始:

NR_CPUSの設定

    ---help---
      This allows you to specify the maximum number of CPUs which this
      kernel will support.  If CPUMASK_OFFSTACK is enabled, the maximum
      supported value is 4096, otherwise the maximum value is 512.  The
      minimum value which makes sense is 2.

      This is purely to save memory - each supported CPU adds
      approximately eight kilobytes to the kernel image.

アップデート:最新のカーネルでは、これはアーキテクチャによって異なります。4.15 x86_64では、NR_CPUSを8192に設定できます。適切な状況では、同時に32ビットarmは32で停止します。

答え4

スレッドはマルチタスクモデルとスレッド管理スキームの影響を受けます。私の記憶が正しい場合、Intelベースのシステム用のGdtはLinux用です。アイデアは、最大8192のスレッドが可能であることです。システムがスレッドを管理するためにgdtを使用しているとします。 32ビットシステムではジョブ遷移が管理され、32ビットおよび64ビットシステムの割り込みベクタにはgdtエントリが必要です。腕がどのように作られたかはよくわかりませんが、同じ関節が行われるべきです。タスク遷移の概念は、タスク割り当てモデルでGDTを繰り返す。

gdtスキームを破ると、各スレッドのスタックフレームに対して1ページ、スレッドのコードベースに対して1ページ、ヒープスペースに対して1ページがあるときに保持しているメモリまで確保できます。コードページやヒープがあるとは考えられません。これはランダム変数です。通常、各スレッドには2つのスタックフレームがあり、1つはスレッドによって保持され、もう1つはLinuxカーネルによって保持されます。スワップ空間と呼ばれる仮想メモリの概念を追加すると、モデルはめちゃくちゃになりますが、これはスレッドの優先順位に関連しています。

関連情報