# ヒュージページ
## 定義
最近のプロセッサは複数のページサイズ(たとえば4KB、2MB、1GB)をサポートしており、OSとMMUは異なるページサイズを使える。Linuxのヒュージページ(huge page)機能は、2MBや1GBといった大きなページサイズをサポートする。MMUのアドレス変換キャッシュであるTLB(translation lookaside buffer)が持つマッピングのエントリ数は限られているため、大きなページサイズを使うとTLBがキャッシュで翻訳できるメモリの範囲(リーチ)が広がり、TLBミスが減ってシステムのパフォーマンスが上がる。Linuxでは、ヒュージページはnr_hugepagesの設定、shmget(2)へのSHM_HUGETLBSフラグ指定、hugetlbfsファイルシステムのマウント、mmap(2)へのMAP_ANONYMOUS|MAP_HUGETLBフラグ指定とlibhugetlbfs APIなど複数の方法で構成できる。透過的ヒュージページ(THP、Transparent Huge Pages)は、アプリケーションがヒュージページを明示的に指定しなくても通常ページとヒュージページの切り替えを自動的に行う仕組みだが、歴史的にパフォーマンス問題があり普及が遅れた経緯がある。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 7 メモリ]] §7.3.1.5.1, §7.3.1.6, §7.6.2)
## 横断的知見
(このセクションは複数ソースの突き合わせで得られる知見を蓄積する。現時点では本概念に触れたソースが1件のため、蓄積を今後の ingest に委ねる。)
## 未解決の問い
- 本章は透過的ヒュージページの「歴史的なパフォーマンス問題はおそらく解消されている」(Source: 本章§7.6.2 脚注)と述べるにとどまる。実際にどのカーネルバージョン以降、どのワークロード特性(メモリフラグメンテーション、khugepaged由来のレイテンシスパイク等)で問題が解消されたと言えるか、他ソースでの追検証が必要。
- AI推論・訓練ワークロードのような大容量連続メモリアロケーションでは、ヒュージページによるTLBミス削減効果とメモリフラグメンテーション(1GBページ確保の失敗率)のトレードオフはどの程度実測されているか。
- KPTIパッチのTLBフラッシュ増加コスト(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 3 オペレーティングシステム]] §3.4.3)をヒュージページで緩和できるとBrendan Greggは述べているが、その定量的な緩和幅はどの程度か。
## 関連
- [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 7 メモリ]] — 本概念の原典解説(§7.3.1.5.1, §7.6.2)。
- [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 3 オペレーティングシステム]] — KPTIのTLBフラッシュコストとヒュージページによる緩和に言及。
- [[仮想メモリとページング]] — ページサイズとページングの基礎概念。
- [[詳解 システム・パフォーマンス 第2版]] — 書籍ハブ。
## 出典
- [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 7 メモリ]] §7.3.1.5.1, §7.3.1.6, §7.6.2