Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp910626pxb; Fri, 22 Jan 2021 02:17:09 -0800 (PST) X-Google-Smtp-Source: ABdhPJxOZLc0aIZNcSawxLtijDp7ZcOvrsW0bgX0Op9sMxwLR3m1PahEzhr19SH9302PhkeSGj8M X-Received: by 2002:aa7:d44c:: with SMTP id q12mr2571294edr.368.1611310629117; Fri, 22 Jan 2021 02:17:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611310629; cv=none; d=google.com; s=arc-20160816; b=BSEsAGGdQ1Zw+sy03kn0fnV3oafxjwDK1d02tA/mfIPnFLnBCppTEnX0SCUv/XV4tn Bb15osICP61kNeJ4iwDzNXXy86+Y6YOH79S31lyBx0T0MDoBtDA8/YQuyrrQbZraR0Yw anAWtKyJ3prs21f0Ezg+kGPH0/r7myjdrFxvOvjOpmZwfcP2sEDvEKy+95+qnOHLfklF b4wwlg4tbcF7137BPHVLML3OFTKiD4e5UFQ5jZmSB8ojaFy6JfAOgR4xbW7OXBq/ByRe No0TaIQc/K1dRDtiSNDM+7eRCyaDkqJbrwYTnPVpdX5sfw187R9CWQOrZiXjhmsj/z5y rzRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=FzuclNU9zgQrVGrl9ClLkqZDMqBp9nHnmhBqITwzQHg=; b=oBKm8aJiqxUUy3uQ1Jbw6BVVBNOTt7n5dCCmtf5Ro6AT9deg01SKwb7+UIj4Ype3Te esovKYJM2gq4oVM8rd+6LDjrWFO/1ePNpimPE9vK88fsAAzkO8D4gJm19xE0FhHcWvZw 68Q6+xFtf86+Cn6acjzMoJjz08/7KdeW9ZlWsNyf+yRPh/uZxxf3RBJRd4HyjUmPd2vp IK2iQI7V3NUcejzxkK8rs9jY17/FKvaRZNBbRxHNUtQ3aDk5YJ17iVVqE8PLt6+vEUGG 49hZoTlfsPcoVzUvXxQf/gJNFOyWUIslWhMpt7efmUYRS1c815uNV+u4Pa6lDhYw+o19 BoUQ== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ca22si2801744ejb.112.2021.01.22.02.16.45; Fri, 22 Jan 2021 02:17:09 -0800 (PST) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727865AbhAVKNC (ORCPT + 99 others); Fri, 22 Jan 2021 05:13:02 -0500 Received: from foss.arm.com ([217.140.110.172]:39522 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727620AbhAVKMT (ORCPT ); Fri, 22 Jan 2021 05:12:19 -0500 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 2395411D4; Fri, 22 Jan 2021 02:11:33 -0800 (PST) Received: from [10.57.9.64] (unknown [10.57.9.64]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 11E523F719; Fri, 22 Jan 2021 02:11:30 -0800 (PST) Subject: Re: [PATCH] drm/panfrost: Add governor data with pre-defined thresholds To: Daniel Lezcano Cc: linux-kernel@vger.kernel.org, steven.price@arm.com, airlied@linux.ie, daniel@ffwll.ch, robh@kernel.org, tomeu.vizoso@collabora.com, alyssa.rosenzweig@collabora.com, dri-devel@lists.freedesktop.org References: <20210121170445.19761-1-lukasz.luba@arm.com> From: Lukasz Luba Message-ID: Date: Fri, 22 Jan 2021 10:11:29 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 1/21/21 5:15 PM, Daniel Lezcano wrote: > On 21/01/2021 18:04, Lukasz Luba wrote: >> The simple_ondemand devfreq governor uses two thresholds to decide about >> the frequency change: upthreshold, downdifferential. These two tunable >> change the behavior of the governor decision, e.g. how fast to increase >> the frequency or how rapidly limit the frequency. This patch adds needed >> governor data with thresholds values gathered experimentally in different >> workloads. >> >> Signed-off-by: Lukasz Luba >> --- >> Hi all, >> >> This patch aims to improve the panfrost performance in various workloads, >> (benchmarks, games). The simple_ondemand devfreq governor supports >> tunables to tweak the behaviour of the internal algorithm. The default >> values for these two thresholds (90 and 5) do not work well with panfrost. >> These new settings should provide good performance, short latency for >> rising the frequency due to rapid workload change and decent freq slow >> down when the load is decaying. Based on frequency change statistics, >> gathered during experiments, all frequencies are used, depending on >> the load. This provides some power savings (statistically). The highest >> frequency is also used when needed. >> >> Example glmark2 results: >> 1. freq fixed to max: 153 >> 2. these new thresholds values (w/ patch): 151 >> 3. default governor values (w/o patch): 114 >> >> In future the devfreq framework would expose via sysfs these two >> tunables, so they can be adjusted by the middleware based on currently >> running workload (game, desktop, web browser, etc). These new values >> should be good enough, though. >> >> Regards, >> Lukasz Luba >> >> drivers/gpu/drm/panfrost/panfrost_devfreq.c | 10 +++++++++- >> drivers/gpu/drm/panfrost/panfrost_devfreq.h | 2 ++ >> 2 files changed, 11 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.c b/drivers/gpu/drm/panfrost/panfrost_devfreq.c >> index 56b3f5935703..7c5ffc81dce1 100644 >> --- a/drivers/gpu/drm/panfrost/panfrost_devfreq.c >> +++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.c >> @@ -130,8 +130,16 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev) >> panfrost_devfreq_profile.initial_freq = cur_freq; >> dev_pm_opp_put(opp); >> >> + /* >> + * Setup default thresholds for the simple_ondemand governor. >> + * The values are chosen based on experiments. >> + */ >> + pfdevfreq->gov_data.upthreshold = 45; >> + pfdevfreq->gov_data.downdifferential = 5; >> + >> devfreq = devm_devfreq_add_device(dev, &panfrost_devfreq_profile, >> - DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL); >> + DEVFREQ_GOV_SIMPLE_ONDEMAND, >> + &pfdevfreq->gov_data); >> if (IS_ERR(devfreq)) { >> DRM_DEV_ERROR(dev, "Couldn't initialize GPU devfreq\n"); >> ret = PTR_ERR(devfreq); >> diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.h b/drivers/gpu/drm/panfrost/panfrost_devfreq.h >> index db6ea48e21f9..1e2a4de941aa 100644 >> --- a/drivers/gpu/drm/panfrost/panfrost_devfreq.h >> +++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.h >> @@ -4,6 +4,7 @@ >> #ifndef __PANFROST_DEVFREQ_H__ >> #define __PANFROST_DEVFREQ_H__ >> >> +#include >> #include >> #include >> >> @@ -17,6 +18,7 @@ struct panfrost_devfreq { >> struct devfreq *devfreq; >> struct opp_table *regulators_opp_table; >> struct thermal_cooling_device *cooling; >> + struct devfreq_simple_ondemand_data gov_data; >> bool opp_of_table_added; >> >> ktime_t busy_time; > > I think it is simpler to do: > > +static struct devfreq_simple_ondemand_data panfrost_ondemand_data = { > + .upthreshold = 45, > + .downdifferential = 5, > +}; > > [ ... ] > > devfreq = devm_devfreq_add_device(dev, &panfrost_devfreq_profile, > - DEVFREQ_GOV_SIMPLE_ONDEMAND, > NULL); > + DEVFREQ_GOV_SIMPLE_ONDEMAND, > + &panfrost_ondemand_data); > > Yes, it's simpler. The driver would probably never have to serve two GPUs. I've tried to keep this thing inside the panfrost struct, forgetting about it. Steven already reviewed the patch, so it can probably stay. I will keep it in mind. Thank you for the comments. Regards, Lukasz