From: Frederic Weisbecker <frederic@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
LKML <linux-kernel@vger.kernel.org>,
Jacek Anaszewski <jacek.anaszewski@gmail.com>,
Wanpeng Li <wanpengli@tencent.com>,
"Rafael J . Wysocki" <rjw@rjwysocki.net>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Rik van Riel <riel@surriel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Yauheni Kaliuta <yauheni.kaliuta@redhat.com>,
Viresh Kumar <viresh.kumar@linaro.org>,
Pavel Machek <pavel@ucw.cz>
Subject: Re: [PATCH 2/6] sched/vtime: Bring all-in-one kcpustat accessor for vtime fields
Date: Wed, 20 Nov 2019 16:00:17 +0100 [thread overview]
Message-ID: <20191120150016.GA3383@lenoir> (raw)
In-Reply-To: <20191120120449.GB89662@gmail.com>
On Wed, Nov 20, 2019 at 01:04:49PM +0100, Ingo Molnar wrote:
> > +static int vtime_state_check(struct vtime *vtime, int cpu)
> > +{
> > + /*
> > + * We raced against context switch, fetch the
> > + * kcpustat task again.
> > + */
>
> s/against context switch
> /against a context switch
Ok.
>
> > +void kcpustat_cputime(struct kernel_cpustat *kcpustat, int cpu,
> > + u64 *user, u64 *nice, u64 *system,
> > + u64 *guest, u64 *guest_nice)
> > +{
> > + u64 *cpustat = kcpustat->cpustat;
> > + struct rq *rq;
> > + int err;
> > +
> > + if (!vtime_accounting_enabled_cpu(cpu)) {
> > + kcpustat_cputime_raw(cpustat, user, nice,
> > + system, guest, guest_nice);
> > + return;
> > + }
> > +
> > + rq = cpu_rq(cpu);
> > +
> > + for (;;) {
> > + struct task_struct *curr;
> > +
> > + rcu_read_lock();
> > + curr = rcu_dereference(rq->curr);
> > + if (WARN_ON_ONCE(!curr)) {
> > + rcu_read_unlock();
> > + kcpustat_cputime_raw(cpustat, user, nice,
> > + system, guest, guest_nice);
> > + return;
> > + }
> > +
> > + err = kcpustat_cputime_vtime(cpustat, curr, cpu, user,
> > + nice, system, guest, guest_nice);
> > + rcu_read_unlock();
> > +
> > + if (!err)
> > + return;
> > +
> > + cpu_relax();
> > + }
> > +}
> > +EXPORT_SYMBOL_GPL(kcpustat_cputime);
>
> I'm wondering whether it's worth introducing a helper structure for this
> train of parameters: user, nice, system, guest, guest_nice?
>
> We also have similar constructs in other places:
>
> + u64 cpu_user, cpu_nice, cpu_sys, cpu_guest, cpu_guest_nice;
>
> But more broadly, what do we gain by passing along a quartet of pointers,
> while we could also just use a 'struct kernel_cpustat' and store the
> values there naturally?
>
> Yes, it's larger, because it also has 5 other fields - but we lose much
> of the space savings due to always passing along the 4 pointers already.
>
> So I really think the parameter passing should be organized better here.
Yeah I've been thinking about that too but I was worried about the stack use.
It's probably not a big worry eventually. I'll do that for the next series.
> This probably affects similar cpustat functions as well.
Only this one fortunately :-)
Thanks.
next prev parent reply other threads:[~2019-11-20 15:00 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-19 23:22 [PATCH 0/6] sched/nohz: Make the rest of kcpustat vtime aware v2 Frederic Weisbecker
2019-11-19 23:22 ` [PATCH 1/6] sched/cputime: Support other fields on kcpustat_field() Frederic Weisbecker
2019-11-20 11:51 ` Ingo Molnar
2019-11-20 21:04 ` Peter Zijlstra
2019-11-19 23:22 ` [PATCH 2/6] sched/vtime: Bring all-in-one kcpustat accessor for vtime fields Frederic Weisbecker
2019-11-20 12:04 ` Ingo Molnar
2019-11-20 15:00 ` Frederic Weisbecker [this message]
2019-11-19 23:22 ` [PATCH 3/6] procfs: Use all-in-one vtime aware kcpustat accessor Frederic Weisbecker
2019-11-19 23:22 ` [PATCH 4/6] cpufreq: Use vtime aware kcpustat accessors for user time Frederic Weisbecker
2019-11-19 23:22 ` [PATCH 5/6] leds: Use all-in-one vtime aware kcpustat accessor Frederic Weisbecker
2019-11-19 23:22 ` [PATCH 6/6] rackmeter: Use " Frederic Weisbecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191120150016.GA3383@lenoir \
--to=frederic@kernel.org \
--cc=benh@kernel.crashing.org \
--cc=jacek.anaszewski@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=pavel@ucw.cz \
--cc=peterz@infradead.org \
--cc=riel@surriel.com \
--cc=rjw@rjwysocki.net \
--cc=tglx@linutronix.de \
--cc=viresh.kumar@linaro.org \
--cc=wanpengli@tencent.com \
--cc=yauheni.kaliuta@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.