Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1198832 > unrolled thread

Re: [PATCH 05/10] nohz: New tick dependency mask

Started byPeter Zijlstra <peterz@infradead.org>
First post2015-08-03 15:00 +0200
Last post2015-08-03 16:20 +0200
Articles 5 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: [PATCH 05/10] nohz: New tick dependency mask Peter Zijlstra <peterz@infradead.org> - 2015-08-03 15:00 +0200
    Re: [PATCH 05/10] nohz: New tick dependency mask Frederic Weisbecker <fweisbec@gmail.com> - 2015-08-03 15:10 +0200
      Re: [PATCH 05/10] nohz: New tick dependency mask Peter Zijlstra <peterz@infradead.org> - 2015-08-03 15:40 +0200
        Re: [PATCH 05/10] nohz: New tick dependency mask Frederic Weisbecker <fweisbec@gmail.com> - 2015-08-03 16:00 +0200
          Re: [PATCH 05/10] nohz: New tick dependency mask Peter Zijlstra <peterz@infradead.org> - 2015-08-03 16:20 +0200

#1198832 — Re: [PATCH 05/10] nohz: New tick dependency mask

FromPeter Zijlstra <peterz@infradead.org>
Date2015-08-03 15:00 +0200
SubjectRe: [PATCH 05/10] nohz: New tick dependency mask
Message-ID<pTnvr-3w4-3@gated-at.bofh.it>
On Thu, Jul 23, 2015 at 06:42:10PM +0200, Frederic Weisbecker wrote:
> +void tick_nohz_set_tick_dependency(enum tick_dependency_bit bit)
> +{
> +	unsigned long prev;
> +
> +	prev = __tick_nohz_set_tick_dependency(bit, &tick_dependency);
> +	if (!prev)
> +		tick_nohz_full_kick_all();
> +}

> +void tick_nohz_set_tick_dependency_cpu(enum tick_dependency_bit bit, int cpu)
> +{
> +	unsigned long prev;
> +	struct tick_sched *ts;
> +
> +	ts = per_cpu_ptr(&tick_cpu_sched, cpu);
> +
> +	prev = __tick_nohz_set_tick_dependency(bit, &ts->tick_dependency);
> +	if (!prev)
> +		tick_nohz_full_kick_cpu(cpu);
> +}

> +/*
> + * Local dependency must have its own flavour due to NMI-safe requirement
> + * on perf.
> + */

That doesn't make any sense:

  tick_nohz_set_tick_dependency_this_cpu();

(shees, you're nowhere near lazy enough, that's insane to type) is
almost identical to:

  tick_nohz_set_tick_dependency_cpu(.cpu = smp_processor_id());

The only difference is a _very_ slight reduction in cost for computing
the per-cpu offset.

> +void tick_nohz_set_tick_dependency_this_cpu(enum tick_dependency_bit bit)
> +{
> +	unsigned long prev;
> +	struct tick_sched *ts;
> +
> +	ts = this_cpu_ptr(&tick_cpu_sched);
> +
> +	prev = __tick_nohz_set_tick_dependency(bit, &ts->tick_dependency);
> +	if (!prev)
> +		tick_nohz_full_kick();
> +}


And on that naming; could we please shorten them, this is really
ridiculous, it has 'tick' in it twice.

What's wrong with:

	tick_nohz_set_dep()
	tick_nohz_set_dep_cpu()

And just kill the this_cpu() version.
--
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/

[toc] | [next] | [standalone]


#1198842

FromFrederic Weisbecker <fweisbec@gmail.com>
Date2015-08-03 15:10 +0200
Message-ID<pTnF9-3WH-23@gated-at.bofh.it>
In reply to#1198832
On Mon, Aug 03, 2015 at 02:57:17PM +0200, Peter Zijlstra wrote:
> On Thu, Jul 23, 2015 at 06:42:10PM +0200, Frederic Weisbecker wrote:
> > +void tick_nohz_set_tick_dependency(enum tick_dependency_bit bit)
> > +{
> > +	unsigned long prev;
> > +
> > +	prev = __tick_nohz_set_tick_dependency(bit, &tick_dependency);
> > +	if (!prev)
> > +		tick_nohz_full_kick_all();
> > +}
> 
> > +void tick_nohz_set_tick_dependency_cpu(enum tick_dependency_bit bit, int cpu)
> > +{
> > +	unsigned long prev;
> > +	struct tick_sched *ts;
> > +
> > +	ts = per_cpu_ptr(&tick_cpu_sched, cpu);
> > +
> > +	prev = __tick_nohz_set_tick_dependency(bit, &ts->tick_dependency);
> > +	if (!prev)
> > +		tick_nohz_full_kick_cpu(cpu);
> > +}
> 
> > +/*
> > + * Local dependency must have its own flavour due to NMI-safe requirement
> > + * on perf.
> > + */
> 
> That doesn't make any sense:
> 
>   tick_nohz_set_tick_dependency_this_cpu();
> 
> (shees, you're nowhere near lazy enough, that's insane to type) is
> almost identical to:
> 
>   tick_nohz_set_tick_dependency_cpu(.cpu = smp_processor_id());
> 
> The only difference is a _very_ slight reduction in cost for computing
> the per-cpu offset.

But the local one must be NMI-safe. Now I can do:

    if (cpu == smp_processor_id())
        tick_nohz_full_kick() // NMI-safe
    else
        tick_nohz_full_kick_cpu(cpu); // not NMI-safe.

> 
> > +void tick_nohz_set_tick_dependency_this_cpu(enum tick_dependency_bit bit)
> > +{
> > +	unsigned long prev;
> > +	struct tick_sched *ts;
> > +
> > +	ts = this_cpu_ptr(&tick_cpu_sched);
> > +
> > +	prev = __tick_nohz_set_tick_dependency(bit, &ts->tick_dependency);
> > +	if (!prev)
> > +		tick_nohz_full_kick();
> > +}
> 
> 
> And on that naming; could we please shorten them, this is really
> ridiculous, it has 'tick' in it twice.
> 
> What's wrong with:
> 
> 	tick_nohz_set_dep()
> 	tick_nohz_set_dep_cpu()

Right.

Thanks.
--
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/

[toc] | [prev] | [next] | [standalone]


#1198854

FromPeter Zijlstra <peterz@infradead.org>
Date2015-08-03 15:40 +0200
Message-ID<pTo8a-4v1-15@gated-at.bofh.it>
In reply to#1198842
On Mon, Aug 03, 2015 at 03:09:39PM +0200, Frederic Weisbecker wrote:

> > That doesn't make any sense:
> > 
> >   tick_nohz_set_tick_dependency_this_cpu();
> > 
> > (shees, you're nowhere near lazy enough, that's insane to type) is
> > almost identical to:
> > 
> >   tick_nohz_set_tick_dependency_cpu(.cpu = smp_processor_id());
> > 
> > The only difference is a _very_ slight reduction in cost for computing
> > the per-cpu offset.
> 
> But the local one must be NMI-safe. Now I can do:
> 
>     if (cpu == smp_processor_id())
>         tick_nohz_full_kick() // NMI-safe
>     else
>         tick_nohz_full_kick_cpu(cpu); // not NMI-safe.

Urgh, I missed that. But yes, I suppose that's ok seeing how we result
in a smaller interface.

I was going to say that with a bit of luck GCC could optimize it, but
its not inline so no it cannot.
--
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/

[toc] | [prev] | [next] | [standalone]


#1198863

FromFrederic Weisbecker <fweisbec@gmail.com>
Date2015-08-03 16:00 +0200
Message-ID<pTorw-4RW-3@gated-at.bofh.it>
In reply to#1198854
On Mon, Aug 03, 2015 at 03:29:58PM +0200, Peter Zijlstra wrote:
> On Mon, Aug 03, 2015 at 03:09:39PM +0200, Frederic Weisbecker wrote:
> 
> > > That doesn't make any sense:
> > > 
> > >   tick_nohz_set_tick_dependency_this_cpu();
> > > 
> > > (shees, you're nowhere near lazy enough, that's insane to type) is
> > > almost identical to:
> > > 
> > >   tick_nohz_set_tick_dependency_cpu(.cpu = smp_processor_id());
> > > 
> > > The only difference is a _very_ slight reduction in cost for computing
> > > the per-cpu offset.
> > 
> > But the local one must be NMI-safe. Now I can do:
> > 
> >     if (cpu == smp_processor_id())
> >         tick_nohz_full_kick() // NMI-safe
> >     else
> >         tick_nohz_full_kick_cpu(cpu); // not NMI-safe.
> 
> Urgh, I missed that. But yes, I suppose that's ok seeing how we result
> in a smaller interface.
> 
> I was going to say that with a bit of luck GCC could optimize it, but
> its not inline so no it cannot.

I might inline all these set_dep() things to introduce static keys on these
APIs.. But the kick itself will remain real calls.

Ok how about tick_nohz_set_dep_nmi() so that we know exactly what's the purpose
here. Still a long function name but it's clear.
--
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/

[toc] | [prev] | [next] | [standalone]


#1198885

FromPeter Zijlstra <peterz@infradead.org>
Date2015-08-03 16:20 +0200
Message-ID<pToKS-5tZ-11@gated-at.bofh.it>
In reply to#1198863
On Mon, Aug 03, 2015 at 03:55:34PM +0200, Frederic Weisbecker wrote:
> On Mon, Aug 03, 2015 at 03:29:58PM +0200, Peter Zijlstra wrote:
> > On Mon, Aug 03, 2015 at 03:09:39PM +0200, Frederic Weisbecker wrote:
> > 
> > > > That doesn't make any sense:
> > > > 
> > > >   tick_nohz_set_tick_dependency_this_cpu();
> > > > 
> > > > (shees, you're nowhere near lazy enough, that's insane to type) is
> > > > almost identical to:
> > > > 
> > > >   tick_nohz_set_tick_dependency_cpu(.cpu = smp_processor_id());
> > > > 
> > > > The only difference is a _very_ slight reduction in cost for computing
> > > > the per-cpu offset.
> > > 
> > > But the local one must be NMI-safe. Now I can do:
> > > 
> > >     if (cpu == smp_processor_id())
> > >         tick_nohz_full_kick() // NMI-safe
> > >     else
> > >         tick_nohz_full_kick_cpu(cpu); // not NMI-safe.
> > 
> > Urgh, I missed that. But yes, I suppose that's ok seeing how we result
> > in a smaller interface.
> > 
> > I was going to say that with a bit of luck GCC could optimize it, but
> > its not inline so no it cannot.
> 
> I might inline all these set_dep() things to introduce static keys on these
> APIs.. But the kick itself will remain real calls.

Sure, but first check if GCC will optimize:

static inline void foo(int cpu)
{
	if (cpu == smp_processor_id())
		bar1();
	else
		bar2();
}


	foo(smp_processor_id());

Into a direct call to bar1(), if not see if we can make it so. If not,
there's no point in inlining at all.

> Ok how about tick_nohz_set_dep_nmi() so that we know exactly what's the purpose
> here. Still a long function name but it's clear.

Only for the set, if you really care about it. The alternative is
WARN_ON(in_nmi() && cpu != smp_processor_id()) or somesuch.
--
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/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web