5.2. Huge pages および transparent huge pages
メモリは pages とよばれるブロックで管理されています。1 page は 4096 バイトです。メモリ 1MB は 256 pages と同等で、1GB は 256,000 pages と同等、ということになります。CPU にはビルトインの メモリ管理ユニット があり、これらのページの一覧が含まれています。また各ページは ページテーブルエントリ で参照されています。
システムが大量のメモリを管理できるようにするには、以下の 2 つの方法があります。
- ハードウェアのメモリ管理ユニットでページテーブルエントリの数を増やす。
- ページサイズを拡大する。
現在のプロセッサーでは、ハードウェアのメモリ管理ユニットは数百から数千のページテーブルエントリのみをサポートするので、最初の方法は費用がかさみます。さらに、数千ページ (メガバイトのメモリ) でうまく機能するハードウェアとメモリ管理のアルゴリズムは、数百万 (さらには数十億) のページではうまく実行できない可能性があります。この場合、パフォーマンス問題につながります。メモリ管理ユニットがサポートする以上のメモリページをアプリケーションが使う必要がある場合、システムはより遅い、ソフトウェアベースのメモリ管理にフォールバックするので、システム全体が遅くなってしまいます。
Red Hat Enterprise Linux 6 では、huge pages を使って 2 番目の方法を実行しています。
簡単に言うと、huge pages は 2MB や 1GB サイズのメモリのブロックです。2MB のページが使用するページテーブルは、複数のギガバイトのメモリ管理にふさわしく、1GB のページテーブルはテラバイトまでのメモリ拡張に適するものです。
Huge pages は起動時に割り当てられる必要があります。また、手動での管理は難しく、効果的に使用するにはコードの大幅変更が必要となる場合が多くあります。このため、Red Hat Enterprise Linux 6 は transparent huge pages (THP) も実装しています。THP は、huge pages の作成、管理、使用の多くを自動化する抽象化レイヤーです。
THP は、huge pages の使用における複雑性の多くをシステム管理者や開発者から取り除きます。THP の目標はパフォーマンス改善なので、(コミュニティーと Red Hat の両方の) 開発者は、幅広いシステムや設定、アプリケーション、ワークロードで THP をテスト、最適化しています。これにより、デフォルト設定の THP はほとんどのシステム設定のパフォーマンスを改善できます。ただし、THP はデータベースのワークロードには推奨されません。
THP が現在マッピング可能なのは、ヒープやスタック領域などの匿名メモリリージョンのみです。