All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konstantin Ananyev <konstantin.ananyev@huawei.com>
To: "lihuisong (C)" <lihuisong@huawei.com>, "dev@dpdk.org" <dev@dpdk.org>
Cc: "mb@smartsharesystems.com" <mb@smartsharesystems.com>,
	"thomas@monjalon.net" <thomas@monjalon.net>,
	"ferruh.yigit@amd.com" <ferruh.yigit@amd.com>,
	"anatoly.burakov@intel.com" <anatoly.burakov@intel.com>,
	"david.hunt@intel.com" <david.hunt@intel.com>,
	"sivaprasad.tummala@amd.com" <sivaprasad.tummala@amd.com>,
	"stephen@networkplumber.org" <stephen@networkplumber.org>,
	"david.marchand@redhat.com" <david.marchand@redhat.com>,
	Fengchengwen <fengchengwen@huawei.com>,
	liuyonglong <liuyonglong@huawei.com>
Subject: RE: [PATCH v12 3/3] examples/l3fwd-power: add PM QoS configuration
Date: Thu, 24 Oct 2024 16:44:55 +0000	[thread overview]
Message-ID: <368f291b2d644105aabf47ce7ef12f6c@huawei.com> (raw)
In-Reply-To: <20241023040916.1426-4-lihuisong@huawei.com>



> The '--cpu-resume-latency' can use to control C-state selection.
> Setting the CPU resume latency to 0 can limit the CPU just to enter
> C0-state to improve performance, which also may increase the power
> consumption of platform.
> 
> Signed-off-by: Huisong Li <lihuisong@huawei.com>
> Acked-by: Morten Brørup <mb@smartsharesystems.com>
> Acked-by: Chengwen Feng <fengchengwen@huawei.com>
> ---
>  .../sample_app_ug/l3_forward_power_man.rst    |  5 +-
>  examples/l3fwd-power/main.c                   | 68 +++++++++++++++++++
>  2 files changed, 72 insertions(+), 1 deletion(-)
> 
> diff --git a/doc/guides/sample_app_ug/l3_forward_power_man.rst b/doc/guides/sample_app_ug/l3_forward_power_man.rst
> index 9c9684fea7..70fa83669a 100644
> --- a/doc/guides/sample_app_ug/l3_forward_power_man.rst
> +++ b/doc/guides/sample_app_ug/l3_forward_power_man.rst
> @@ -67,7 +67,8 @@ based on the speculative sleep duration of the core.
>  In this application, we introduce a heuristic algorithm that allows packet processing cores to sleep for a short period
>  if there is no Rx packet received on recent polls.
>  In this way, CPUIdle automatically forces the corresponding cores to enter deeper C-states
> -instead of always running to the C0 state waiting for packets.
> +instead of always running to the C0 state waiting for packets. But user can set the CPU resume latency to control C-state selection.
> +Setting the CPU resume latency to 0 can limit the CPU just to enter C0-state to improve performance, which may increase power
> consumption of platform.
> 
>  .. note::
> 
> @@ -105,6 +106,8 @@ where,
> 
>  *   --config (port,queue,lcore)[,(port,queue,lcore)]: determines which queues from which ports are mapped to which cores.
> 
> +*   --cpu-resume-latency LATENCY: set CPU resume latency to control C-state selection, 0 : just allow to enter C0-state.
> +
>  *   --max-pkt-len: optional, maximum packet length in decimal (64-9600)
> 
>  *   --no-numa: optional, disables numa awareness
> diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
> index 0ce4aa04d4..e58f4e301c 100644
> --- a/examples/l3fwd-power/main.c
> +++ b/examples/l3fwd-power/main.c
> @@ -47,6 +47,7 @@
>  #include <rte_telemetry.h>
>  #include <rte_power_pmd_mgmt.h>
>  #include <rte_power_uncore.h>
> +#include <rte_power_qos.h>
> 
>  #include "perf_core.h"
>  #include "main.h"
> @@ -265,6 +266,9 @@ static uint32_t pause_duration = 1;
>  static uint32_t scale_freq_min;
>  static uint32_t scale_freq_max;
> 
> +static int cpu_resume_latency;
> +static bool pm_qos_en;
> +
>  static struct rte_mempool * pktmbuf_pool[NB_SOCKETS];
> 
> 
> @@ -1501,6 +1505,8 @@ print_usage(const char *prgname)
>  		"  -U: set min/max frequency for uncore to maximum value\n"
>  		"  -i (frequency index): set min/max frequency for uncore to specified frequency index\n"
>  		"  --config (port,queue,lcore): rx queues configuration\n"
> +		"  --cpu-resume-latency LATENCY: set CPU resume latency to control C-state selection,"
> +		" 0 : just allow to enter C0-state\n"
>  		"  --high-perf-cores CORELIST: list of high performance cores\n"
>  		"  --perf-config: similar as config, cores specified as indices"
>  		" for bins containing high or regular performance cores\n"
> @@ -1545,6 +1551,28 @@ parse_uint32(const char *opt, uint32_t *res)
>  	return 0;
>  }
> 
> +static int
> +parse_int(const char *opt, int *res)
> +{
> +	char *end = NULL;
> +	signed long val;
> +
> +	/* parse integer string */
> +	val = strtol(opt, &end, 10);
> +	if ((opt[0] == '\0') || (end == NULL) || (*end != '\0'))
> +		return -1;
> +
> +	if (val < INT_MIN || val > INT_MAX) {
> +		RTE_LOG(ERR, L3FWD_POWER, "parameter should be range from %d to %d.\n",
> +			INT_MIN, INT_MAX);
> +		return -1;
> +	}
> +
> +	*res = val;
> +
> +	return 0;
> +}
> +
>  static int
>  parse_uncore_options(enum uncore_choice choice, const char *argument)
>  {
> @@ -1734,6 +1762,7 @@ parse_pmd_mgmt_config(const char *name)
>  #define CMD_LINE_OPT_PAUSE_DURATION "pause-duration"
>  #define CMD_LINE_OPT_SCALE_FREQ_MIN "scale-freq-min"
>  #define CMD_LINE_OPT_SCALE_FREQ_MAX "scale-freq-max"
> +#define CMD_LINE_OPT_CPU_RESUME_LATENCY "cpu-resume-latency"
> 
>  /* Parse the argument given in the command line of the application */
>  static int
> @@ -1748,6 +1777,7 @@ parse_args(int argc, char **argv)
>  		{"perf-config", 1, 0, 0},
>  		{"high-perf-cores", 1, 0, 0},
>  		{"no-numa", 0, 0, 0},
> +		{CMD_LINE_OPT_CPU_RESUME_LATENCY, 1, 0, 0},
>  		{CMD_LINE_OPT_MAX_PKT_LEN, 1, 0, 0},
>  		{CMD_LINE_OPT_PARSE_PTYPE, 0, 0, 0},
>  		{CMD_LINE_OPT_LEGACY, 0, 0, 0},
> @@ -1933,6 +1963,15 @@ parse_args(int argc, char **argv)
>  				printf("Scaling frequency maximum configured\n");
>  			}
> 
> +			if (!strncmp(lgopts[option_index].name,
> +					CMD_LINE_OPT_CPU_RESUME_LATENCY,
> +					sizeof(CMD_LINE_OPT_CPU_RESUME_LATENCY))) {
> +				if (parse_int(optarg, &cpu_resume_latency) != 0)

Do you really need a to support a negative values for that variable?

> +					return -1;
> +				printf("PM QoS configured\n");
> +				pm_qos_en = true;
> +			}
> +
>  			break;
> 
>  		default:
> @@ -2256,6 +2295,26 @@ init_power_library(void)
>  			return -1;
>  		}
>  	}
> +
> +	if (pm_qos_en) {
> +		RTE_LCORE_FOREACH(lcore_id) {
> +			/*
> +			 * Set the cpu resume latency of the worker lcore based
> +			 * on user's request. If set strict latency (0), just
> +			 * allow the CPU to enter the shallowest idle state to
> +			 * improve performance.
> +			 */
> +			ret = rte_power_qos_set_cpu_resume_latency(lcore_id,
> +							cpu_resume_latency);
> +			if (ret != 0) {
> +				RTE_LOG(ERR, L3FWD_POWER,
> +					"Failed to set cpu resume latency on lcore-%u.\n",
> +					lcore_id);
> +				return ret;
> +			}
> +		}
> +	}
> +
>  	return ret;
>  }
> 
> @@ -2295,6 +2354,15 @@ deinit_power_library(void)
>  			}
>  		}
>  	}
> +
> +	if (pm_qos_en) {
> +		RTE_LCORE_FOREACH(lcore_id) {
> +			/* Restore the original value in kernel. */
> +			rte_power_qos_set_cpu_resume_latency(lcore_id,
> +					RTE_POWER_QOS_RESUME_LATENCY_NO_CONSTRAINT);

If we are going to 'restore original' shouldn't we:
At startup old_value=get() 
At termination: set(old_value)
?  

> +		}
> +	}
> +
>  	return ret;
>  }
> 
> --
> 2.22.0


  reply	other threads:[~2024-10-24 16:45 UTC|newest]

Thread overview: 125+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-20 10:55 [PATCH 0/2] introduce PM QoS interface Huisong Li
2024-03-20 10:55 ` [PATCH 1/2] power: " Huisong Li
2024-03-20 10:55 ` [PATCH 2/2] examples/l3fwd-power: add PM QoS request configuration Huisong Li
2024-03-20 14:05 ` [PATCH 0/2] introduce PM QoS interface Morten Brørup
2024-03-21  3:04   ` lihuisong (C)
2024-03-21 13:30     ` Morten Brørup
2024-03-22  8:54       ` lihuisong (C)
2024-03-22 12:35         ` Morten Brørup
2024-03-26  2:11           ` lihuisong (C)
2024-03-26  8:27             ` Morten Brørup
2024-03-26 12:15               ` lihuisong (C)
2024-03-26 12:46                 ` Morten Brørup
2024-03-29  1:59                   ` lihuisong (C)
2024-03-22 17:55         ` Tyler Retzlaff
2024-03-26  2:20           ` lihuisong (C)
2024-03-26 16:04             ` Tyler Retzlaff
2024-06-13 11:20 ` [PATCH v2 0/2] power: " Huisong Li
2024-06-13 11:20   ` [PATCH v2 1/2] power: introduce PM QoS API on CPU wide Huisong Li
2024-06-14  8:04     ` Morten Brørup
2024-06-18 12:19       ` lihuisong (C)
2024-06-18 12:53         ` Morten Brørup
2024-06-13 11:20   ` [PATCH v2 2/2] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-06-19  6:31 ` [PATCH v3 0/2] power: introduce PM QoS interface Huisong Li
2024-06-19  6:31   ` [PATCH v3 1/2] power: introduce PM QoS API on CPU wide Huisong Li
2024-06-19 14:56     ` Stephen Hemminger
2024-06-20  2:22       ` lihuisong (C)
2024-06-19 15:32     ` Thomas Monjalon
2024-06-20  2:32       ` lihuisong (C)
2024-06-19  6:31   ` [PATCH v3 2/2] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-06-19 14:54     ` Stephen Hemminger
2024-06-20  2:24       ` lihuisong (C)
2024-06-19  6:59   ` [PATCH v3 0/2] power: introduce PM QoS interface Morten Brørup
2024-06-27  6:00 ` [PATCH v4 " Huisong Li
2024-06-27  6:00   ` [PATCH v4 1/2] power: introduce PM QoS API on CPU wide Huisong Li
2024-06-27 15:06     ` Stephen Hemminger
2024-06-28  4:07       ` lihuisong (C)
2024-06-27  6:00   ` [PATCH v4 2/2] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-07-02  3:50 ` [PATCH v5 0/2] power: introduce PM QoS interface Huisong Li
2024-07-02  3:50   ` [PATCH v5 1/2] power: introduce PM QoS API on CPU wide Huisong Li
2024-07-03  1:32     ` zhoumin
2024-07-03  2:52       ` lihuisong (C)
2024-07-02  3:50   ` [PATCH v5 2/2] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-07-09  2:29 ` [PATCH v6 0/2] power: introduce PM QoS interface Huisong Li
2024-07-09  2:29   ` [PATCH v6 1/2] power: introduce PM QoS API on CPU wide Huisong Li
2024-07-09  2:29   ` [PATCH v6 2/2] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-07-09  3:07     ` Stephen Hemminger
2024-07-09  3:18       ` lihuisong (C)
2024-07-09  6:31 ` [PATCH v7 0/2] power: introduce PM QoS interface Huisong Li
2024-07-09  6:31   ` [PATCH v7 1/2] power: introduce PM QoS API on CPU wide Huisong Li
2024-07-09  6:31   ` [PATCH v7 2/2] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-07-09  7:25 ` [PATCH v8 0/2] power: introduce PM QoS interface Huisong Li
2024-07-09  7:25   ` [PATCH v8 1/2] power: introduce PM QoS API on CPU wide Huisong Li
2024-07-09  7:25   ` [PATCH v8 2/2] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-08-09  9:50 ` [PATCH v9 0/2] power: introduce PM QoS interface Huisong Li
2024-08-09  9:50   ` [PATCH v9 1/2] power: introduce PM QoS API on CPU wide Huisong Li
2024-09-10  2:00     ` fengchengwen
2024-09-10  9:32       ` lihuisong (C)
2024-09-12  1:14         ` fengchengwen
2024-08-09  9:50   ` [PATCH v9 2/2] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-09-10  2:26     ` fengchengwen
2024-09-10 12:07       ` lihuisong (C)
2024-09-12  1:15         ` fengchengwen
2024-09-12  2:38 ` [PATCH v10 0/2] power: introduce PM QoS interface Huisong Li
2024-09-12  2:38   ` [PATCH v10 1/2] power: introduce PM QoS API on CPU wide Huisong Li
2024-10-13  1:10     ` Stephen Hemminger
2024-10-14 12:19       ` lihuisong (C)
2024-10-15  9:41         ` lihuisong (C)
2024-10-15 15:45           ` Stephen Hemminger
2024-10-17  2:11             ` lihuisong (C)
2024-10-17  3:20               ` Stephen Hemminger
2024-10-17  8:37                 ` lihuisong (C)
2024-10-22  3:10             ` lihuisong (C)
2024-10-14  8:29     ` Konstantin Ananyev
2024-10-15  7:47       ` lihuisong (C)
2024-09-12  2:38   ` [PATCH v10 2/2] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-10-14  8:24     ` Konstantin Ananyev
2024-10-14  8:46       ` Konstantin Ananyev
2024-10-15  7:32       ` lihuisong (C)
2024-10-16  0:24         ` Konstantin Ananyev
2024-10-17  2:25           ` lihuisong (C)
2024-10-17 11:14             ` Konstantin Ananyev
2024-09-12  3:07   ` [PATCH v10 0/2] power: introduce PM QoS interface fengchengwen
2024-10-12  2:07     ` lihuisong (C)
2024-10-14 15:27   ` Stephen Hemminger
2024-10-15  9:30     ` lihuisong (C)
2024-10-21 11:42 ` [PATCH v11 " Huisong Li
2024-10-21 11:42   ` [PATCH v11 1/2] power: introduce PM QoS API on CPU wide Huisong Li
2024-10-22  9:08     ` Konstantin Ananyev
2024-10-22  9:41       ` lihuisong (C)
2024-10-21 11:42   ` [PATCH v11 2/2] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-10-22  9:10     ` Konstantin Ananyev
2024-10-22  9:44       ` lihuisong (C)
2024-10-22 12:15         ` Konstantin Ananyev
2024-10-23  6:27       ` lihuisong (C)
2024-10-23  4:09 ` [PATCH v12 0/3] power: introduce PM QoS interface Huisong Li
2024-10-23  4:09   ` [PATCH v12 1/3] power: introduce PM QoS API on CPU wide Huisong Li
2024-10-23  4:09   ` [PATCH v12 2/3] examples/l3fwd-power: fix data overflow when parse command line Huisong Li
2024-10-24 16:34     ` Konstantin Ananyev
2024-10-23  4:09   ` [PATCH v12 3/3] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-10-24 16:44     ` Konstantin Ananyev [this message]
2024-10-25  3:35       ` lihuisong (C)
2024-10-25  9:18 ` [PATCH v13 0/3] power: introduce PM QoS interface Huisong Li
2024-10-25  9:18   ` [PATCH v13 1/3] power: introduce PM QoS API on CPU wide Huisong Li
2024-10-25 12:08     ` Tummala, Sivaprasad
2024-10-25  9:18   ` [PATCH v13 2/3] examples/l3fwd-power: fix data overflow when parse command line Huisong Li
2024-10-25 11:27     ` fengchengwen
2024-10-29  5:48     ` Tummala, Sivaprasad
2024-10-25  9:18   ` [PATCH v13 3/3] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-10-29 13:28 ` [PATCH v14 0/3] power: introduce PM QoS interface Huisong Li
2024-10-29 13:28   ` [PATCH v14 1/3] power: introduce PM QoS API on CPU wide Huisong Li
2024-10-29 13:28   ` [PATCH v14 2/3] examples/l3fwd-power: fix data overflow when parse command line Huisong Li
2024-10-29 13:28   ` [PATCH v14 3/3] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-10-29 13:45     ` Konstantin Ananyev
2024-11-04  9:13   ` [PATCH v14 0/3] power: introduce PM QoS interface lihuisong (C)
2024-11-11  2:25 ` [PATCH v15 " Huisong Li
2024-11-11  2:25   ` [PATCH v15 1/3] power: introduce PM QoS API on CPU wide Huisong Li
2024-11-11 10:18     ` Thomas Monjalon
2024-11-11 12:47       ` lihuisong (C)
2024-11-11  2:25   ` [PATCH v15 2/3] examples/l3fwd-power: fix data overflow when parse command line Huisong Li
2024-11-11  2:25   ` [PATCH v15 3/3] examples/l3fwd-power: add PM QoS configuration Huisong Li
2024-11-11 10:29   ` [PATCH v15 0/3] power: introduce PM QoS interface Thomas Monjalon
2024-11-11  9:14 ` [RESEND PATCH " Huisong Li
2024-11-11  9:14   ` [RESEND PATCH v15 1/3] power: introduce PM QoS API on CPU wide Huisong Li
2024-11-11  9:14   ` [RESEND PATCH v15 2/3] examples/l3fwd-power: fix data overflow when parse command line Huisong Li
2024-11-11  9:14   ` [RESEND PATCH v15 3/3] examples/l3fwd-power: add PM QoS configuration Huisong Li

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=368f291b2d644105aabf47ce7ef12f6c@huawei.com \
    --to=konstantin.ananyev@huawei.com \
    --cc=anatoly.burakov@intel.com \
    --cc=david.hunt@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=fengchengwen@huawei.com \
    --cc=ferruh.yigit@amd.com \
    --cc=lihuisong@huawei.com \
    --cc=liuyonglong@huawei.com \
    --cc=mb@smartsharesystems.com \
    --cc=sivaprasad.tummala@amd.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.