Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34aa1330 authored by Christoph Lameter's avatar Christoph Lameter Committed by Linus Torvalds
Browse files

[PATCH] zoned vm counters: zone_reclaim: remove /proc/sys/vm/zone_reclaim_interval



The zone_reclaim_interval was necessary because we were not able to determine
how many unmapped pages exist in a zone.  Therefore we had to scan in
intervals to figure out if any pages were unmapped.

With the zoned counters and NR_ANON_PAGES we now know the number of pagecache
pages and the number of mapped pages in a zone.  So we can simply skip the
reclaim if there is an insufficient number of unmapped pages.  We use
SWAP_CLUSTER_MAX as the boundary.

Drop all support for /proc/sys/vm/zone_reclaim_interval.

Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent f3dbd344
Loading
Loading
Loading
Loading
+0 −13
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ Currently, these files are in /proc/sys/vm:
- block_dump
- drop-caches
- zone_reclaim_mode
- zone_reclaim_interval
- panic_on_oom

==============================================================
@@ -167,18 +166,6 @@ use of files and builds up large slab caches. However, the slab
shrink operation is global, may take a long time and free slabs
in all nodes of the system.

================================================================

zone_reclaim_interval:

The time allowed for off node allocations after zone reclaim
has failed to reclaim enough pages to allow a local allocation.

Time is set in seconds and set by default to 30 seconds.

Reduce the interval if undesired off node allocations occur. However, too
frequent scans will have a negative impact onoff node allocation performance.

=============================================================

panic_on_oom
+0 −6
Original line number Diff line number Diff line
@@ -178,12 +178,6 @@ struct zone {

	/* Zone statistics */
	atomic_long_t		vm_stat[NR_VM_ZONE_STAT_ITEMS];
	/*
	 * timestamp (in jiffies) of the last zone reclaim that did not
	 * result in freeing of pages. This is used to avoid repeated scans
	 * if all memory in the zone is in use.
	 */
	unsigned long		last_unsuccessful_zone_reclaim;

	/*
	 * prev_priority holds the scanning priority for this zone.  It is
+0 −1
Original line number Diff line number Diff line
@@ -189,7 +189,6 @@ extern long vm_total_pages;

#ifdef CONFIG_NUMA
extern int zone_reclaim_mode;
extern int zone_reclaim_interval;
extern int zone_reclaim(struct zone *, gfp_t, unsigned int);
#else
#define zone_reclaim_mode 0
+0 −9
Original line number Diff line number Diff line
@@ -933,15 +933,6 @@ static ctl_table vm_table[] = {
		.strategy	= &sysctl_intvec,
		.extra1		= &zero,
	},
	{
		.ctl_name	= VM_ZONE_RECLAIM_INTERVAL,
		.procname	= "zone_reclaim_interval",
		.data		= &zone_reclaim_interval,
		.maxlen		= sizeof(zone_reclaim_interval),
		.mode		= 0644,
		.proc_handler	= &proc_dointvec_jiffies,
		.strategy	= &sysctl_jiffies,
	},
#endif
#ifdef CONFIG_X86_32
	{
+10 −21
Original line number Diff line number Diff line
@@ -1517,11 +1517,6 @@ int zone_reclaim_mode __read_mostly;
#define RECLAIM_SWAP (1<<2)	/* Swap pages out during reclaim */
#define RECLAIM_SLAB (1<<3)	/* Do a global slab shrink if the zone is out of memory */

/*
 * Mininum time between zone reclaim scans
 */
int zone_reclaim_interval __read_mostly = 30*HZ;

/*
 * Priority for ZONE_RECLAIM. This determines the fraction of pages
 * of a node considered for each zone_reclaim. 4 scans 1/16th of
@@ -1587,16 +1582,6 @@ static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)

	p->reclaim_state = NULL;
	current->flags &= ~(PF_MEMALLOC | PF_SWAPWRITE);

	if (nr_reclaimed == 0) {
		/*
		 * We were unable to reclaim enough pages to stay on node.  We
		 * now allow off node accesses for a certain time period before
		 * trying again to reclaim pages from the local zone.
		 */
		zone->last_unsuccessful_zone_reclaim = jiffies;
	}

	return nr_reclaimed >= nr_pages;
}

@@ -1606,13 +1591,17 @@ int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
	int node_id;

	/*
	 * Do not reclaim if there was a recent unsuccessful attempt at zone
	 * reclaim.  In that case we let allocations go off node for the
	 * zone_reclaim_interval.  Otherwise we would scan for each off-node
	 * page allocation.
	 * Do not reclaim if there are not enough reclaimable pages in this
	 * zone that would satify this allocations.
	 *
	 * All unmapped pagecache pages are reclaimable.
	 *
	 * Both counters may be temporarily off a bit so we use
	 * SWAP_CLUSTER_MAX as the boundary. It may also be good to
	 * leave a few frequently used unmapped pagecache pages around.
	 */
	if (time_before(jiffies,
		zone->last_unsuccessful_zone_reclaim + zone_reclaim_interval))
	if (zone_page_state(zone, NR_FILE_PAGES) -
		zone_page_state(zone, NR_FILE_MAPPED) < SWAP_CLUSTER_MAX)
			return 0;

	/*