2016年4月22日 星期五

Compound Page, Huge Page, 和Transparent Huge Page(THP)


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]
    1. 處理大檔案時,減少 page fault 為 1/512 倍 。
    2. 同樣大小的TLB (Translate Lookaside Buffer) 可以映射更多的記憶體。Intel 分別設立2組 TLB (Pentium Pro in PAE mode),一組專門紀錄4KB page,另一組專門紀錄2MB page。
    1. 當同一page內的資料過於分散,需要花更多的搜尋時間 
    2. page fault時,載入時間比較久
    3. 因為有兩組不同的 TLB,如果要使用這項硬體功能時,是偷懶地交由user自行決定是否要使用大page,使用的機制就是 hugetlbfs。 
    4. 不能將page swap到硬碟 !!!  (不支援) [lwn]
    5. 最好在boot階段就配置好
    6. VMA (Virtual Memory Area) 也要分成 4KB 和 2MB兩組 !!!

 hugetlbfs:
使用user space介面去配置大塊連續的memory !!! 接著要自己做mmap(),不過簡單的方式是使用libhugetlbfs的HUGETLB_MORECORE=yes變數[lwn]。
  • 壞處:
    1. 在Kernel Virtual Machine底下,如果使用動態配置,可能出錯
    2. 性能不好,所以加入許多功能,搞的像是第二個 tmpfs

替代方案:
目前有兩個方案,但2016年的會議仍無法決定誰能進入Linux Mainline

  • Transparent Huge Page (THP):
每個 process都配置2MB page !!!  但當記憶體不足時會自動分裂成4KB pages
    • 好處:
      1. 會自動將2MB page分裂成 4KB pages
      2. user space programmer不用煩惱不同pages間的差異

    • 壞處:
    1. 還在孵,在2016/04/20時,還沒有實際整合到 Linux mainline
THP的競爭對手
    • 好處:
      1.  已經被google server採用將近一年 (截至2016/04),有實戰經驗


沒有留言:

張貼留言