v9
2026-08-04
优化 ZONE_DEVICE memmap 初始化 · v9
v9优化ZONE_DEVICE memmap初始化,rebind耗时降约60%;维护者称审查未完成,计划排入下个RC周期。
原始补丁链接
子 Patch(8)
1/8
mm: fix stale ZONE_DEVICE refcount comment
更新 __init_zone_device_page() 注释:MEMORY_DEVICE_GENERIC 释放时恢复 refcount=1,其余 ZONE_DEVICE 类型初始为 0 并在分配/驱动下发时抬高。
2/8
mm: factor zone-device page init helpers out of __init_zone_device_page
重构 memmap_init_zone_device(),抽出 refcount 判断和通用初始化到新 helper,慢路径行为不变,为后续复用。
3/8
mm: add a set_page_section_from_pfn() helper
新增 set_page_section_from_pfn() 封装 set_page_section(pfn_to_section_nr(pfn)) 及 SECTION_IN_PAGE_FLAGS 条件,set_page_links() 改用,避免各调用点 open-code。
4/8
mm: add a template-based fast path for zone-device page init
为 ZONE_DEVICE head page 初始化加模板快速路径:先慢路径生成模板,刷新 PFN 相关字段后 memcpy 到各页;page_ref_set 不再观察这些初始化赋值。
5/8
mm: extend the template fast path to zone-device compound tails
把模板快速路径扩展到 compound tail:分别建 head/tail 模板,tail 总是 refcount=0,复用 tail 模板填充 pfns_per_compound>1 的尾部页。
6/8
string: introduce memcpy_nontemporal()
新增 memcpy_nontemporal():x86 映射到 memcpy_flushcache(),通用回退为 memcpy 宏以保持 FORTIFY;仅拷贝原语,不隐含 drain/barrier,供 ZONE_DEVICE 模板拷贝用。
7/8
mm: use memcpy_nontemporal() in zone-device template copies
ZONE_DEVICE 模板快路径改用 memcpy_nontemporal(),利用写一次模式减少缓存污染与 write-allocate;不在此处加 KASAN/KMSAN 特判。
8/8
x86/string: extend memcpy_flushcache() fixed-size fastpaths
扩展 memcpy_flushcache() 固定大小内联路径至 96 字节,覆盖 struct page 的 64/80/96 字节拷贝,避免落入 __memcpy_flushcache(),加速 ZONE_DEVICE 每页模板拷贝。