diff options
author | Andrea Arcangeli <aarcange@redhat.com> | 2012-03-23 20:56:34 +0100 |
---|---|---|
committer | Mel Gorman <mgorman@suse.de> | 2012-12-11 14:42:50 +0000 |
commit | 8177a420ed7c16c171ed3c3aec5b0676db38c247 (patch) | |
tree | 9d188c65d68af5a8f77913043ab8689c5530508b | |
parent | 9532fec118d485ea37ab6e3ea372d68cd8b4cd0d (diff) |
mm: numa: Structures for Migrate On Fault per NUMA migration rate limiting
This defines the per-node data used by Migrate On Fault in order to
rate limit the migration. The rate limiting is applied independently
to each destination node.
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: Mel Gorman <mgorman@suse.de>
-rw-r--r-- | include/linux/mmzone.h | 13 | ||||
-rw-r--r-- | mm/page_alloc.c | 5 |
2 files changed, 18 insertions, 0 deletions
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index a23923ba826..28601fdfcdb 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -717,6 +717,19 @@ typedef struct pglist_data { struct task_struct *kswapd; /* Protected by lock_memory_hotplug() */ int kswapd_max_order; enum zone_type classzone_idx; +#ifdef CONFIG_NUMA_BALANCING + /* + * Lock serializing the per destination node AutoNUMA memory + * migration rate limiting data. + */ + spinlock_t numabalancing_migrate_lock; + + /* Rate limiting time interval */ + unsigned long numabalancing_migrate_next_window; + + /* Number of pages migrated during the rate limiting time interval */ + unsigned long numabalancing_migrate_nr_pages; +#endif } pg_data_t; #define node_present_pages(nid) (NODE_DATA(nid)->node_present_pages) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 5953dc2d196..ef025e20dbe 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -4449,6 +4449,11 @@ static void __paginginit free_area_init_core(struct pglist_data *pgdat, int ret; pgdat_resize_init(pgdat); +#ifdef CONFIG_NUMA_BALANCING + spin_lock_init(&pgdat->numabalancing_migrate_lock); + pgdat->numabalancing_migrate_nr_pages = 0; + pgdat->numabalancing_migrate_next_window = jiffies; +#endif init_waitqueue_head(&pgdat->kswapd_wait); init_waitqueue_head(&pgdat->pfmemalloc_wait); pgdat_page_cgroup_init(pgdat); |