From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E64FBA0548; Tue, 20 Apr 2021 14:38:50 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3BCC9417AE; Tue, 20 Apr 2021 14:38:50 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mails.dpdk.org (Postfix) with ESMTP id 2291541735; Tue, 20 Apr 2021 14:38:47 +0200 (CEST) IronPort-SDR: nbqnqichQnIG3roJv51CC3YilnWYT9JqS4fbZtnD5ZPZdE7WXyXl41jWMylXrHqPBuNNVLa1RG RFd8p5aat0eA== X-IronPort-AV: E=McAfee;i="6200,9189,9959"; a="216085999" X-IronPort-AV: E=Sophos;i="5.82,236,1613462400"; d="scan'208";a="216085999" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Apr 2021 05:38:46 -0700 IronPort-SDR: cFhq9OwUFaCc3B9NbYH4SzzjC2DN4jfDS+yraXqSrv7a8VO2eHVsTNYjPfVkOsUUcfNYLKH4SO 3pHRxKvs4BVw== X-IronPort-AV: E=Sophos;i="5.82,236,1613462400"; d="scan'208";a="426910800" Received: from dhunt5-mobl5.ger.corp.intel.com (HELO [10.252.30.174]) ([10.252.30.174]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Apr 2021 05:38:44 -0700 To: Richael Zhuang , dev@dpdk.org Cc: nd@arm.com, alan.carew@intel.com, stable@dpdk.org, Pablo de Lara References: <20210407074636.26891-2-richael.zhuang@arm.com> <20210415055930.3899-1-richael.zhuang@arm.com> <20210415055930.3899-2-richael.zhuang@arm.com> From: David Hunt Message-ID: <86f24139-a638-ec83-ab52-fa19a28dd658@intel.com> Date: Tue, 20 Apr 2021 13:38:42 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.9.1 MIME-Version: 1.0 In-Reply-To: <20210415055930.3899-2-richael.zhuang@arm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-GB Subject: Re: [dpdk-dev] [PATCH v5 1/2] test/power: add delay before checking cpuinfo cur freq X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 15/4/2021 6:59 AM, Richael Zhuang wrote: > For some platforms the newly-set frequency may not be effective > immediately. If we didn't get the right value from cpuinfo_cur_freq > immediately, add 10ms delay each time before rechecking until > timeout. > > From our test, for some arm platforms, it requires up to 700ms when > going from a minimum to a maximum frequency. And it's not the > driver/software issue. > > Fixes: ed7c51a6a680 ("app/test: vm power management") > Cc: alan.carew@intel.com > Cc: stable@dpdk.org > > Signed-off-by: Richael Zhuang > --- > app/test/test_power_cpufreq.c | 27 ++++++++++++++++++++++----- > 1 file changed, 22 insertions(+), 5 deletions(-) > > diff --git a/app/test/test_power_cpufreq.c b/app/test/test_power_cpufreq.c > index 731c6b4dc..d47b3e0a1 100644 > --- a/app/test/test_power_cpufreq.c > +++ b/app/test/test_power_cpufreq.c > @@ -8,6 +8,7 @@ > #include > #include > #include > +#include > > #include "test.h" > > @@ -44,11 +45,13 @@ static int > check_cur_freq(unsigned lcore_id, uint32_t idx) > { > #define TEST_POWER_CONVERT_TO_DECIMAL 10 > +#define MAX_LOOP 100 > FILE *f; > char fullpath[PATH_MAX]; > char buf[BUFSIZ]; > uint32_t cur_freq; > int ret = -1; > + int i; > > if (snprintf(fullpath, sizeof(fullpath), > TEST_POWER_SYSFILE_CUR_FREQ, lcore_id) < 0) { > @@ -58,13 +61,27 @@ check_cur_freq(unsigned lcore_id, uint32_t idx) > if (f == NULL) { > return 0; > } > - if (fgets(buf, sizeof(buf), f) == NULL) { > - goto fail_get_cur_freq; > + for (i = 0; i < MAX_LOOP; i++) { > + fflush(f); > + if (fgets(buf, sizeof(buf), f) == NULL) > + goto fail_all; > + > + cur_freq = strtoul(buf, NULL, TEST_POWER_CONVERT_TO_DECIMAL); > + ret = (freqs[idx] == cur_freq ? 0 : -1); > + > + if (ret == 0) > + break; > + > + if (fseek(f, 0, SEEK_SET) < 0) { > + printf("Fail to set file position indicator to 0\n"); > + goto fail_all; > + } > + > + /* wait for the value to be updated */ > + rte_delay_ms(10); > } > - cur_freq = strtoul(buf, NULL, TEST_POWER_CONVERT_TO_DECIMAL); > - ret = (freqs[idx] == cur_freq ? 0 : -1); > > -fail_get_cur_freq: > +fail_all: > fclose(f); > > return ret; Hi Richael On your system, is the current cpu frequency found in cpuinfo_cur_freq or in scaling_cur_freq? On my system, which uses intel_pstate driver, there is no file called cpuinfo_cur_freq, but the test works when I change TEST_POWER_SYSFILE_CUR_FREQ to scaling_cur_freq. I know that's unrelated to your patch above, but it migth be worth using a file common to all platforms, or else attempting to open one, and if that fails, try open the other. Rgds, Dave.