回答:
getconf
次のコマンドを使用して構成を照会することにより、システムのデフォルトのページサイズを確認できます。
$ getconf PAGE_SIZE
4096
または
$ getconf PAGESIZE
4096
注:上記の単位は通常バイト単位であるため、4096は4096バイトまたは4kBに相当します。
これは、Linuxカーネルのソースに組み込まれています。
$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#ifdef __ASSEMBLY__
#define PAGE_SIZE (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK (~(PAGE_SIZE-1))
ビットをシフトすると、2のバイナリ乗算が実行されます。したがって、実際にはビットの左シフト(1 << PAGE_SHIFT
)は2 ^ 12 = 4096の乗算を実行しています。
$ echo "2^12" | bc
4096
ハードウェア(具体的には、CPUの一部であるMMU)により、可能なページサイズが決まります。プロセッサのレジスタサイズとは関係がなく、アドレススペースサイズとは間接的な関係しかありません(MMUが両方を決定するため)。
ほとんどすべてのアーキテクチャが4kBのページサイズをサポートしています。一部のアーキテクチャは大きなページをサポートしていますが(一部のアーキテクチャは小さなページもサポートしています)、4kBは非常に普及しているデフォルトです。
Linuxは2つのページサイズをサポートしています。
CONFIG_HUGETLB_PAGE
必要CONFIG_HUGETLBFS
です)これは、MMU記述子の2番目に深いレベル(LinuxがPMDと呼んでいるもの)に対応しています(または、少なくとも通常は、これがすべてのアーキテクチャに当てはまるかどうかはわかりません)。ページサイズは、メモリ使用量、メモリ使用量、速度の間の妥協点です。
ほとんどのアプリケーションでは、ページサイズが大きくなることによるメリットはわずかですが、コストは大きくなります。これが、ほとんどのシステムが通常サイズのページのみを使用する理由です。
getconf
ユーティリティまたはC関数を使用して、システム上の(通常の)ページサイズを照会できますsysconf
。
$ getconf PAGE_SIZE
4096
hugeページを使用するには、hugetlbfs
ファイルシステムをマウントし、mmap
そこにファイルをpingする必要があります。
ページサイズは、主にプロセッサアーキテクチャに依存します。x86では、プロテクトモードを導入した386プロセッサの時代から、ページサイズは4 kBでした。
x64モードでは、サイズが2 MBの巨大なページもあります。ただし、それらの使用は少し複雑です。
ページサイズの詳細については、Wikipediaの記事をご覧ください。