Skip to the content.

khugepaged

基本接口

mm/transparent_hugepage/khugepaged🔒
🧀  grep "" -r
defrag:1
max_ptes_shared:256
scan_sleep_millisecs:10000
max_ptes_none:511
pages_to_scan:4096
max_ptes_swap:64
alloc_sleep_millisecs:60000
pages_collapsed:52938
full_scans:33

khugepaged

kcompactd 用来 defrag,而 khugepaged 来扫描,确定到底那些已经映射的可以设置为 page table

  1. /sys/kernel/mm/transparent_hugepage/enabled => start_stop_khugepaged => khugepaged => khugepaged_do_scan => khugepaged_scan_mm_slot => khugepaged_scan_pmd
  2. in khugepaged_scan_pmd, we will check pages one by one, if enough base pages are found, call collapse_huge_page to merge base page to huge page
  3. collapse_huge_page = khugepaged_alloc_page + __collapse_huge_page_copy + many initialization for huge page + __collapse_huge_page_isolate (free base page)
#0  prep_transhuge_page (page=0xffffea000d998000) at mm/huge_memory.c:582
#1  0xffffffff81394907 in hpage_collapse_alloc_page (nmask=0xffffc9000234fe28, node=<optimized out>, gfp=1844426, hpage=0xffffc9000234fd20) at mm/khugepaged.c:808
#2  alloc_charge_hpage (hpage=hpage@entry=0xffffc9000234fd20, mm=mm@entry=0xffff888341a3bdc0, cc=cc@entry=0xffffffff82d75980 <khugepaged_collapse_control>) at mm/khugepaged.c:957
#3  0xffffffff81394c3b in collapse_huge_page (mm=mm@entry=0xffff888341a3bdc0, address=address@entry=140576452247552, referenced=referenced@entry=512, unmapped=unmapped@entry=0, cc=cc@entry=0xffffffff82d75980 <khugepaged_collapse_control>) at mm/khugepaged.c:989
#4  0xffffffff813963e9 in hpage_collapse_scan_pmd (mm=mm@entry=0xffff888341a3bdc0, vma=vma@entry=0xffff8883d8e1c130, address=140576452247552, mmap_locked=mmap_locked@entry=0xffffc9000234fe97, cc=cc@entry=0xffffffff82d75980 <khugepaged_collapse_control>) at mm/khugepaged.c:1275
#5  0xffffffff81398edb in khugepaged_scan_mm_slot (cc=0xffffffff82d75980 <khugepaged_collapse_control>, result=<synthetic pointer>, pages=4096) at mm/khugepaged.c:2316
#6  khugepaged_do_scan (cc=0xffffffff82d75980 <khugepaged_collapse_control>) at mm/khugepaged.c:2422
#7  khugepaged (none=<optimized out>) at mm/khugepaged.c:2478
#8  0xffffffff811556a4 in kthread (_create=0xffff88834128b300) at kernel/kthread.c:376
#9  0xffffffff81002659 in ret_from_fork () at arch/x86/entry/entry_64.S:308
#10 0x0000000000000000 in ?? ()

触发方法

核心参数

基本流程

khugepaged 和 kcompactd 的区别

从 vmstat 看 khugepaged

🧀  cat /proc/vmstat | grep khugepaged
pgsteal_khugepaged 6758901
pgdemote_khugepaged 0
pgscan_khugepaged 6948435

居然存在 pgscan 和 pgsteal

这个说明了 thp 会导致系统中内存使用增多,shrink_inactive_list

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。