__alloc_pages 是内核伙伴分配算法的核心分配器,
alloc_pages->alloc_pages_node->__alloc_pages->__alloc_pages_nodemask->
struct page *
__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
struct zonelist *zonelist, nodemask_t *nodemask)
{
......
/* First allocation attempt */
page = get_page_from_freelist(gfp_mask|__GFP_HARDWALL, nodemask, order,
zonelist, high_zoneidx, ALLOC_WMARK_LOW|ALLOC_CPUSET,
preferred_zone, migratetype); ------先尝试从伙伴空闲内存链表中进行分配,失败后调用_alloc_pages_slowpath 进行内存回收。
if (unlikely(!page))