提交 34aa1330 编写于 作者: C Christoph Lameter 提交者: Linus Torvalds

[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: NChristoph Lameter <clameter@sgi.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 f3dbd344
...@@ -28,7 +28,6 @@ Currently, these files are in /proc/sys/vm: ...@@ -28,7 +28,6 @@ Currently, these files are in /proc/sys/vm:
- block_dump - block_dump
- drop-caches - drop-caches
- zone_reclaim_mode - zone_reclaim_mode
- zone_reclaim_interval
- panic_on_oom - panic_on_oom
============================================================== ==============================================================
...@@ -167,18 +166,6 @@ use of files and builds up large slab caches. However, the slab ...@@ -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 shrink operation is global, may take a long time and free slabs
in all nodes of the system. 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 panic_on_oom
......
...@@ -178,12 +178,6 @@ struct zone { ...@@ -178,12 +178,6 @@ struct zone {
/* Zone statistics */ /* Zone statistics */
atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS]; 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 * prev_priority holds the scanning priority for this zone. It is
......
...@@ -189,7 +189,6 @@ extern long vm_total_pages; ...@@ -189,7 +189,6 @@ extern long vm_total_pages;
#ifdef CONFIG_NUMA #ifdef CONFIG_NUMA
extern int zone_reclaim_mode; extern int zone_reclaim_mode;
extern int zone_reclaim_interval;
extern int zone_reclaim(struct zone *, gfp_t, unsigned int); extern int zone_reclaim(struct zone *, gfp_t, unsigned int);
#else #else
#define zone_reclaim_mode 0 #define zone_reclaim_mode 0
......
...@@ -933,15 +933,6 @@ static ctl_table vm_table[] = { ...@@ -933,15 +933,6 @@ static ctl_table vm_table[] = {
.strategy = &sysctl_intvec, .strategy = &sysctl_intvec,
.extra1 = &zero, .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 #endif
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
{ {
......
...@@ -1517,11 +1517,6 @@ int zone_reclaim_mode __read_mostly; ...@@ -1517,11 +1517,6 @@ int zone_reclaim_mode __read_mostly;
#define RECLAIM_SWAP (1<<2) /* Swap pages out during reclaim */ #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 */ #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 * Priority for ZONE_RECLAIM. This determines the fraction of pages
* of a node considered for each zone_reclaim. 4 scans 1/16th of * 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) ...@@ -1587,16 +1582,6 @@ static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
p->reclaim_state = NULL; p->reclaim_state = NULL;
current->flags &= ~(PF_MEMALLOC | PF_SWAPWRITE); 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; return nr_reclaimed >= nr_pages;
} }
...@@ -1606,13 +1591,17 @@ int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) ...@@ -1606,13 +1591,17 @@ int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
int node_id; int node_id;
/* /*
* Do not reclaim if there was a recent unsuccessful attempt at zone * Do not reclaim if there are not enough reclaimable pages in this
* reclaim. In that case we let allocations go off node for the * zone that would satify this allocations.
* zone_reclaim_interval. Otherwise we would scan for each off-node *
* page allocation. * 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, if (zone_page_state(zone, NR_FILE_PAGES) -
zone->last_unsuccessful_zone_reclaim + zone_reclaim_interval)) zone_page_state(zone, NR_FILE_MAPPED) < SWAP_CLUSTER_MAX)
return 0; return 0;
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册