All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] cpupower: implement the multi-cpu monitoring of programs
@ 2021-05-12 11:26 Hamza Mahfooz
  2021-05-12 11:26 ` [PATCH 2/2] cpupower: removed a completed task from the list Hamza Mahfooz
  2021-05-12 14:44 ` [PATCH 1/2] cpupower: implement the multi-cpu monitoring of programs Shuah Khan
  0 siblings, 2 replies; 5+ messages in thread
From: Hamza Mahfooz @ 2021-05-12 11:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Thomas Renninger, Shuah Khan, linux-pm, Hamza Mahfooz,
	Janakarajan Natarajan

If we look inside cpupower/ToDo, the current 6th point makes mention of
a method to implement multi-cpu monitoring without introducing noise to
the tested program itself.

Suggested-by: Janakarajan Natarajan <Janakarajan.Natarajan@amd.com>
Signed-off-by: Hamza Mahfooz <someguy@effective-light.com>
---
 .../utils/idle_monitor/cpupower-monitor.c     | 28 +++++++++++++------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/tools/power/cpupower/utils/idle_monitor/cpupower-monitor.c b/tools/power/cpupower/utils/idle_monitor/cpupower-monitor.c
index 7c77045fef52..5fc9b38be4e5 100644
--- a/tools/power/cpupower/utils/idle_monitor/cpupower-monitor.c
+++ b/tools/power/cpupower/utils/idle_monitor/cpupower-monitor.c
@@ -278,7 +278,7 @@ void list_monitors(void)
 	}
 }
 
-int fork_it(char **argv)
+int fork_it(int cpu, char **argv)
 {
 	int status;
 	unsigned int num;
@@ -315,9 +315,9 @@ int fork_it(char **argv)
 
 	timediff = timespec_diff_us(start, end);
 	if (WIFEXITED(status))
-		printf(_("%s took %.5f seconds and exited with status %d\n"),
-			argv[0], timediff / (1000.0 * 1000),
-			WEXITSTATUS(status));
+		printf(_("cpu %d: %s took %.5f seconds and exited with status %d\n"),
+			cpu, argv[0],
+			timediff / (1000.0 * 1000), WEXITSTATUS(status));
 	return 0;
 }
 
@@ -388,7 +388,8 @@ int cmd_monitor(int argc, char **argv)
 {
 	unsigned int num;
 	struct cpuidle_monitor *test_mon;
-	int cpu;
+	int cpu, status;
+	pid_t child_pid;
 
 	cmdline(argc, argv);
 	cpu_count = get_cpu_topology(&cpu_top);
@@ -440,10 +441,21 @@ int cmd_monitor(int argc, char **argv)
 	/*
 	 * if any params left, it must be a command to fork
 	 */
-	if (argc - optind)
-		fork_it(argv + optind);
-	else
+	if (argc - optind) {
+		for (cpu = 0; cpu < cpu_count; cpu++) {
+			child_pid = fork();
+			if (!child_pid) {
+				bind_cpu(cpu);
+				fork_it(cpu, argv + optind);
+				exit(EXIT_SUCCESS);
+			} else if (waitpid(child_pid, &status, 0) == -1) {
+				perror("waitpid");
+				exit(EXIT_FAILURE);
+			}
+		}
+	} else {
 		do_interval_measure(interval);
+	}
 
 	/* ToDo: Topology parsing needs fixing first to do
 	   this more generically */
-- 
2.31.1


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

end of thread, other threads:[~2021-05-12 21:12 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-05-12 11:26 [PATCH 1/2] cpupower: implement the multi-cpu monitoring of programs Hamza Mahfooz
2021-05-12 11:26 ` [PATCH 2/2] cpupower: removed a completed task from the list Hamza Mahfooz
2021-05-12 14:45   ` Shuah Khan
2021-05-12 20:30     ` Hamza Mahfooz
2021-05-12 14:44 ` [PATCH 1/2] cpupower: implement the multi-cpu monitoring of programs Shuah Khan

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.