web-dev-qa-db-ja.com

なぜ理論的なRAM制限TBであり、これはどのように決定されるのですか?

私はRHCSAのために勉強していて、いくつかのトレーニング資料で出くわした言葉に混乱しています:

理論的には、128 TB of RAM on RHEL 6)を実行できますが、これは単なる理論です。最大RAMは、32ビットシステムでは16 GB、64ビットシステムでは2 TBです。

128 TB理論上の制限がどこから来ているのかを誰かが説明してもらえますか?RHEL 6が他の最大制限を明確に定義している場合、著者が理論上の制限が存在することを著者がどのように知るのか混乱しています。これは単に考慮に入れていますか? 64ビットアーキテクチャの理論上の限界?それとも、ここに他の理由がありますか?

8
Mike B

カーネルのドキュメントから Documentation/x86/x86_64/mm.txt

Virtual memory map with 4 level page tables:

0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm

247 バイト= 128TiB

短い答え

各Linuxプロセスは、最大128個のTB of virtualmemory をアドレス指定できます。ただし、これはLinuxカーネルが処理できる以上物理的にしたがって、この制限は理論上のものです。

これはおそらく、想定可能な「最悪の場合」の使用シナリオに基づいて、任意に選択されたものです。

精巧な答え

実際には、ハードウェアで許可されている以上のRAM=(48ビット=256 TB一般的 最近))を使用することはできません。 Linuxカーネルが処理できる物理メモリの量によって制限されます。

たとえば、Intelx86 64ビットアーキテクチャでは、Linuxは64 TB以上を使用できません物理メモリ(バージョン2.6.30以降ですが、 以前16 TB直前)。 RHEL 6は2.6.32カーネルを使用することに注意してください。

64ビット s390アーキテクチャ の場合、 same limit が適用されます(2.6.28以降)。ただし、32ビットを使用する場合、制限は4 GBですが、 strange と呼ばれるトリック [〜#〜] pae [ 〜#〜] 、最大で64 GB(x86でよく使用されます)。

他の64ビットアーキテクチャには下限があると思います。

詳細はRed Hat limits table を参照してください(感謝Huygens)。

4
Totor

仮想メモリと物理揮発性メモリを混同しないでください。前者はCPUアーキテクチャ固有であり、揮発性メモリと不揮発性メモリにマップされます。後者は、別名RAMであり、カーネルの観点からはCPUアーキテクチャーから独立している必要があります。

今日のAMDおよびIntel x86_64実装のみは、48ビットのアドレス可能な仮想メモリをサポートしています。これは、カーネルがプロセスVMあたり2 ^ 48 = 256 TiBに対応できることを意味します。
x86_64アーキテクチャ上のLinuxカーネルは、アドレス可能なVM 2のスペースをユーザースペース用に128 TiB、カーネルスペース用に128 TiBに分割しました。したがって、プロセスは理論的には合計128 TiBに対処できます。仮想メモリの。

カーネルが処理できる揮発性物理メモリの最大値は別の側面ですが、この情報はわかりません。

RHCSA作成者ステートメントについて

文の著者「理論的には、実用的な最大RAMはありません。128TB of RAM)を実行できます。」が間違っているか、誤解されている用語 これは、RHEL 3、4、5、および6の機能をまとめたRed Hat Webサイトの表です そして、「プロセスごとの最大x86_64仮想アドレス空間[...] 128 TB [RHEL 6の場合] "

同じページには、RHEL 6が最大2TB/64TBをサポートしていると記載されていますRAM(物理的な揮発性メモリ)。これは、最大2TBのRAMで認定されており、理論的には64TB。 SLESはこの点ではるかに明確です

1
Huygens

それが理論的であるもう1つの理由は、実装経験の欠如です。

プログラマーは、ハードウェアの機能よりもはるかに前に変数のサイズを決定するのが一般的です。そのため、その機能のハードウェアが10年以上後に出現しても、カーネルは危険なリップアンド置換プログラミングを必要としません。

ただし、可変サイズだけが制限ではありません。データ構造とそのアルゴリズムには独自の制限があります。その128TBの各4KBページを記述するデータ構造の線形ウォークを行っていると想像してみてください。明らかな対応がいくつかあります。4KBページを使用しないでください。線形データ構造を使用しないでください。これらのデータ構造に頻繁にアクセスしないでください。できるだけハードウェアにオフロードしてください。しかし、さらに微妙なデータ構造+アルゴリズムの制限があり、それらに遭遇するまではわかりません。

明日、128TBのPCを魔法のように発見してLinuxを起動しようとすると、それは恐ろしく、恐らく開始できないほど恐ろしく実行されます。しかし、アルゴリズムを修正することは簡単です。データ構造を修正することはいくらかの作業ですが、広く理解されている変数のサイズを修正するよりもはるかに少ない作業です。したがって、メモリサイズが大きくなるにつれて、その性質の変化がわかります。

0
vk5tu