32bitOSで扱えるアドレス空間は単純には4GBが上限とされている。
しかし、PAEを使用した場合には、IA-32アーキテクチャのアドレスラインである32ビットを36ビット以上のメモリ空間に拡張する。これにより、 IA-32の標準では最大4GiBまでしか使用できなかった物理メモリ空間を、最大64GiB以上使用できるようになる。ただ、仮想アドレス空間は 4GiBのままであり、ページテーブルのエントリを32ビットから64ビットに拡張することによって物理メモリ空間にアクセスする事となる。ページサイズ は4KiBで、ページテーブルのサイズは1ページのままであるので、ページテーブルのエントリの数が一段あたり1024から512になる。これを補うため に、PAEにおいては、4エントリを持ったページテーブルが最上位に1段追加される。ページテーブルが増えるので、Low領域(kernel領域)のリ ソースが不足し、また参照段数が増えるのでアクセス性能も落ちる。
●Low領域
x86アーキテクチャ(32bit)のメモリマッピングでは、以下のようにLow、Highの概念が存在する。kernalは、プロセスごとに4GBの仮想メモリ空間を割り当てるが、その空間は、
- Lowmem:1GBのカーネル空間。全プロセスで共用。
- Highmem:プロセスが利用する先頭から3Gバイトのプロセス空間。こちらがNormalゾーン。
- カーネル空間:カーネルが必要な実メモリに直接アクセスするためのマッピング領域。最大で896MB。
- Highmemアクセス領域:実メモリの大きさが896MBを超える場合、つまりストレートマッピングできない実メモリ(Highmem)にアクセスるるための領域。
●PTE(Page Table Entry)
プロセスが論理アドレスにアクセスすると、カーネルは必要に応じてそれに物理アドレスを割り当てる(メモリマッピング)。 このようにカーネルが各プロセスに対して論理アドレスと、それに対応する割り当て済みメモリの変換表(ページテーブル)を用意して管理している。このページテーブルは、PDP、PDE、PTEで構成されるが、その一つがPTE。PAE対応のkernelはそうでないkernelを使用した場合よりも、 最大で50%の性能低下がある。これは、PAE対応のkernelでは、メモリ参照の階層が1つ多いために、TLBがミスヒットした場合のペナルティーが大きいからだ、また、メモリを大量に管理しているため、TLBのヒット率そのものがじつは、あまり高くないという噂も (特にIntel製CPUを使用している場合)。
また、PAE対応のkernelでは、64GBのメモリを認識するが、PTEの領域が巨大にな り、Lowmemのリソース不足が発生する。 現実的には、システムを安定動作させるには、少ないメモリで運用することになる。富士通などのベンダーは12GB未満のメモリで運用することを要求している。
●TLB(Translation Lookaside Buffer:)
CPUの中には、ハードウエアであるメモリ管理ユニット (MMU) があり、さらにその中にはTLBと呼ばれる一種のキャッシュがある。ユニット内部ではこの対応表に基づいてメモリアドレスの対応づけを行っている。
コメント