Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp1839460imm; Tue, 22 May 2018 10:07:49 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrW1H6h/ODT2zBs1AtvdSY2vZa02vI1MclyV087Oq8zcV2YmKWZW15pes0MPsyyojzS/vL3 X-Received: by 2002:a62:4f0c:: with SMTP id d12-v6mr25009110pfb.220.1527008869445; Tue, 22 May 2018 10:07:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527008869; cv=none; d=google.com; s=arc-20160816; b=pGT/beOq5sCaGFNcPPh7BjMD897BXLRX4inpNoNXsx0XVkEt79wmJbtdG2gsoYpY+c uadRsdBa3iW+/3Uzs2YWnnYMcsL1RlE8MOVAkLam5qTePNgHnqRcl5VgDdQb2l/N1x8O wDqWzNddhUR5QzPfBEeSWvfFNMGdrJ+hF06STE+j5FxOUZfy4jHm0BNjIS4mpiQfSVkj aFN4d2L6SgKoJ2CK2szqW5AAgHAjSckOBakN2iiHMv36oOlF4tEsEkLmMPiINLOdgE3e IU1f3roSUE5ZAzfAwq2f1BFZRsICxz1ZM99aZL6TLjqQIXGzAUDNJOAtbeBe0z+bS//U VKow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=H0N5Ou3+6KUTjLFd0IEdamPq2jsgjywZGNR3Odra1yE=; b=Tr+Ct1PKOdy7Fuaouu3FQfIRiDQR0WheDB66eDVBihhD9ZBHxk1ua00yi33FkqmUw5 g6kUP+hKbRGWCF2cKdHlK9C+jTbT9ADK9Y50TLi27m2K+CBb7TMPuCC/UewWfi5GZbOF v62uF8CCbJsUDuh0VgrZia8udN66Pkh3YpjgM+RG3y3E84py6m7DaT+wEHlW832ERyOZ FQqbTZT6hxHwerBF8wX8ovUBsQKb3PkVR2/t0gQF0peuMHdBhntEU64h7Jv+NNk1UN0a oiKBff/DweVe9AY5lATe5vnoOwBU0ybc0YiP3hBnwnBfE3Cxw7oleUMaov0XlOyVPQPx KAHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=CvGUma7/; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a1-v6si2107351pgt.221.2018.05.22.10.07.34; Tue, 22 May 2018 10:07:49 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=CvGUma7/; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751984AbeEVRHY (ORCPT + 99 others); Tue, 22 May 2018 13:07:24 -0400 Received: from mail-oi0-f68.google.com ([209.85.218.68]:43395 "EHLO mail-oi0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751587AbeEVRHU (ORCPT ); Tue, 22 May 2018 13:07:20 -0400 Received: by mail-oi0-f68.google.com with SMTP id p62-v6so16892212oie.10; Tue, 22 May 2018 10:07:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=H0N5Ou3+6KUTjLFd0IEdamPq2jsgjywZGNR3Odra1yE=; b=CvGUma7/jKZ8lmlYAYiA6bOJ0YFWc7s00kU5QFbbozFO2tLmTdcRBk8DGK2TmD7lnC NIWy7jqVykYFFvIeGv9VKtt7FWga1I3BISi+N8M0dAdpx2jNTByawZbrzQjlFJen/73E MkaTU/MuOZk/v04M3Ep9szpltBWsYKPzVlYm2JCUIXK2RsaZeAwBYkILqgA5fcHyzwQM h4RBM+Hg60sQ9d1sjdslFmy0sUKSdLpggVQf+XzqQZrFEmsSORb4n2ztO05AEViEJN+c a1Fw27b1nnm9WfJTg4ZNg7yXk9oixEdrxv3wORCl6xkZ90GHS1moF90fqBdVkOFf5QFg r3ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=H0N5Ou3+6KUTjLFd0IEdamPq2jsgjywZGNR3Odra1yE=; b=t6wRlTMPVmnWa3vS/FLILabIRL4s3RV8x+KGdxnK1z4ARDx8RhSoRDGktmI1cDhV2v DS+ayaOy5Yi8foJavF+rvIx4Fg52OQuD/4a0KRGVuKtBnGEMRcdxT3T0L2rFoTuANExy V5XdFUXWwiFrNP7KDwxxfyHcsWKjXDzE/NjQBBnj3G2qWT5VTdF2bigqzJYdM1kAo8X3 tM52rsJKJ13k/39H5nMKNVjU1nnTYv08kHqrIwi2nHLzfZoSWDP4BMS0PvdLnOHJj9jP 6iNhY5MP7iyNyDC9vxwqX9fXCQ9rjXlFli7CWWPLAMdcKPTjO0pZA1jT3hQ1+o0iYfLR +q0Q== X-Gm-Message-State: ALKqPwcaaCdUH8SrN+rntpYTS0sd52WoOV2gQpdrSK4yi0jZ6O9tKcqi kunpPbW8gUzoqEvuRwt6RHWPCIhpG1dCeXGE0fs= X-Received: by 2002:aca:ac06:: with SMTP id v6-v6mr15193141oie.227.1527008839856; Tue, 22 May 2018 10:07:19 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a9d:1468:0:0:0:0:0 with HTTP; Tue, 22 May 2018 10:07:19 -0700 (PDT) In-Reply-To: References: <20180518185501.173552-1-joel@joelfernandes.org> <20180521051424.mljwmisvrvi6yyc4@vireshk-i7> <20180521161346.GB14065@joelaf.mtv.corp.google.com> From: "Rafael J. Wysocki" Date: Tue, 22 May 2018 19:07:19 +0200 X-Google-Sender-Auth: To1Yy9FraXaW77phCQQwFlDOfTU Message-ID: Subject: Re: [PATCH v2] schedutil: Allow cpufreq requests to be made even when kthread kicked To: Joel Fernandes , Viresh Kumar Cc: "Joel Fernandes (Google.)" , Linux Kernel Mailing List , "Rafael J . Wysocki" , Peter Zijlstra , Ingo Molnar , Patrick Bellasi , Juri Lelli , Luca Abeni , Todd Kjos , Claudio Scordino , kernel-team@android.com, Linux PM Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 22, 2018 at 5:30 PM, Rafael J. Wysocki wrote: > On Tue, May 22, 2018 at 12:02 PM, Rafael J. Wysocki wrote: >> On Mon, May 21, 2018 at 6:13 PM, Joel Fernandes wrote: >>> On Mon, May 21, 2018 at 10:29:52AM +0200, Rafael J. Wysocki wrote: >>>> On Mon, May 21, 2018 at 7:14 AM, Viresh Kumar wrote: >>>> > On 18-05-18, 11:55, Joel Fernandes (Google.) wrote: >>>> >> From: "Joel Fernandes (Google)" >>>> >> >>>> >> Currently there is a chance of a schedutil cpufreq update request to be >>>> >> dropped if there is a pending update request. This pending request can >>>> >> be delayed if there is a scheduling delay of the irq_work and the wake >>>> >> up of the schedutil governor kthread. >>>> >> >>>> >> A very bad scenario is when a schedutil request was already just made, >>>> >> such as to reduce the CPU frequency, then a newer request to increase >>>> >> CPU frequency (even sched deadline urgent frequency increase requests) >>>> >> can be dropped, even though the rate limits suggest that its Ok to >>>> >> process a request. This is because of the way the work_in_progress flag >>>> >> is used. >>>> >> >>>> >> This patch improves the situation by allowing new requests to happen >>>> >> even though the old one is still being processed. Note that in this >>>> >> approach, if an irq_work was already issued, we just update next_freq >>>> >> and don't bother to queue another request so there's no extra work being >>>> >> done to make this happen. >>>> > >>>> > Now that this isn't an RFC anymore, you shouldn't have added below >>>> > paragraph here. It could go to the comments section though. >>>> > >>>> >> I had brought up this issue at the OSPM conference and Claudio had a >>>> >> discussion RFC with an alternate approach [1]. I prefer the approach as >>>> >> done in the patch below since it doesn't need any new flags and doesn't >>>> >> cause any other extra overhead. >>>> >> >>>> >> [1] https://patchwork.kernel.org/patch/10384261/ >>>> >> >>>> >> LGTMed-by: Viresh Kumar >>>> >> LGTMed-by: Juri Lelli >>>> > >>>> > Looks like a Tag you just invented ? :) >>>> >>>> Yeah. >>>> >>>> The LGTM from Juri can be converned into an ACK silently IMO. That >>>> said I have added Looks-good-to: tags to a couple of commits. :-) >>> >>> Cool, I'll covert them to Acks :-) >> >> So it looks like I should expect an update of this patch, right? >> >> Or do you prefer the current one to be applied and work on top of it? >> > > [cut] > >>> >>> I just realized that on a single policy switch that uses the governor thread, >>> there will be 1 thread per-CPU. The sugov_update_single will be called on the >>> same CPU with interrupts disabled. >> >> sugov_update_single() doesn't have to run on the target CPU. > > Which sadly is a bug IMO. :-/ My bad. sugov_update_single() runs under rq->lock, so it need not run on a target CPU so long as the CPU running it can update the frequency for the target and there is the requisite check for that in sugov_should_update_freq(). That means that sugov_update_single() will not run concurrently on two different CPUs for the same target, but it may be running concurrently with the kthread (as pointed out by Viresh). >>> In sugov_work, we are doing a >>> raw_spin_lock_irqsave which also disables interrupts. So I don't think >>> there's any possibility of a race happening on the same CPU between the >>> frequency update request and the sugov_work executing. In other words, I feel >>> we can drop the above if (..) statement for single policies completely and >>> only keep the changes for the shared policy. Viresh since you brought up the >>> single policy issue initially which made me add this if statememnt, could you >>> let me know if you agree with what I just said? >> >> Which is why you need the spinlock too. > > And you totally have a point. Not really, sorry about that. It is necessary to take the spinlock in the non-fast-switch case, because of the possible race with the kthread, so something like my patch at https://patchwork.kernel.org/patch/10418551/ is needed after all.