DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core
@ 2020-07-14 16:01 Rory Sexton
  2020-07-14 16:01 ` [dpdk-dev] [v4 2/3] examples/vm_power_manager: Allowing power managing of idle cores Rory Sexton
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Rory Sexton @ 2020-07-14 16:01 UTC (permalink / raw)
  To: dev, david.hunt

This modification allows for the branch ratio threshold to be set
per core rather than system wide. This gives greater flexibility to
the branch ration monitoring allowing it to manage different
workloads with different characteristics on the same system.

Signed-off-by: Rory Sexton <rory.sexton@intel.com>
Reviewed-by: David Hunt <david.hunt@intel.com>

---
v4: adding upper limit of 100.0 to branch ratio
---
 examples/vm_power_manager/main.c            | 41 +++++++++++---------
 examples/vm_power_manager/oob_monitor_x86.c |  2 +-
 examples/vm_power_manager/parse.c           | 42 ++++++++++++++++++++-
 examples/vm_power_manager/parse.h           |  3 ++
 examples/vm_power_manager/power_manager.c   |  2 +-
 examples/vm_power_manager/power_manager.h   |  2 +-
 6 files changed, 69 insertions(+), 23 deletions(-)

diff --git a/examples/vm_power_manager/main.c b/examples/vm_power_manager/main.c
index 273bfec29..77797b1e1 100644
--- a/examples/vm_power_manager/main.c
+++ b/examples/vm_power_manager/main.c
@@ -165,15 +165,14 @@ parse_args(int argc, char **argv)
 	static struct option lgopts[] = {
 		{ "mac-updating", no_argument, 0, 1},
 		{ "no-mac-updating", no_argument, 0, 0},
-		{ "core-list", optional_argument, 0, 'l'},
+		{ "core-branch-ratio", optional_argument, 0, 'b'},
 		{ "port-list", optional_argument, 0, 'p'},
-		{ "branch-ratio", optional_argument, 0, 'b'},
 		{NULL, 0, 0, 0}
 	};
 	argvopt = argv;
 	ci = get_core_info();
 
-	while ((opt = getopt_long(argc, argvopt, "l:p:q:T:b:",
+	while ((opt = getopt_long(argc, argvopt, "p:q:T:b:",
 				  lgopts, &option_index)) != EOF) {
 
 		switch (opt) {
@@ -185,7 +184,8 @@ parse_args(int argc, char **argv)
 				return -1;
 			}
 			break;
-		case 'l':
+		case 'b':
+			branch_ratio = BRANCH_RATIO_THRESHOLD;
 			oob_enable = malloc(ci->core_count * sizeof(uint16_t));
 			if (oob_enable == NULL) {
 				printf("Error - Unable to allocate memory\n");
@@ -193,32 +193,37 @@ parse_args(int argc, char **argv)
 			}
 			cnt = parse_set(optarg, oob_enable, ci->core_count);
 			if (cnt < 0) {
-				printf("Invalid core-list - [%s]\n",
+				printf("Invalid core-list section in "
+				       "core-branch-ratio matrix - [%s]\n",
 						optarg);
 				free(oob_enable);
 				break;
 			}
+			cnt = parse_branch_ratio(optarg, &branch_ratio);
+			if (cnt < 0) {
+				printf("Invalid branch-ratio section in "
+				       "core-branch-ratio matrix - [%s]\n",
+						optarg);
+				free(oob_enable);
+				break;
+			}
+			if (branch_ratio <= 0.0 || branch_ratio > 100.0) {
+				printf("invalid branch ratio specified\n");
+				return -1;
+			}
 			for (i = 0; i < ci->core_count; i++) {
 				if (oob_enable[i]) {
-					printf("***Using core %d\n", i);
+					printf("***Using core %d "
+					       "with branch ratio %f\n",
+					       i, branch_ratio);
 					ci->cd[i].oob_enabled = 1;
 					ci->cd[i].global_enabled_cpus = 1;
+					ci->cd[i].branch_ratio_threshold =
+								branch_ratio;
 				}
 			}
 			free(oob_enable);
 			break;
-		case 'b':
-			branch_ratio = 0.0;
-			if (strlen(optarg))
-				branch_ratio = atof(optarg);
-			if (branch_ratio <= 0.0) {
-				printf("invalid branch ratio specified\n");
-				return -1;
-			}
-			ci->branch_ratio_threshold = branch_ratio;
-			printf("***Setting branch ratio to %f\n",
-					branch_ratio);
-			break;
 		/* long options */
 		case 0:
 			break;
diff --git a/examples/vm_power_manager/oob_monitor_x86.c b/examples/vm_power_manager/oob_monitor_x86.c
index aecfcb2eb..3c514475f 100644
--- a/examples/vm_power_manager/oob_monitor_x86.c
+++ b/examples/vm_power_manager/oob_monitor_x86.c
@@ -109,7 +109,7 @@ apply_policy(int core)
 	 * down. Each core_details struct has it's own array.
 	 */
 	freq_window_idx = ci->cd[core].freq_window_idx;
-	if (ratio > ci->branch_ratio_threshold)
+	if (ratio > ci->cd[core].branch_ratio_threshold)
 		ci->cd[core].freq_directions[freq_window_idx] = 1;
 	else
 		ci->cd[core].freq_directions[freq_window_idx] = 0;
diff --git a/examples/vm_power_manager/parse.c b/examples/vm_power_manager/parse.c
index 8231533b6..8a8dcf05f 100644
--- a/examples/vm_power_manager/parse.c
+++ b/examples/vm_power_manager/parse.c
@@ -60,7 +60,7 @@ parse_set(const char *input, uint16_t set[], unsigned int num)
 				min = idx;
 			else /* avoid continuous '-' */
 				return -1;
-		} else if ((*end == ',') || (*end == '\0')) {
+		} else if ((*end == ',') || (*end == ':') || (*end == '\0')) {
 			max = idx;
 
 			if (min == num)
@@ -75,7 +75,45 @@ parse_set(const char *input, uint16_t set[], unsigned int num)
 			return -1;
 
 		str = end + 1;
-	} while (*end != '\0');
+	} while ((*end != '\0') && (*end != ':'));
+
+	return str - input;
+}
+
+int
+parse_branch_ratio(const char *input, float *branch_ratio)
+{
+	const char *str = input;
+	char *end = NULL;
+
+	while (isblank(*str))
+		str++;
+
+	if (*str == '\0')
+		return -1;
+
+	/* Go straight to the ':' separator if present */
+	while ((*str != '\0') && (*str != ':'))
+		str++;
+
+	/* Branch ratio not specified in args so leave it at default setting */
+	if (*str == '\0')
+		return 0;
+
+	/* Confirm ':' separator present */
+	if (*str != ':')
+		return -1;
+
+	str++;
+	errno = 0;
+	*branch_ratio = strtof(str, &end);
+	if (errno || end == NULL)
+		return -1;
+
+	if (*end != '\0')
+		return -1;
+
+	str = end + 1;
 
 	return str - input;
 }
diff --git a/examples/vm_power_manager/parse.h b/examples/vm_power_manager/parse.h
index a5971e9a2..892dee449 100644
--- a/examples/vm_power_manager/parse.h
+++ b/examples/vm_power_manager/parse.h
@@ -12,6 +12,9 @@ extern "C" {
 int
 parse_set(const char *, uint16_t [], unsigned int);
 
+int
+parse_branch_ratio(const char *input, float *branch_ratio);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/examples/vm_power_manager/power_manager.c b/examples/vm_power_manager/power_manager.c
index cd51d4741..c5cf6bffa 100644
--- a/examples/vm_power_manager/power_manager.c
+++ b/examples/vm_power_manager/power_manager.c
@@ -59,7 +59,6 @@ core_info_init(void)
 	ci = get_core_info();
 
 	ci->core_count = get_nprocs_conf();
-	ci->branch_ratio_threshold = BRANCH_RATIO_THRESHOLD;
 	ci->cd = malloc(ci->core_count * sizeof(struct core_details));
 	memset(ci->cd, 0, ci->core_count * sizeof(struct core_details));
 	if (!ci->cd) {
@@ -68,6 +67,7 @@ core_info_init(void)
 	}
 	for (i = 0; i < ci->core_count; i++) {
 		ci->cd[i].global_enabled_cpus = 1;
+		ci->cd[i].branch_ratio_threshold = BRANCH_RATIO_THRESHOLD;
 	}
 	printf("%d cores in system\n", ci->core_count);
 	return 0;
diff --git a/examples/vm_power_manager/power_manager.h b/examples/vm_power_manager/power_manager.h
index e324766b6..d35f8cbe0 100644
--- a/examples/vm_power_manager/power_manager.h
+++ b/examples/vm_power_manager/power_manager.h
@@ -26,12 +26,12 @@ struct core_details {
 	uint16_t freq_directions[FREQ_WINDOW_SIZE];
 	uint16_t freq_window_idx;
 	uint16_t freq_state;
+	float branch_ratio_threshold;
 };
 
 struct core_info {
 	uint16_t core_count;
 	struct core_details *cd;
-	float branch_ratio_threshold;
 };
 
 #define BRANCH_RATIO_THRESHOLD 0.1
-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [dpdk-dev] [v4 2/3] examples/vm_power_manager: Allowing power managing of idle cores
  2020-07-14 16:01 [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core Rory Sexton
@ 2020-07-14 16:01 ` Rory Sexton
  2020-07-15 15:09   ` Pattan, Reshma
  2020-07-14 16:02 ` [dpdk-dev] [v4 3/3] doc: update vm_power_manager cmdline options in doc Rory Sexton
  2020-07-15 15:08 ` [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core Pattan, Reshma
  2 siblings, 1 reply; 9+ messages in thread
From: Rory Sexton @ 2020-07-14 16:01 UTC (permalink / raw)
  To: dev, david.hunt

This change is required to allow the branch ratio algorithm to
power manage cores with no workload running on them. This is
useful both when idle cores don't use C-states and for a number of
hyperthreading scenarios.

Signed-off-by: Rory Sexton <rory.sexton@intel.com>
Reviewed-by: David Hunt <david.hunt@intel.com>

---
v4: no changes
---
 examples/vm_power_manager/oob_monitor_x86.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/examples/vm_power_manager/oob_monitor_x86.c b/examples/vm_power_manager/oob_monitor_x86.c
index 3c514475f..a5b1c168c 100644
--- a/examples/vm_power_manager/oob_monitor_x86.c
+++ b/examples/vm_power_manager/oob_monitor_x86.c
@@ -96,12 +96,12 @@ apply_policy(int core)
 	g_branch_misses = miss_diff;
 
 	if (hits_diff < (INTERVAL*100)) {
-		/* Likely no workload running on this core. Skip. */
-		return -1.0;
+		/* Likely no workload running on this core. */
+		ratio = 0.0;
+	} else {
+		ratio = (float)miss_diff * (float)100 / (float)hits_diff;
 	}
 
-	ratio = (float)miss_diff * (float)100 / (float)hits_diff;
-
 	/*
 	 * Store the last few directions that the ratio indicates
 	 * we should take. If there's on 'up', then we scale up
-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [dpdk-dev] [v4 3/3] doc: update vm_power_manager cmdline options in doc
  2020-07-14 16:01 [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core Rory Sexton
  2020-07-14 16:01 ` [dpdk-dev] [v4 2/3] examples/vm_power_manager: Allowing power managing of idle cores Rory Sexton
@ 2020-07-14 16:02 ` Rory Sexton
  2020-07-15 15:15   ` Pattan, Reshma
  2020-07-17 12:31   ` Thomas Monjalon
  2020-07-15 15:08 ` [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core Pattan, Reshma
  2 siblings, 2 replies; 9+ messages in thread
From: Rory Sexton @ 2020-07-14 16:02 UTC (permalink / raw)
  To: dev, david.hunt

Updating the vm_power_manager docs to reflect changes made in
previous patches in set.

Signed-off-by: Rory Sexton <rory.sexton@intel.com>
Reviewed-by: David Hunt <david.hunt@intel.com>

---
v4: no changes
---
 doc/guides/sample_app_ug/vm_power_management.rst | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/doc/guides/sample_app_ug/vm_power_management.rst b/doc/guides/sample_app_ug/vm_power_management.rst
index e98277ccb..1b6de8e93 100644
--- a/doc/guides/sample_app_ug/vm_power_management.rst
+++ b/doc/guides/sample_app_ug/vm_power_management.rst
@@ -410,19 +410,21 @@ There are a couple of command line parameters for enabling the out-of-band
 monitoring of branch ratios on cores doing busy polling using PMDs as
 described below:
 
-``--core-list {list of cores}``
+``--core-branch-ratio {list of cores}:{branch ratio for listed cores}``
    Specify the list of cores to monitor the ratio of branch misses
    to branch hits.  A tightly-polling PMD thread has a very low
    branch ratio, therefore the core frequency scales down to the
    minimum allowed value. On receiving packets, the code path changes,
    causing the branch ratio to increase. When the ratio goes above
    the ratio threshold, the core frequency scales up to the maximum
-   allowed value.
-
-``--branch-ratio {ratio}``
-   Specify a floating-point number that identifies the threshold at which
-   to scale up or down for the given workload. The default branch ratio
-   is 0.01 and needs adjustment for different workloads.
+   allowed value. The specified branch-ratio is a floating point number
+   that identifies the threshold at which to scale up or down for the
+   elements of the core-list. If not included the default branch ratio of
+   0.01 but will need adjustment for different workloads
+
+   This parameter can be used multiple times for different sets of cores.
+   The branch ratio mechanism can also be useful for non-PMD cores and
+   hyper-threaded environments where C-States are disabled.
 
 
 Compiling and Running the Guest Applications
-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core
  2020-07-14 16:01 [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core Rory Sexton
  2020-07-14 16:01 ` [dpdk-dev] [v4 2/3] examples/vm_power_manager: Allowing power managing of idle cores Rory Sexton
  2020-07-14 16:02 ` [dpdk-dev] [v4 3/3] doc: update vm_power_manager cmdline options in doc Rory Sexton
@ 2020-07-15 15:08 ` Pattan, Reshma
  2020-07-17 12:40   ` Thomas Monjalon
  2 siblings, 1 reply; 9+ messages in thread
From: Pattan, Reshma @ 2020-07-15 15:08 UTC (permalink / raw)
  To: Sexton, Rory, dev, Hunt, David



> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Rory Sexton
> Sent: Tuesday, July 14, 2020 5:02 PM
> To: dev@dpdk.org; Hunt, David <david.hunt@intel.com>
> Subject: [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio
> threshold per core
> 
> This modification allows for the branch ratio threshold to be set per core rather
> than system wide. This gives greater flexibility to the branch ration monitoring

Small typo ration ->ratio

> Signed-off-by: Rory Sexton <rory.sexton@intel.com>
> Reviewed-by: David Hunt <david.hunt@intel.com>

>---
>v4: adding upper limit of 100.0 to branch ratio
>---

The upper limit changes looks fine to  me.

Small nitpick that the commit headline should be in lower case, same applicable to other patches.
You can take care this next time if you are spinning the another version and keep my ack.

Acked-by: Reshma Pattan <reshma.pattan@intel.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [v4 2/3] examples/vm_power_manager: Allowing power managing of idle cores
  2020-07-14 16:01 ` [dpdk-dev] [v4 2/3] examples/vm_power_manager: Allowing power managing of idle cores Rory Sexton
@ 2020-07-15 15:09   ` Pattan, Reshma
  0 siblings, 0 replies; 9+ messages in thread
From: Pattan, Reshma @ 2020-07-15 15:09 UTC (permalink / raw)
  To: Sexton, Rory, dev, Hunt, David



> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Rory Sexton
> Sent: Tuesday, July 14, 2020 5:02 PM
> To: dev@dpdk.org; Hunt, David <david.hunt@intel.com>
> Subject: [dpdk-dev] [v4 2/3] examples/vm_power_manager: Allowing power
> managing of idle cores
> 
> This change is required to allow the branch ratio algorithm to power manage
> cores with no workload running on them. This is useful both when idle cores
> don't use C-states and for a number of hyperthreading scenarios.
> 
> Signed-off-by: Rory Sexton <rory.sexton@intel.com>
> Reviewed-by: David Hunt <david.hunt@intel.com>
> 
> ---
> v4: no changes
> ---

Acked-by: Reshma pattan <reshma.pattan@intel.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [v4 3/3] doc: update vm_power_manager cmdline options in doc
  2020-07-14 16:02 ` [dpdk-dev] [v4 3/3] doc: update vm_power_manager cmdline options in doc Rory Sexton
@ 2020-07-15 15:15   ` Pattan, Reshma
  2020-07-17 12:31   ` Thomas Monjalon
  1 sibling, 0 replies; 9+ messages in thread
From: Pattan, Reshma @ 2020-07-15 15:15 UTC (permalink / raw)
  To: Sexton, Rory, dev, Hunt, David



> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Rory Sexton
> Signed-off-by: Rory Sexton <rory.sexton@intel.com>
> Reviewed-by: David Hunt <david.hunt@intel.com>
> 
> ---
> v4: no changes
> ---

Acked-by: Reshma Pattan <reshma.pattan@intel.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [v4 3/3] doc: update vm_power_manager cmdline options in doc
  2020-07-14 16:02 ` [dpdk-dev] [v4 3/3] doc: update vm_power_manager cmdline options in doc Rory Sexton
  2020-07-15 15:15   ` Pattan, Reshma
@ 2020-07-17 12:31   ` Thomas Monjalon
  1 sibling, 0 replies; 9+ messages in thread
From: Thomas Monjalon @ 2020-07-17 12:31 UTC (permalink / raw)
  To: Rory Sexton; +Cc: dev, david.hunt

14/07/2020 18:02, Rory Sexton:
> Updating the vm_power_manager docs to reflect changes made in
> previous patches in set.

For info, the doc must be updated atomically with the code.




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core
  2020-07-15 15:08 ` [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core Pattan, Reshma
@ 2020-07-17 12:40   ` Thomas Monjalon
  2020-07-20 10:26     ` Sexton, Rory
  0 siblings, 1 reply; 9+ messages in thread
From: Thomas Monjalon @ 2020-07-17 12:40 UTC (permalink / raw)
  To: Sexton, Rory; +Cc: dev, Hunt, David, Pattan, Reshma

15/07/2020 17:08, Pattan, Reshma:
> From: Rory Sexton
> > 
> > This modification allows for the branch ratio threshold to be set per core rather
> > than system wide. This gives greater flexibility to the branch ration monitoring
> 
> Small typo ration ->ratio
> 
> > Signed-off-by: Rory Sexton <rory.sexton@intel.com>
> > Reviewed-by: David Hunt <david.hunt@intel.com>
> 
> >---
> >v4: adding upper limit of 100.0 to branch ratio
> >---
> 
> The upper limit changes looks fine to  me.
> 
> Small nitpick that the commit headline should be in lower case, same applicable to other patches.
> You can take care this next time if you are spinning the another version and keep my ack.
> 
> Acked-by: Reshma Pattan <reshma.pattan@intel.com>

Series applied with minor changes and doc squashed.

2 more comments for next contributions:
- use a cover letter if there are multiple patches
- please use --in-reply-to to thread all versions with the first one



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core
  2020-07-17 12:40   ` Thomas Monjalon
@ 2020-07-20 10:26     ` Sexton, Rory
  0 siblings, 0 replies; 9+ messages in thread
From: Sexton, Rory @ 2020-07-20 10:26 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev, Hunt, David, Pattan, Reshma

Thanks for merge and thanks for feedback for next contribution.

> 
> Series applied with minor changes and doc squashed.
> 
> 2 more comments for next contributions:
> - use a cover letter if there are multiple patches
> - please use --in-reply-to to thread all versions with the first one



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-07-20 10:27 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-14 16:01 [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core Rory Sexton
2020-07-14 16:01 ` [dpdk-dev] [v4 2/3] examples/vm_power_manager: Allowing power managing of idle cores Rory Sexton
2020-07-15 15:09   ` Pattan, Reshma
2020-07-14 16:02 ` [dpdk-dev] [v4 3/3] doc: update vm_power_manager cmdline options in doc Rory Sexton
2020-07-15 15:15   ` Pattan, Reshma
2020-07-17 12:31   ` Thomas Monjalon
2020-07-15 15:08 ` [dpdk-dev] [v4 1/3] examples/vm_power_manager: Make branch ratio threshold per core Pattan, Reshma
2020-07-17 12:40   ` Thomas Monjalon
2020-07-20 10:26     ` Sexton, Rory

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git