unsigned long nr_free_buffer_pages(void)函数用于计算在ZONE_DMA和ZONE_NORMAL 可以申请
到的空闲page,也就是除去高端内存外可以申请到空闲page
其源码分析如下:
unsigned long nr_free_buffer_pages(void)
{
#这里的GFP_USER 表示可以给用户使用的页,包含空闲和可以回收的页
return nr_free_zone_pages(gfp_zone(GFP_USER));
}
static unsigned long nr_free_zone_pages(int offset)
{
struct zoneref *z;
struct zone *zone;
/* Just pick one node, since fallback list is circular */
unsigned long sum = 0;
#根据当前cpu的numa id 得到系统中整个zonelist
struct zonelist *zonelist = node_zonelist(numa_node_id(), GFP_KERNEL);
#遍历zonelist
for_each_zone_zonelist(zone, z, zonelist, offset) {
#这个zone 所有可以申请到的页
unsigned long size = zone->managed_pages;
#这里表示预留给系统最多的页
unsigned long high = high_wmark_pages(zone);
#可以申请到的页减去系统预留的页,就表示用户可以申请到的总共的页
if (size > high)
sum += size - high;
}
return sum;
}
内存管理API之nr_free_buffer_pages
最新推荐文章于 2024-07-21 01:31:58 发布