mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	mm: don't wait on congested zones in balance_pgdat()
From: Zlatko Calusic <zlatko.calusic@iskon.hr>
Commit 92df3a723f ("mm: vmscan: throttle reclaim if encountering too
many dirty pages under writeback") introduced waiting on congested zones
based on a sane algorithm in shrink_inactive_list().
What this means is that there's no more need for throttling and
additional heuristics in balance_pgdat().  So, let's remove it and tidy
up the code.
Signed-off-by: Zlatko Calusic <zlatko.calusic@iskon.hr>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Minchan Kim <minchan.kim@gmail.com>
Cc: Johannes Weiner <jweiner@redhat.com>
Cc: Rik van Riel <riel@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
			
			
This commit is contained in:
		
							parent
							
								
									4db0e950c5
								
							
						
					
					
						commit
						258401a60c
					
				
					 3 changed files with 1 additions and 30 deletions
				
			
		| 
						 | 
				
			
			@ -36,7 +36,6 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
 | 
			
		|||
#endif
 | 
			
		||||
		PGINODESTEAL, SLABS_SCANNED, KSWAPD_INODESTEAL,
 | 
			
		||||
		KSWAPD_LOW_WMARK_HIT_QUICKLY, KSWAPD_HIGH_WMARK_HIT_QUICKLY,
 | 
			
		||||
		KSWAPD_SKIP_CONGESTION_WAIT,
 | 
			
		||||
		PAGEOUTRUN, ALLOCSTALL, PGROTATED,
 | 
			
		||||
#ifdef CONFIG_NUMA_BALANCING
 | 
			
		||||
		NUMA_PTE_UPDATES,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										29
									
								
								mm/vmscan.c
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								mm/vmscan.c
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -2617,7 +2617,6 @@ static unsigned long balance_pgdat(pg_data_t *pgdat, int order,
 | 
			
		|||
							int *classzone_idx)
 | 
			
		||||
{
 | 
			
		||||
	bool pgdat_is_balanced = false;
 | 
			
		||||
	struct zone *unbalanced_zone;
 | 
			
		||||
	int i;
 | 
			
		||||
	int end_zone = 0;	/* Inclusive.  0 = ZONE_DMA */
 | 
			
		||||
	unsigned long total_scanned;
 | 
			
		||||
| 
						 | 
				
			
			@ -2648,9 +2647,6 @@ static unsigned long balance_pgdat(pg_data_t *pgdat, int order,
 | 
			
		|||
 | 
			
		||||
	do {
 | 
			
		||||
		unsigned long lru_pages = 0;
 | 
			
		||||
		int has_under_min_watermark_zone = 0;
 | 
			
		||||
 | 
			
		||||
		unbalanced_zone = NULL;
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * Scan in the highmem->dma direction for the highest
 | 
			
		||||
| 
						 | 
				
			
			@ -2790,17 +2786,7 @@ static unsigned long balance_pgdat(pg_data_t *pgdat, int order,
 | 
			
		|||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (!zone_balanced(zone, testorder, 0, end_zone)) {
 | 
			
		||||
				unbalanced_zone = zone;
 | 
			
		||||
				/*
 | 
			
		||||
				 * We are still under min water mark.  This
 | 
			
		||||
				 * means that we have a GFP_ATOMIC allocation
 | 
			
		||||
				 * failure risk. Hurry up!
 | 
			
		||||
				 */
 | 
			
		||||
				if (!zone_watermark_ok_safe(zone, order,
 | 
			
		||||
					    min_wmark_pages(zone), end_zone, 0))
 | 
			
		||||
					has_under_min_watermark_zone = 1;
 | 
			
		||||
			} else {
 | 
			
		||||
			if (zone_balanced(zone, testorder, 0, end_zone))
 | 
			
		||||
				/*
 | 
			
		||||
				 * If a zone reaches its high watermark,
 | 
			
		||||
				 * consider it to be no longer congested. It's
 | 
			
		||||
| 
						 | 
				
			
			@ -2811,8 +2797,6 @@ static unsigned long balance_pgdat(pg_data_t *pgdat, int order,
 | 
			
		|||
				zone_clear_flag(zone, ZONE_CONGESTED);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * If the low watermark is met there is no need for processes
 | 
			
		||||
		 * to be throttled on pfmemalloc_wait as they should not be
 | 
			
		||||
| 
						 | 
				
			
			@ -2827,17 +2811,6 @@ static unsigned long balance_pgdat(pg_data_t *pgdat, int order,
 | 
			
		|||
			break;		/* kswapd: all done */
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * OK, kswapd is getting into trouble.  Take a nap, then take
 | 
			
		||||
		 * another pass across the zones.
 | 
			
		||||
		 */
 | 
			
		||||
		if (total_scanned && (sc.priority < DEF_PRIORITY - 2)) {
 | 
			
		||||
			if (has_under_min_watermark_zone)
 | 
			
		||||
				count_vm_event(KSWAPD_SKIP_CONGESTION_WAIT);
 | 
			
		||||
			else if (unbalanced_zone)
 | 
			
		||||
				wait_iff_congested(unbalanced_zone, BLK_RW_ASYNC, HZ/10);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * We do this so kswapd doesn't build up large priorities for
 | 
			
		||||
		 * example when it is freeing in parallel with allocators. It
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -770,7 +770,6 @@ const char * const vmstat_text[] = {
 | 
			
		|||
	"kswapd_inodesteal",
 | 
			
		||||
	"kswapd_low_wmark_hit_quickly",
 | 
			
		||||
	"kswapd_high_wmark_hit_quickly",
 | 
			
		||||
	"kswapd_skip_congestion_wait",
 | 
			
		||||
	"pageoutrun",
 | 
			
		||||
	"allocstall",
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue