Received: by 2002:a05:6358:1087:b0:cb:c9d3:cd90 with SMTP id j7csp477693rwi; Mon, 10 Oct 2022 03:14:22 -0700 (PDT) X-Google-Smtp-Source: AMsMyM503SwiTpD3SSAq69rmPjWjAtgoYUFf6f6tQIANm54hes7WQpny5vmC4qU+MSBR90gTnDwS X-Received: by 2002:a17:907:9715:b0:787:751a:90a4 with SMTP id jg21-20020a170907971500b00787751a90a4mr13977825ejc.279.1665396861965; Mon, 10 Oct 2022 03:14:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665396861; cv=none; d=google.com; s=arc-20160816; b=izY+bwD2F7elEX+IYkPm6HOS2mLrCWcbZAclSsmHm9UYQCNHu6zeb1NybpTAItr392 GjHJEoTH9q0A8P1+IoeznVcW6zdn7/dyHCtWne/4DVi2pPQZupfsT3exaycPoqfsZjTF o21i7R1Oni8ijzgb4kb430xrCmVdQNp9npPPLlnWZJZXjaE6TScwb3EEBSSen5j6zYhI C10vOuxK9fIwF/kCWj2DKeJk+nOKkFa0fFpxCFGo1TidkZuTmOEHWJg9ZvMfDsNa2BER mtEvO/qQNY6gUIngzDutLbTTAbQM08dAhMo38oPUgUcyg4112LbR2/azKQR25p1gqmuf Muvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=cnIFYxkD2s47l0m2/WIYedkqnRtdw5Zp8sOIpbeD1zM=; b=PDT6zkScWfMFlt7qhqSRR8RJPRgbDJrLLrCs/wH3cJpddW/KjNnCh89vZcvGt4z844 YIcJ9ckIQT1LTQuBVxgTRfQiVz/YZ7cZFzelaDkajjKXXNTZ+yXfiNsq8e34vdFRWQ6z ywgyhBRRMFpb58ryqi1EoiAxMjGPPS+5mo2BzSIJ+O61bLv0Az68A/KZ2lj0HkgBdqhz WH4FmmpObol+vQN6K8ZwmEKLYLqz3o8qVeXo5+6zVi3UtXNMs5X0mXwXAvONOzZCvaVI 3mi0uxfpyEK2NE+qUumSV1CYg/+8m1qumtlGGpOz1Zefj12S3Mk0knPQ2AtEndQ/DcYc lThw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u10-20020a50a40a000000b00458b42ff418si9334583edb.221.2022.10.10.03.13.54; Mon, 10 Oct 2022 03:14:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231769AbiJJJbS (ORCPT + 99 others); Mon, 10 Oct 2022 05:31:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60944 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231783AbiJJJbA (ORCPT ); Mon, 10 Oct 2022 05:31:00 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 72804476FB; Mon, 10 Oct 2022 02:30:53 -0700 (PDT) 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 8FE481480; Mon, 10 Oct 2022 02:30:58 -0700 (PDT) Received: from [10.57.5.39] (unknown [10.57.5.39]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 207493F792; Mon, 10 Oct 2022 02:30:50 -0700 (PDT) Message-ID: <8a7968c2-dbf7-5316-ef36-6d45143e0605@arm.com> Date: Mon, 10 Oct 2022 10:30:49 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH 2/2] cpufreq: Update CPU capacity reduction in store_scaling_max_freq() Content-Language: en-US To: Vincent Guittot Cc: Viresh Kumar , linux-kernel@vger.kernel.org, rafael@kernel.org, linux-pm@vger.kernel.org, Dietmar.Eggemann@arm.com, peterz@infradead.org References: <20220930094821.31665-1-lukasz.luba@arm.com> <20220930094821.31665-2-lukasz.luba@arm.com> <20221010053902.5rofnpzvyynumw3e@vireshk-i7> <3f9a4123-171b-5fa7-f506-341355f71483@arm.com> From: Lukasz Luba In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.6 required=5.0 tests=BAYES_00,NICE_REPLY_A, RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/10/22 10:15, Vincent Guittot wrote: > On Mon, 10 Oct 2022 at 11:02, Lukasz Luba wrote: >> >> >> >> On 10/10/22 06:39, Viresh Kumar wrote: >>> Would be good to always CC Scheduler maintainers for such a patch. >> >> Agree, I'll do that. >> >>> >>> On 30-09-22, 10:48, Lukasz Luba wrote: >>>> When the new max frequency value is stored, the task scheduler must >>>> know about it. The scheduler uses the CPUs capacity information in the >>>> task placement. Use the existing mechanism which provides information >>>> about reduced CPU capacity to the scheduler due to thermal capping. >>>> >>>> Signed-off-by: Lukasz Luba >>>> --- >>>> drivers/cpufreq/cpufreq.c | 18 +++++++++++++++++- >>>> 1 file changed, 17 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c >>>> index 1f8b93f42c76..205d9ea9c023 100644 >>>> --- a/drivers/cpufreq/cpufreq.c >>>> +++ b/drivers/cpufreq/cpufreq.c >>>> @@ -27,6 +27,7 @@ >>>> #include >>>> #include >>>> #include >>>> +#include >>>> #include >>>> #include >>>> #include >>>> @@ -718,6 +719,8 @@ static ssize_t show_scaling_cur_freq(struct cpufreq_policy *policy, char *buf) >>>> static ssize_t store_scaling_max_freq >>>> (struct cpufreq_policy *policy, const char *buf, size_t count) >>>> { >>>> + unsigned int frequency; >>>> + struct cpumask *cpus; >>>> unsigned long val; >>>> int ret; >>>> >>>> @@ -726,7 +729,20 @@ static ssize_t store_scaling_max_freq >>>> return -EINVAL; >>>> >>>> ret = freq_qos_update_request(policy->max_freq_req, val); >>>> - return ret >= 0 ? count : ret; >>>> + if (ret >= 0) { >>>> + /* >>>> + * Make sure that the task scheduler sees these CPUs >>>> + * capacity reduction. Use the thermal pressure mechanism >>>> + * to propagate this information to the scheduler. >>>> + */ >>>> + cpus = policy->related_cpus; >>> >>> No need of this, just use related_cpus directly. >>> >>>> + frequency = __resolve_freq(policy, val, CPUFREQ_RELATION_HE); >>>> + arch_update_thermal_pressure(cpus, frequency); >>> >>> I wonder if using the thermal-pressure API here is the right thing to >>> do. It is a change coming from User, which may or may not be >>> thermal-related. >> >> Yes, I thought the same. Thermal-pressure name might be not the >> best for covering this use case. I have been thinking about this >> thermal pressure mechanism for a while, since there are other >> use cases like PowerCap DTPM which also reduces CPU capacity >> because of power policy from user-space. We don't notify >> the scheduler about it. There might be also an issue with virtual >> guest OS and how that kernel 'sees' the capacity of CPUs. >> We might try to use this 'thermal-pressure' in the guest kernel >> to notify about available CPU capacity (just a proposal, not >> even an RFC, since we are missing requirements, but issues where >> discussed on LPC 2022 on ChromeOS+Android_guest) > > The User space setting scaling_max_freq is a long scale event and it > should be considered as a new running environnement instead of a > transient event. I would suggest updating the EM is and capacity orig > of the system in this case. Similarly, we rebuild sched_domain with a > cpu hotplug. scaling_max_freq interface should not be used to do any > kind of dynamic scaling. I tend to agree, but the EM capacity would be only used in part of EAS code. The whole fair.c view to the capacity_of() (RT + DL + irq + thermal_pressure) would be still wrong in other parts, e.g. select_idle_sibling() and load balance. When we get this powerhint we might be already in overutilied state so EAS is disabled. IMO other mechanisms in the task scheduler should be also aware of that capacity reduction.