On Wed, 19 Jun 2013, Gilad Ben-Yossef wrote:

> +static void vmstat_update(struct work_struct *w)
> +{
> +     int cpu, this_cpu = smp_processor_id();
> +
> +     if (unlikely(this_cpu == vmstat_monitor_cpu))
> +             for_each_cpu_not(cpu, &vmstat_cpus)
> +                     if (need_vmstat(cpu))
> +                             start_cpu_timer(cpu);
> +
> +     if (likely(refresh_cpu_vm_stats(this_cpu) || (this_cpu == 
> vmstat_monitor_cpu)))
> +             schedule_delayed_work(&__get_cpu_var(vmstat_work),
> +                             round_jiffies_relative(sysctl_stat_interval));
> +     else
> +             cpumask_clear_cpu(this_cpu, &vmstat_cpus);

The clearing of vmstat_cpus could be avoided if this processor is not
running tickless. Frequent updates to vmstat_cpus could become an issue.

>       case CPU_DOWN_PREPARE_FROZEN:
> -             cancel_delayed_work_sync(&per_cpu(vmstat_work, cpu));
> -             per_cpu(vmstat_work, cpu).work.func = NULL;
> +             if (cpumask_test_cpu(cpu, &vmstat_cpus)) {
> +                     cancel_delayed_work_sync(&per_cpu(vmstat_work, cpu));
> +                     per_cpu(vmstat_work, cpu).work.func = NULL;
> +                     if(cpu == vmstat_monitor_cpu) {
> +                             int this_cpu = smp_processor_id();
> +                             vmstat_monitor_cpu = this_cpu;
> +                             if (!cpumask_test_cpu(this_cpu, &vmstat_cpus))
> +                                     start_cpu_timer(this_cpu);
> +                     }
> +             }
>               break;

If the disabling of vmstat is tied into the nohz logic then these portions
are no longer necessary.

> @@ -1237,8 +1299,10 @@ static int __init setup_vmstat(void)
>
>       register_cpu_notifier(&vmstat_notifier);
>
> +     vmstat_monitor_cpu = smp_processor_id();
> +

Drop the vmstat_monitor_cpu and use the dynticks processor.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to