Index: linux-2.6.19-rc4-mm2/include/linux/vmstat.h =================================================================== --- linux-2.6.19-rc4-mm2.orig/include/linux/vmstat.h 2006-11-02 14:19:35.000000000 -0600 +++ linux-2.6.19-rc4-mm2/include/linux/vmstat.h 2006-11-07 22:13:27.200831591 -0600 @@ -47,6 +47,8 @@ enum vm_event_item { PGPGIN, PGPGOUT, PS FOR_ALL_ZONES(PGSCAN_DIRECT), PGINODESTEAL, SLABS_SCANNED, KSWAPD_STEAL, KSWAPD_INODESTEAL, PAGEOUTRUN, ALLOCSTALL, PGROTATED, + SCHED_TICK_NO_BALANCE, SCHED_TICK_BALANCE, SCHED_BALANCE_TASKLET, + SCHED_LOAD_BALANCE, SCHED_TICK_BALANCE_RUNNING, NR_VM_EVENT_ITEMS }; Index: linux-2.6.19-rc4-mm2/kernel/sched.c =================================================================== --- linux-2.6.19-rc4-mm2.orig/kernel/sched.c 2006-11-07 21:57:23.000000000 -0600 +++ linux-2.6.19-rc4-mm2/kernel/sched.c 2006-11-08 00:43:25.380231861 -0600 @@ -2880,6 +2880,8 @@ static void rebalance_domains(unsigned l /* Earliest time when we have to call rebalance_domains again */ unsigned long next_balance = jiffies + 60*HZ; + __count_vm_event(SCHED_BALANCE_TASKLET); + for_each_domain(this_cpu, sd) { if (!(sd->flags & SD_LOAD_BALANCE)) continue; @@ -2894,6 +2896,7 @@ static void rebalance_domains(unsigned l interval = 1; if (time_after_eq(jiffies, sd->last_balance + interval)) { + __count_vm_event(SCHED_LOAD_BALANCE); if (load_balance(this_cpu, this_rq, sd, idle)) { /* * We've pulled tasks over so either we're no @@ -3170,8 +3173,15 @@ void scheduler_tick(void) task_running_tick(rq, p); #ifdef CONFIG_SMP update_load(rq); - if (time_after_eq(jiffies, rq->next_balance)) + if (time_after_eq(jiffies, rq->next_balance)) { + if (test_bit(TASKLET_STATE_SCHED, &rebalance.state)) + __count_vm_event(SCHED_TICK_BALANCE_RUNNING); + else + __count_vm_event(SCHED_TICK_BALANCE); + tasklet_schedule(&rebalance); + } else + __count_vm_event(SCHED_TICK_NO_BALANCE); #endif } Index: linux-2.6.19-rc4-mm2/mm/vmstat.c =================================================================== --- linux-2.6.19-rc4-mm2.orig/mm/vmstat.c 2006-11-07 16:24:39.000000000 -0600 +++ linux-2.6.19-rc4-mm2/mm/vmstat.c 2006-11-07 22:13:42.453097142 -0600 @@ -509,6 +509,11 @@ static char *vmstat_text[] = { "allocstall", "pgrotated", + "sched_tick_no_balance", + "sched_tick_balance", + "sched_balance_tasklet", + "sched_load_balance", + "sched_tick_balance_running", #endif };