# ヒュージページ ## 定義 最近のプロセッサは複数のページサイズ(たとえば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