Messages in this thread Patch in this message | | | Date | Wed, 14 Mar 2012 08:52:17 +0200 | Subject | [PATCH] mm: fix vmstat_update to keep scheduling itself on all cores | From | Gilad Ben-Yossef <> |
| |
We set up per-cpu work structures for vmstat and schedule them on each cpu when they go online only to re-schedule them on the general work queue when they first run.
This doesn't seem right - how do we ever guarantee that vmstat_update runs on all cpus? Either I've missed something or our vm stats are off and per-cpu pages are not drained as frequently as we think they are.
Fix it by re-scheduling the work item on the same cpu it first ran on.
Tested on x86 on 8 way SMP VM.
Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> CC: Andrew Morton <akpm@linux-foundation.org> CC: Mel Gorman <mel@csn.ul.ie> CC: Christoph Lameter <cl@linux.com> CC: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> CC: Andi Kleen <ak@linux.intel.com> CC: linux-mm@kvack.org ---
diff --git a/mm/vmstat.c b/mm/vmstat.c index f600557..b396044 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1144,8 +1144,10 @@ int sysctl_stat_interval __read_mostly = HZ;
static void vmstat_update(struct work_struct *w) { - refresh_cpu_vm_stats(smp_processor_id()); - schedule_delayed_work(&__get_cpu_var(vmstat_work), + int cpu = smp_processor_id(); + + refresh_cpu_vm_stats(cpu); + schedule_delayed_work_on(cpu, &__get_cpu_var(vmstat_work), round_jiffies_relative(sysctl_stat_interval)); }
-- Gilad Ben-Yossef Chief Coffee Drinker gilad@benyossef.com Israel Cell: +972-52-8260388 US Cell: +1-973-8260388 http://benyossef.com
"If you take a class in large-scale robotics, can you end up in a situation where the homework eats your dog?" -- Jean-Baptiste Queru -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |