madvise
调用 madivise(MADV_PAGEOUT)
的流程
madivise(MADV_PAGEOUT)
的流程在 madvise_cold_or_pageout_pte_range() 根据不同的场景走不同分支,下面分为三个 场景进行分析,如下:
普通的 4KB swapout 到 swapfile
THP 的 2MB swapout 到 swapfile
small_size THP 的 64KB swapout 到 swapfile
将普通的 4KB swapout 到 swapfile 的流程
调用 add_to_swap() 申请 swap space 并且将 folio 与此 swap space 绑定在一起, 再调用 pageout() 将 folio 回写到刚刚申请的 swap space 对应的 swapfile 位置。
将 THP 的 2MB swapout 到 swapfile 的流程
第一次调用 add_to_swap() 申请 swap space,失败,调用 split_folio_to_list() 将 2MB 划分为 512 个 4KB 页。
因为现在都是 4KB 大小的页,所以跑普通的 4KB swapout 到 swapfile 的流程。
(同上)调用 add_to_swap() 申请 swap space 并且将 folio 与此 swap space 绑定在一起, 再调用 pageout() 将 folio 回写到刚刚申请的 swap space 对应的 swapfile 位置。
将 small_sized THP 的 64KB swapout 到 swapfile 的流程
Last updated
Was this helpful?