Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp1371926imm; Tue, 22 May 2018 03:03:23 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqGM2Nb8V6i9uVrl5gIrxoAyeXFHTJukfRJiwWpdnhz85GSkD/IPnwB+zGpK6rlgt5/rfjO X-Received: by 2002:a63:a44a:: with SMTP id c10-v6mr18587775pgp.147.1526983403322; Tue, 22 May 2018 03:03:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526983403; cv=none; d=google.com; s=arc-20160816; b=lKhyzU7XriD8tLsiD9xIgFAQWD3D5z/quIw/M46Ca131iAg+i9H8LRz0hI/mUXpdbW 2UhluBSPkzb8eWuTOI1QVWiUk+WMNFuzkANj3qZfmXYjJsPU6V3luHioibNzYVOczYPh Hs/es2R7kmywNTE7yYh/h9tSDKjIR8wC6mda8bE0F4ZcrEg5RcYFgC2ZxErXdsJOF32J mcBD3yONop1WB7Qu3YE+0aqD051j5O1xDgoYvj4ZshyabCSty+kkSyIIfWlIspT31ZWN 62cTkw1FUW6i0EX9/GaZFiL/7VSc2+o7CjcPBtEcPQ3I0s5nyIx5jK5ftyP03Ml/W2Dl oB/w== 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=sxxKo+PvuesResRIx+VsyxMEJk00A3I5QEB32eY3cxw=; b=l0q0wtgVpS8jpam1A2pVvTiz+9alRQM/J09bLOOTDQkKJPN+zaV7mscwH4oxc2wYqS KJvO3qw/RPwkF4qspVHmC97dv0Dj7FrAdDb3I1ZTtlMuA2An2DDajjHvz89103swI0Zr 7qzXTii5nqogqdMoMeQyCg1hir8zDlrUYAgCWPSOaL17OwhDxIFEgenHpnXecrXsnjQy yxjF/q0wgMY18GoGTNC0txCjqJtMcJEvdWcOcqEcORvtZ/w6mSAbJKPzFSdoxzTSV/SJ gBjGMETh0uBa7cUAnAReD/c9SHFkkZtIseft+elHXelAqrGKnUQ+Lo5ebE/X/xF40PCp M6nA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=YqHtbhbK; 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 u13-v6si15653782plq.161.2018.05.22.03.03.08; Tue, 22 May 2018 03:03:23 -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=YqHtbhbK; 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 S1751354AbeEVKC3 (ORCPT + 99 others); Tue, 22 May 2018 06:02:29 -0400 Received: from mail-oi0-f68.google.com ([209.85.218.68]:40252 "EHLO mail-oi0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751173AbeEVKC0 (ORCPT ); Tue, 22 May 2018 06:02:26 -0400 Received: by mail-oi0-f68.google.com with SMTP id c203-v6so15665478oib.7; Tue, 22 May 2018 03:02:25 -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=sxxKo+PvuesResRIx+VsyxMEJk00A3I5QEB32eY3cxw=; b=YqHtbhbK0PiF+LBI2fzCU83xjqUnABakdUo8th6q68r2k+ia4m89MmWqeriMYBOry6 Pc2r+3e3J+Xc5gUOXSdwRkNvlVdFCNZDqTKVMONS4452rVlI1b9zzrwOWG3DW1MOrnoG lkmhc8Kf0xDVLg75LxqyRVVe10wKS1A/3pOeKpqmNT/in/CFjcsLQuAu7As8EGs/UfRp 9ut2CV5G/CGLZ4pN8ls1Q2HlEaSt90VFOtBVPgznbnoqbezak3o/1OwxNDW1lzvsdRV1 9NolpmIDytwGWhDV8zi5Q6AEbon3rQ7Jip3JJb63vaAcHd2MLYNbVofqoHbSDc7J9s8N 1IyQ== 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=sxxKo+PvuesResRIx+VsyxMEJk00A3I5QEB32eY3cxw=; b=KGmYJeLPG20cQhxOR3jtZud5NfszJmILYh9OBseAt1DBcIsj4vGRzk1vRBn93jUbfe D6DfmgbX6YGkBXAaeoQ5PvpRFkUT12yYLG0jsVAP00Ndej6c5PLeeAG8f9zroTbjzmTc weNy4sQIXhFQZv5tIgdnNQR9ny2qbMCciY3/Q4kjAHVDjrq47UC6LEbCMmiFlxia/L9x Y215t3dgAqhiR3EG06AlZK48uStxmuQwDhhyVV9ptnS1QdiVu4exKms7fYY5eRGL9bQm lwfE8YBXHn2u/I3CDk3dYvu9hN3QuNqF5JaCljJYZeWlAMZyDrfDvqX/2BZOBS0eGFed cGhA== X-Gm-Message-State: ALKqPwdHWPSny5jUorYGEM15v7t9FGjWLa/fI9eidysEU5iO6+mokOU7 uG9BCJwZXdavZhNdrboUoLTWQeGpP9EP30r+5pr0jQ== X-Received: by 2002:aca:e156:: with SMTP id y83-v6mr12963156oig.282.1526983345350; Tue, 22 May 2018 03:02:25 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a9d:1468:0:0:0:0:0 with HTTP; Tue, 22 May 2018 03:02:24 -0700 (PDT) In-Reply-To: <20180521161346.GB14065@joelaf.mtv.corp.google.com> 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 12:02:24 +0200 X-Google-Sender-Auth: Z4TAX-EtT-k6ZPlnTCJzWwBBE6s Message-ID: Subject: Re: [PATCH v2] schedutil: Allow cpufreq requests to be made even when kthread kicked To: Joel Fernandes Cc: "Rafael J. Wysocki" , Viresh Kumar , "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 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? > [..] >> >> v1 -> v2: Minor style related changes. >> >> >> >> kernel/sched/cpufreq_schedutil.c | 34 ++++++++++++++++++++++++-------- >> >> 1 file changed, 26 insertions(+), 8 deletions(-) >> >> >> >> diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c >> >> index e13df951aca7..5c482ec38610 100644 >> >> --- a/kernel/sched/cpufreq_schedutil.c >> >> +++ b/kernel/sched/cpufreq_schedutil.c >> >> @@ -92,9 +92,6 @@ static bool sugov_should_update_freq(struct sugov_policy *sg_policy, u64 time) >> >> !cpufreq_can_do_remote_dvfs(sg_policy->policy)) >> >> return false; >> >> >> >> - if (sg_policy->work_in_progress) >> >> - return false; >> >> - >> >> if (unlikely(sg_policy->need_freq_update)) { >> >> sg_policy->need_freq_update = false; >> >> /* >> >> @@ -128,7 +125,7 @@ static void sugov_update_commit(struct sugov_policy *sg_policy, u64 time, >> >> >> >> policy->cur = next_freq; >> >> trace_cpu_frequency(next_freq, smp_processor_id()); >> >> - } else { >> >> + } else if (!sg_policy->work_in_progress) { >> >> sg_policy->work_in_progress = true; >> >> irq_work_queue(&sg_policy->irq_work); >> >> } >> >> @@ -291,6 +288,13 @@ static void sugov_update_single(struct update_util_data *hook, u64 time, >> >> >> >> ignore_dl_rate_limit(sg_cpu, sg_policy); >> >> >> >> + /* >> >> + * For slow-switch systems, single policy requests can't run at the >> >> + * moment if update is in progress, unless we acquire update_lock. >> >> + */ >> >> + if (sg_policy->work_in_progress) >> >> + return; >> >> + >> > >> > I would still want this to go away :) >> > >> > @Rafael, will it be fine to get locking in place for unshared policy >> > platforms ? >> >> As long as it doesn't affect the fast switch path in any way. > > 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. > 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.