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@xxxxxxxxxxxxx> CC: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> CC: Mel Gorman <mel@xxxxxxxxx> CC: Christoph Lameter <cl@xxxxxxxxx> CC: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> CC: Andi Kleen <ak@xxxxxxxxxxxxxxx> CC: linux-mm@xxxxxxxxx --- 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@xxxxxxxxxxxxx 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, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href