Compound Page:
指的是記憶體的集合,包含兩個以上的連續記憶體。它會使用meta data來記錄這些記憶體,使用的flag是 __GFP_COMP。目前有一些driver會使用,另外還提供給系統核心使用,比較著名的是 hugetlbfs 和Transparent Huge Pages (THP)。
詳情可以參考 An introduction to compound pages
Huge Page [詳細介紹]:
這是20年前就開始使用的技術 (Pentium Pro),而ARM則等到2004年後在ARMv7才支援。這項技術就是將page size從4KB加大到1MB以上。[wiki]
- 好處 [Intel doc]
- 處理大檔案時,減少 page fault 為 1/512 倍 。
- 同樣大小的TLB (Translate Lookaside Buffer) 可以映射更多的記憶體。Intel 分別設立2組 TLB (Pentium Pro in PAE mode),一組專門紀錄4KB page,另一組專門紀錄2MB page。
- 壞處 [Andrea at KVM Forum]
- 當同一page內的資料過於分散,需要花更多的搜尋時間
- page fault時,載入時間比較久
- 因為有兩組不同的 TLB,如果要使用這項硬體功能時,是偷懶地交由user自行決定是否要使用大page,使用的機制就是 hugetlbfs。
- 不能將page swap到硬碟 !!! (不支援) [lwn]
- 最好在boot階段就配置好
- VMA (Virtual Memory Area) 也要分成 4KB 和 2MB兩組 !!!
hugetlbfs:
使用user space介面去配置大塊連續的memory !!! 接著要自己做mmap(),不過簡單的方式是使用libhugetlbfs的HUGETLB_MORECORE=yes變數[lwn]。
- 壞處:
- 在Kernel Virtual Machine底下,如果使用動態配置,可能出錯
- 性能不好,所以加入許多功能,搞的像是第二個 tmpfs
替代方案:
目前有兩個方案,但2016年的會議仍無法決定誰能進入Linux Mainline
- Transparent Huge Page (THP):
- 好處:
- 會自動將2MB page分裂成 4KB pages
- user space programmer不用煩惱不同pages間的差異
- 壞處:
- 還在孵,在2016/04/20時,還沒有實際整合到 Linux mainline
- Team Page [名稱待定]:
- 好處:
- 已經被google server採用將近一年 (截至2016/04),有實戰經驗