Re: [PATCH v2 1/2] mm: make vmstat_update periodic run conditional

From: Christoph Lameter
Date: Thu Jun 20 2013 - 10:06:55 EST


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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/