Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp567990ybt; Fri, 19 Jun 2020 08:21:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxlRZ5Q7NyUlRiexx5WNviLCUp/3RgRLad/heBYg/yUdXKaQ5jX2u0EjqyItJnJ1dFSmxeC X-Received: by 2002:a17:906:5496:: with SMTP id r22mr4297585ejo.449.1592580089609; Fri, 19 Jun 2020 08:21:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592580089; cv=none; d=google.com; s=arc-20160816; b=JrEb+o6FDmwYDodplIhbbZi+LticlYIetftqrKsuNOmNfymA05Xd8KambFPiKqAYjJ r1IpjXB0AIdIA3nyVXXenC9Zwcz3BeUPElAXLxiUg+usz3gBwPZSFbsfp7BurGWcYyY2 sqsceFS76YoEHaDdV9yX4nrvT3QmLvzaLeDOpzRAnb1XJq7Zc7mXhMNG393bC2ynm03L d8w9peLrpPpfnYLPzvHna32Rt3x9ub4ws/GmQqt1/z2ZTnRkuyBu5bZsZJ6myb2ymrya XdNPJzf61LJJOTchmBA+82gAjEyUoezM8QQw8idTShPT76NRGYkkJ11UUxvyBNkqml2J fTkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:in-reply-to :subject:cc:to:from:user-agent:references; bh=dKAUOCu+aaWyH1moRK+WsYUjnhNQ9AHITDDrB4EmOlA=; b=TovqQwxmPDjwwIDX6hsTQdS5yNhCiX4VftV+IyYxf8FeLfhl0nVs36C9vIgkjLNgl7 jajoRuNX5PlQKEtOyFB5SAjOHExN8D/U321BbbKat4GkkbnZX9Q5dcvZUn1UcOo5fNtR skMq/XfJInm41dVBI5HzVpYDg2wH5GTYoJBZQjVe2skHY0jsOEuMB+6w6FYm5b6cLaKF Bpi9inj9fv4+XXe0JWbN/Ii7FiuWCVNXb5r6YQp2k1/TbIW4KFoGUjosyinD5eM+6aa6 xfBeTfkztwHV5nI7uaXr3OtiROhe99AaaJs4eBgoQap3/Dj7b/iZ193NVMtasb7WT/OC 7txQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v12si5033041ede.221.2020.06.19.08.21.07; Fri, 19 Jun 2020 08:21:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392510AbgFSPRi (ORCPT + 99 others); Fri, 19 Jun 2020 11:17:38 -0400 Received: from foss.arm.com ([217.140.110.172]:38232 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404179AbgFSPRW (ORCPT ); Fri, 19 Jun 2020 11:17:22 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 682FA2B; Fri, 19 Jun 2020 08:17:21 -0700 (PDT) Received: from e113632-lin (e113632-lin.cambridge.arm.com [10.1.194.46]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id BAE263F71F; Fri, 19 Jun 2020 08:17:19 -0700 (PDT) References: <20200618195525.7889-1-qais.yousef@arm.com> <20200618195525.7889-3-qais.yousef@arm.com> <20200619125148.y4cq3hwllgozbutq@e107158-lin.cambridge.arm.com> <20200619141348.5o5iqomwe6lofgiu@e107158-lin.cambridge.arm.com> User-agent: mu4e 0.9.17; emacs 26.3 From: Valentin Schneider To: Qais Yousef Cc: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Patrick Bellasi , Chris Redpath , Lukasz Luba , linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/2] sched/uclamp: Protect uclamp fast path code with static key In-reply-to: <20200619141348.5o5iqomwe6lofgiu@e107158-lin.cambridge.arm.com> Date: Fri, 19 Jun 2020 16:17:17 +0100 Message-ID: MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 19/06/20 15:13, Qais Yousef wrote: > On 06/19/20 14:25, Valentin Schneider wrote: >> >> On 19/06/20 13:51, Qais Yousef wrote: >> > On 06/19/20 11:36, Valentin Schneider wrote: >> >> >> >> On 18/06/20 20:55, Qais Yousef wrote: >> >> > There is a report that when uclamp is enabled, a netperf UDP test >> >> > regresses compared to a kernel compiled without uclamp. >> >> > >> >> > https://lore.kernel.org/lkml/20200529100806.GA3070@suse.de/ >> >> > >> >> >> >> ISTR the perennial form for those is: https://lkml.kernel.org/r/ >> > >> > The link is correct permalinnk from lore and contains the message-id as Peter >> > likes and he has accepted this form before. >> > >> >> I think the objections I remember were on using lkml.org rather than >> lkml.kernel.org. Sorry! >> >> > If you look closely you'll see that what you suggest is just moving 'lkml' to >> > replace lore in the dns name and put an /r/. I don't see a need to enforce one >> > form over the other as the one I used is much easier to get. >> > >> >> My assumption would be that while lore may fade (it hasn't been there for >> that long, who knows what will come next), lkml.kernel.org ought to be >> perennial. Keyword here being "assumption". >> >> > If Peter really insists I'll be happy to change. >> > >> > [...] >> > >> >> > + * This could happen if sched_uclamp_unused was disabled while the >> >> > + * current task was running, hence we could end up with unbalanced call >> >> > + * to uclamp_rq_dec_id(). >> >> > + */ >> >> > + if (unlikely(!bucket->tasks)) >> >> > + return; >> >> >> >> I'm slightly worried about silent returns for cases like these, can we try >> >> to cook something up to preserve the previous SCHED_WARN_ON()? Say, >> >> something like the horrendous below - alternatively might be feasible with >> >> with some clever p->on_rq flag. >> > >> > I am really against extra churn and debug code to detect an impossible case >> > that is not really tricky for reviewers to discern. Outside of enqueue/dequeue >> > path, it's only used in update_uclamp_active(). It is quite easy to see that >> > it's impossible, except for the legit case now when we have a static key >> > changing when a task is running. >> > >> >> Providing it isn't too much of a head scratcher (and admittedly what I am >> suggesting is borderline here), I believe it is worthwhile to add debug >> helps in what is assumed to be impossible cases - even more so in this case >> seeing as it had been deemed worth to check previously. We've been proved >> wrong on the "impossible" nature of some things before. >> >> We have a few of those checks strewn over the scheduler code, so it's not >> like we would be starting a new trend. > > I am sorry I am still not bought in. I think the parts you're talking about are > in the lockless part of the scheduler which are really hard to debug as several > cpus could be traversing these data from different code paths. Not necessarily just those, see pick_next_task(), active_load_balance_cpu_stop(), or a good proportion of SCHED_WARN_ON()'s. > But here this is > just extra churn. > > If an imbalance has happend this means either: > > 1. enqueue/dequeue_task() is imablanced itself > 2. uclamp_update_active() calls dec without inc. > > If 1 happened we have more reasons to be worried about. For 2 the function > takes task_rq_lock() and does dec/inc in obvious way. > True. I won't argue over the feasibility of the scenarios we are currently aware of, my point was that if they do happen, it's nice to have debug helps in the right places as the final breakage can happen much further downstream. FWIW I don't like the diff I suggested at all, but if we can come up with a cleverer scheme I think we should do it, as per the above. > So I don't see any reason to add new info in task_struct and sprinkle #ifdefs > to protect against something that I can't see we can't reason correctly about > now. > > We don't use pr_debug() in scheduler (I guess no computer would have booted > with that on), otherwise that would have been a good candidate for one, yes. > But we can't do that. > > Thanks