Loading mm/page_alloc.c +27 −1 Original line number Diff line number Diff line Loading @@ -2224,11 +2224,37 @@ static bool can_steal_fallback(unsigned int order, int start_mt) return false; } static bool boost_eligible(struct zone *z) { unsigned long high_wmark, threshold; unsigned long reclaim_eligible, free_pages; high_wmark = z->_watermark[WMARK_HIGH]; reclaim_eligible = zone_page_state_snapshot(z, NR_ZONE_INACTIVE_FILE) + zone_page_state_snapshot(z, NR_ZONE_ACTIVE_FILE); free_pages = zone_page_state(z, NR_FREE_PAGES); threshold = high_wmark + (2 * mult_frac(high_wmark, watermark_boost_factor, 10000)); /* * Don't boost watermark If we are already low on memory where the * boosting can simply put the watermarks at higher levels for a * longer duration of time and thus the other users relied on the * watermarks are forced to choose unintended decissions. If memory * is so low, kswapd in normal mode should help. */ if (reclaim_eligible < threshold && free_pages < threshold) return false; return true; } static inline void boost_watermark(struct zone *zone) { unsigned long max_boost; if (!watermark_boost_factor) if (!watermark_boost_factor || !boost_eligible(zone)) return; max_boost = mult_frac(zone->_watermark[WMARK_HIGH], Loading Loading
mm/page_alloc.c +27 −1 Original line number Diff line number Diff line Loading @@ -2224,11 +2224,37 @@ static bool can_steal_fallback(unsigned int order, int start_mt) return false; } static bool boost_eligible(struct zone *z) { unsigned long high_wmark, threshold; unsigned long reclaim_eligible, free_pages; high_wmark = z->_watermark[WMARK_HIGH]; reclaim_eligible = zone_page_state_snapshot(z, NR_ZONE_INACTIVE_FILE) + zone_page_state_snapshot(z, NR_ZONE_ACTIVE_FILE); free_pages = zone_page_state(z, NR_FREE_PAGES); threshold = high_wmark + (2 * mult_frac(high_wmark, watermark_boost_factor, 10000)); /* * Don't boost watermark If we are already low on memory where the * boosting can simply put the watermarks at higher levels for a * longer duration of time and thus the other users relied on the * watermarks are forced to choose unintended decissions. If memory * is so low, kswapd in normal mode should help. */ if (reclaim_eligible < threshold && free_pages < threshold) return false; return true; } static inline void boost_watermark(struct zone *zone) { unsigned long max_boost; if (!watermark_boost_factor) if (!watermark_boost_factor || !boost_eligible(zone)) return; max_boost = mult_frac(zone->_watermark[WMARK_HIGH], Loading