- プロセスあたり最大128TiBの仮想アドレス空間(2GiBではなく)
- 4GiB(またはPAE拡張を備えた64GiB)の代わりに64TiB物理メモリをサポート
何故ですか?つまり、物理メモリのサポートはカーネルまたは現在のハードウェアによって制限されていますか?
実際にアドレス指定できる物理メモリの2倍の仮想メモリ空間が必要なのはなぜですか?
- プロセスあたり最大128TiBの仮想アドレス空間(2GiBではなく)
- 4GiB(またはPAE拡張を備えた64GiB)の代わりに64TiB物理メモリをサポート
何故ですか?つまり、物理メモリのサポートはカーネルまたは現在のハードウェアによって制限されていますか?
実際にアドレス指定できる物理メモリの2倍の仮想メモリ空間が必要なのはなぜですか?
回答:
これらの制限はDebianやLinuxからではなく、ハードウェアから来ています。異なるアーキテクチャ(プロセッサとメモリバス)には異なる制限があります。
現在のx86-64 PCプロセッサでは、MMUは48ビットの仮想アドレス空間を許可しています。つまり、アドレス空間は256TBに制限されます。カーネルアドレスとユーザーランドアドレスを区別するための1ビットを使用すると、プロセスのアドレススペースに128TBが残ります。
現在のx86-64プロセッサでは、物理アドレスは最大48ビットを使用できます。つまり、最大256TBを使用できます。amd64アーキテクチャが導入されて以来、制限は次第に高くなっています(正しく思い出せば40ビットから)。アドレス空間の各ビットには配線とデコードロジックのコストがかかるため(プロセッサが高価になり、速度が低下し、高温になります)、ハードウェアメーカーはサイズを小さくするインセンティブを持っています。
Linuxでは、物理メモリをカーネルスペースに完全にマッピングできるため、物理アドレスは最大2 ^ 46までしか使用できません(したがって、最大64TBまでしか使用できません)。48ビットのアドレス空間があることに注意してください。カーネル/ユーザー用の1ビットは、カーネルアドレス空間用に47ビットを残します。その半分は多くても物理メモリを直接アドレス指定し、残りの半分はカーネルが必要なものをマッピングできるようにします。(Linuxは同時に完全にマッピングできない物理メモリに対応できますが、複雑さが増すため、PAEを搭載したx86-32やLPAEを搭載したarmv7 など、必要なプラットフォームでのみ実行されます。)
いくつかの理由から、仮想メモリが物理メモリよりも大きいと便利です。
理由はわかりませんが、物理メモリの2倍のアドレス空間をサポートすることが役立つ7つの理由を考えることができます。
これらはハードウェアの制限です。現在のx86_64 / amd64ハードウェアでは、48ビットの仮想アドレスとさまざまなサイズ(実装によって異なります。たとえば、ここでのワークステーションは36ビットしかサポートしていません)の物理アドレスを使用できます。Linuxカーネルは仮想アドレス空間を半分に分割します(x86の場合と同様に、カーネルに半分、ユーザー空間に半分を使用)。
だからあなたは得る:
2⁴⁸バイト÷2 =2⁴⁷バイト= 128 TiB
物理アドレスのサイズは、実際には物理的であるため、しばしば小さいです。CPU上の/内のピン/パッド、トランジスタ、接続などを占有し、ボード上のトレースラインを占有します。おそらくチップセットでも同じです。プロセッサコアまたはソケットの設計寿命にわたって考えられない量のRAMをサポートすることは意味がありません。これらはすべて費用がかかります。(それぞれに32個のDIMMスロットと64GiB DIMMがありますが、まだ2TiBしかありません。DIMMの容量が年に2倍になっても、64TiBから5年離れています。
ピーター・コルドが指摘、人々は今のような不揮発性記憶装置を装着している3D XPoint考えられるアドレス空間が不足している可能メモリバスへ、。新しいプロセッサは、物理アドレス空間を48ビットに拡張しました。Debian wikiが更新されていない可能性があります。
clflush
とclflushopt
指示でサポートしています。