Linux大页之复合页
大页的基础是复合页。在使用伙伴系统分配页时,如果指定了 GFP 标志 __GFP_COMP ,那么在分配到页后,会调用 prep_compound_page 将一组连续的页组合成一个复合页。 include/linux/gfp.h #define ___GFP_COMP 0x4000u #define __GFP_COMP ((__force gfp_t)___GFP_COMP) /* Add compound page metadata */ 对于复合页中的每个 page 描述符,都会设置 相应的 标志来让内核是首页还是尾页: include/linux/page-flags.h enum pageflags { #ifdef CONFIG_PAGEFLAGS_EXTENDED PG_head, /* A head page */ PG_tail, /* A tail page */ #else PG_compound, /* A compound page */ #endif PG_reclaim, /* To be reclaimed asap */ } 注意了,对于复合页的标志有两种情况: 1. CONFIG_PAGEFLAGS_EXTENDED 的情况: include/linux/page-flags.h #ifdef CONFIG_PAGEFLAGS_EXTENDED