You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux内核5.16中unmap_and_move_huge_page()的技术疑问

Linux内核5.16中unmap_and_move_huge_page()的大页拆分行为分析

在Linux内核的migrate_pages()函数中,会针对大页调用unmap_and_move_huge_page()进行迁移,核心分支代码如下:

int migrate_pages(struct list_head *from, new_page_t get_new_page,
        free_page_t put_new_page, unsigned long private,
        enum migrate_mode mode, int reason, unsigned int *ret_succeeded)
{
    .......
  if (PageHuge(page))
    rc = unmap_and_move_huge_page(get_new_page,put_new_page, private, page,
                  pass > 2, mode, reason, &ret_pages);
  else
    rc = unmap_and_move(get_new_page, put_new_page, private, page, pass > 2, mode,
                  reason, &ret_pages);
       ......
}

针对该逻辑,有以下两个问题及对应解答:

问题1:unmap_and_move_huge_page()是否会将大页拆分为小页?

在Linux内核5.16版本中,unmap_and_move_huge_page()会在特定条件下将大页拆分为小页。当大页迁移尝试失败(例如无法分配到连续的物理大页作为目标载体),且当前迁移模式允许降级处理时,该函数会触发大页拆分流程,将透明大页(THP)分解为普通的4KB小页后,再通过常规迁移逻辑完成后续操作。

问题2:若该函数会拆分大页,它调用了哪个函数?

负责执行大页拆分的函数是split_huge_page_to_list()。在unmap_and_move_huge_page()的实现中,当大页迁移失败且满足拆分条件时,会调用该函数将大页拆分为多个独立的小页,随后这些小页会被加入到迁移队列中,转而通过unmap_and_move()函数完成单页迁移。

内容的提问来源于stack exchange,提问作者user19629747

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:05:19