私は今読んだ。ここ:
- プロセスあたり最大128TiB仮想アドレス空間(2GiBではなく)
- 4GiB(またはPAE拡張を含む64GiB)の代わりに64TiB物理メモリをサポート
なぜそんなことですか?私は、物理メモリのサポートがカーネルまたは現在のハードウェアによって制限されることを意味しますか?
実際にアドレス指定可能な物理メモリよりも2倍の仮想メモリスペースが必要なのはなぜですか?
答え1
これらの制限は、DebianやLinuxではなくハードウェアに由来します。アーキテクチャ(プロセッサとメモリバス)によって制限が異なります。
現在、x86-64 PCプロセッサでは、MMUは次のことを許可します。48ビット仮想アドレス空間。これは、アドレス空間が256TBに制限されることを意味します。 1ビットを使用してカーネルアドレスとユーザーゾーンアドレスを区別すると、プロセスアドレススペースに128 TBのスペースが残ります。
現在x86-64プロセッサでは物理アドレスは最大48ビットまで使用できます。つまり、最大256TBまで保持できます。 amd64アーキテクチャが導入されて以来、この制限は徐々に増加しました(私の記憶が正しい場合は40ビットから始まります)。アドレス空間の各ビットには、いくつかの配線とデコードロジック(プロセッサが高価、低速、熱くなる)が必要なため、ハードウェアメーカーはサイズを縮小するインセンティブを持っています。
Linuxでは、物理メモリをカーネル空間に完全にマッピングできるため、物理アドレスは最大2 ^ 46(つまり最大64 TB)まで許可されます。アドレス空間には48ビットがあり、1つはカーネル/ユーザー用で、47ビットはカーネルアドレス空間用に残されています。その半分は最大物理メモリを直接処理し、残りの半分はカーネルが必要なものすべてをマップできるようにします。 (Linuxは同時に完全にマッピングできない物理メモリを処理できますが、これにより追加の複雑さが発生するため、必要なプラットフォームでのみ実行されます。PAEを含むx86-32LPAEを含むarmv7。 )
物理メモリよりも大きな仮想メモリを持つことは、次の理由で役立ちます。
- これにより、カーネルは物理メモリ全体をマッピングし、追加の仮想マッピングのためのスペースを残します。
- 物理メモリマッピングに加えて、スワップ、ファイル、デバイスドライバへのマッピングもあります。
- いくつかの場所では、マップされていないメモリを持つことが便利です。キャプチャするガードページバッファオーバーフロー、なぜならASLR、等。
答え2
理由はわかりませんが、物理メモリサイズの2倍のアドレス空間をサポートすることが役に立つ7つの理由を考えることができます。
- 1つ目は、追加のメモリが必要なアプリケーションを実行できることです。これは、ディスクと交換する必要がある場合にも可能です。
- メモリ使用量を分割するためのよりクリーンなメモリレイアウト。たとえば、オペレーティングシステムは、より高い番号のアドレスを使用し、アプリケーションがより明確に区別されるように、より低い番号のアドレスを残すことができます。
- アドレス空間レイアウトのランダム化より効果的です。
- ページを実行可能としてマークすると、メモリが残っている可能性があります。
- メモリマップされたI / O。
- メモリ割り当てが簡単です。大きなチャンクを一度に割り当てることができます。
- メモリ断片化の削減
答え3
これはハードウェアの制限です。現在、x86_64/amd64 ハードウェアは、48 ビットの仮想アドレスとさまざまなサイズ(実装によって異なります - たとえば、私のワークステーションは 36 ビットのみをサポート)の物理アドレスを受け入れます。 Linuxカーネルは仮想アドレス空間を半分に分割します(x86と同様にカーネル用の半分、ユーザースペース用の半分)。
だからあなたは次のようになります:
2⁴⁸バイト ¼ 2 = 2⁴⁸バイト = 128TiB
実際のアドレスサイズは実際には物理アドレスであるため、通常は小さいです。 CPUのピン/パッド、トランジスタ、接続部などはもちろん、ボードのトレースも占めています。チップセットでも同様です。プロセッサコアやソケットの設計寿命を超えて多くのメモリをサポートすることは意味がありません。これらすべては費用がかかります。 (32個のDIMMスロットとスロットあたり64GiB DIMMを使用しても、容量は2TiBにすぎません。DIMM容量が毎年2倍になっても、64TiBまでは5年かかります。
〜のようにピーター・コルデス人々は今、不揮発性リポジトリを接続していると指摘しました。3D Xポイントアドレス空間を消費できるメモリバスで。最新のプロセッサは物理アドレス空間を48ビットに拡張しました。 Debian Wiki はまだ更新されていない可能性があります。