本文共 1137 字,大约阅读时间需要 3 分钟。
/*
* kswapd shrinks the zone by the number ofpages required to reach
* the high watermark.
*
* Returns true if kswapd scanned at least therequested number of pages to
* reclaim or if the lack of progress was dueto pages under writeback.
* This is used to determine if the scanningpriority needs to be raised.
*/
static bool kswapd_shrink_zone(struct zone *zone,intclasszone_idx,struct
scan_control*sc)
{
unsigned long balance_gap;
bool lowmem_pressure;
/* Reclaim above the high watermark. */
sc->nr_to_reclaim =max(SWAP_CLUSTER_MAX, high_wmark_pages(zone));
balance_gap = min(low_wmark_pages(zone),
DIV_ROUND_UP(zone->managed_pages,
KSWAPD_ZONE_BALANCE_GAP_RATIO));
lowmem_pressure =(buffer_heads_over_limit && is_highmem(zone));
if (!lowmem_pressure && zone_balanced(zone,sc->order, false,balance_gap,
classzone_idx))
return true;
shrink_zone(zone, sc,zone_idx(zone) == classzone_idx);
clear_bit(ZONE_WRITEBACK,&zone->flags);
if (zone_reclaimable(zone) &&zone_balanced(zone, sc->order, false, 0,
classzone_idx)){
clear_bit(ZONE_CONGESTED,&zone->flags);
clear_bit(ZONE_DIRTY,&zone->flags);
}
return sc->nr_scanned >=sc->nr_to_reclaim;
}
转载地址:http://rxqti.baihongyu.com/