linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Patrick Bellasi <patrick.bellasi@arm.com>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Joel Fernandes <joel@joelfernandes.org>,
	"Joel Fernandes (Google.)" <joelaf@google.com>,
	linux-kernel@vger.kernel.org,
	"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Juri Lelli <juri.lelli@redhat.com>,
	Luca Abeni <luca.abeni@santannapisa.it>,
	Todd Kjos <tkjos@google.com>,
	claudio@evidence.eu.com, kernel-team@android.com,
	linux-pm@vger.kernel.org
Subject: Re: [PATCH v2] schedutil: Allow cpufreq requests to be made even when kthread kicked
Date: Tue, 22 May 2018 11:38:52 +0100	[thread overview]
Message-ID: <20180522103851.GW30654@e110439-lin> (raw)
In-Reply-To: <20180522102305.uxph4u4o2zrvu4tx@vireshk-i7>

Hi Viresh,
thanks for clarifying...

On 22-May 15:53, Viresh Kumar wrote:
> On 21-05-18, 10:20, Joel Fernandes wrote:
> > On Mon, May 21, 2018 at 06:00:50PM +0100, Patrick Bellasi wrote:
> > > If that's the case, this means that if, for example, during a
> > > frequency switch you get a request to reduce the frequency (e.g.
> > > deadline task passing the 0-lag time) and right after a request to
> > > increase the frequency (e.g. the current FAIR task tick)... you will
> > > enqueue a freq drop followed by a freq increase and actually do two
> > > frequency hops?
> 
> I don't think so.
> 
> Consider the kthread as running currently and has just cleared the
> work_in_progress flag. Sched update comes at that time and we decide
> to reduce the frequency, we queue another work and update next_freq.
> Now if another sched update comes before the kthread finishes its
> previous loop, we will simply update next_freq and return. So when the
> next time kthread runs, it will pick the most recent update.

Mmm... right... looking better at the two execution contexts:

   // A) Frequency update requests
   sugov_update_commit() {
      sg_policy->next_freq = next_freq;
      if (!sg_policy->work_in_progress) {
         sg_policy->work_in_progress = true;
         irq_work_queue(&sg_policy->irq_work);
      }
   }

   // B) Actual frequency updates
   sugov_work() {
      freq = sg_policy->next_freq;
      sg_policy->work_in_progress = false;

      __cpufreq_driver_target(sg_policy->policy, freq, CPUFREQ_RELATION_L);
   }


It's true that A will enqueue only one B at the first next_freq update
and then it will keep just updating the next_freq.
Thus, we should be ensure to have always just one kwork pending in the
queue.
 
> Where is the problem both of you see ?

Perhaps the confusion comes just from the naming of
"work_in_progress", which is confusing since we use it now to
represent that we enqueued a frequency change and we wait for the
kwork to pick it up.

Maybe it can help to rename it to something like kwork_queued or
update_pending, update_queued... ?


-- 
#include <best/regards.h>

Patrick Bellasi

  reply	other threads:[~2018-05-22 10:38 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-18 18:55 [PATCH v2] schedutil: Allow cpufreq requests to be made even when kthread kicked Joel Fernandes (Google.)
2018-05-18 21:13 ` Saravana Kannan
2018-05-18 21:17   ` Rafael J. Wysocki
2018-05-21  5:14 ` Viresh Kumar
2018-05-21  8:29   ` Rafael J. Wysocki
2018-05-21  9:57     ` Juri Lelli
2018-05-21 16:13     ` Joel Fernandes
2018-05-22 10:02       ` Rafael J. Wysocki
2018-05-22 11:26         ` Rafael J. Wysocki
2018-05-22 15:30         ` Rafael J. Wysocki
2018-05-22 17:07           ` Rafael J. Wysocki
2018-05-21 10:50 ` Patrick Bellasi
2018-05-21 15:49   ` Joel Fernandes
2018-05-21 17:00     ` Patrick Bellasi
2018-05-21 17:20       ` Joel Fernandes
2018-05-21 17:41         ` Patrick Bellasi
2018-05-22 10:23         ` Viresh Kumar
2018-05-22 10:38           ` Patrick Bellasi [this message]
2018-05-21 18:05   ` Joel Fernandes
2018-05-22 10:26     ` Patrick Bellasi
2018-05-22 10:34 ` Viresh Kumar
2018-05-22 10:50   ` Viresh Kumar
2018-05-22 10:50     ` Rafael J. Wysocki
2018-05-22 10:54       ` Viresh Kumar
2018-05-22 11:31         ` Rafael J. Wysocki
2018-05-22 11:38           ` Viresh Kumar
2018-05-22 11:42             ` Rafael J. Wysocki
2018-05-22 12:22               ` Rafael J. Wysocki
2018-05-22 15:27                 ` Rafael J. Wysocki
2018-05-22 21:41                   ` Joel Fernandes
2018-05-22 21:52                     ` Rafael J. Wysocki
2018-05-22 22:28                       ` Joel Fernandes
2018-05-22 10:51   ` Patrick Bellasi
2018-05-22 10:56     ` Viresh Kumar
2018-05-22 22:09   ` Joel Fernandes
2018-05-23  8:18     ` Rafael J. Wysocki
2018-05-23  9:01     ` Viresh Kumar
2018-05-23  9:42       ` Joel Fernandes
2018-05-23 10:06         ` Viresh Kumar

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=20180522103851.GW30654@e110439-lin \
    --to=patrick.bellasi@arm.com \
    --cc=claudio@evidence.eu.com \
    --cc=joel@joelfernandes.org \
    --cc=joelaf@google.com \
    --cc=juri.lelli@redhat.com \
    --cc=kernel-team@android.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=luca.abeni@santannapisa.it \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rafael.j.wysocki@intel.com \
    --cc=tkjos@google.com \
    --cc=viresh.kumar@linaro.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).