lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1431113344-22579-3-git-send-email-jbacik@fb.com>
Date:	Fri, 8 May 2015 15:29:01 -0400
From:	Josef Bacik <jbacik@...com>
To:	<rostedt@...dmis.org>, <linux-kernel@...r.kernel.org>,
	<kernel-team@...com>
Subject: [PATCH 2/5] trace-cmd: group schedule stacktraces together with --merge

With --merge we want to be able to merge the scheduling information as well so
we can see how the whole app spent its time.  This is a little tricky because we
have to sort based on comm instead of pid.  It works out well enough because we
store the intermediate information in the per task hash, but we want to group
the final information together.

Signed-off-by: Josef Bacik <jbacik@...com>
---
 trace-profile.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/trace-profile.c b/trace-profile.c
index bd775e8..eee026e 100644
--- a/trace-profile.c
+++ b/trace-profile.c
@@ -985,6 +985,7 @@ static int handle_sched_switch_event(struct handle_data *h,
 	unsigned long long prev_pid;
 	unsigned long long prev_state;
 	unsigned long long next_pid;
+	unsigned long long val = 0;
 	struct start_data *start;
 
 	/* pid_field holds prev_pid, data_field holds prev_state */
@@ -1019,6 +1020,12 @@ static int handle_sched_switch_event(struct handle_data *h,
 	if (!task->comm)
 		add_task_comm(h, task, h->switch_next_comm, record);
 
+	if (task->comm && task->group) {
+		char *str = task->comm;
+		while (*str) val += (int)*(str++);
+	} else
+		val = next_pid;
+
 	/*
 	 * If the next task was blocked, it required a wakeup to
 	 * restart, and there should be one.
@@ -1028,10 +1035,10 @@ static int handle_sched_switch_event(struct handle_data *h,
 	 *
 	 * event_data->start holds the sched_wakeup event data.
 	 */
-	find_and_update_start(task, event_data->start, record->ts, next_pid);
+	find_and_update_start(task, event_data->start, record->ts, val);
 
 	/* Look for this task if it was preempted (no wakeup found). */
-	find_and_update_start(task, event_data, record->ts, next_pid);
+	find_and_update_start(task, event_data, record->ts, val);
 
 	return 0;
 }
@@ -1186,6 +1193,7 @@ static int handle_sched_wakeup_event(struct handle_data *h,
 	struct task_data *task = NULL;
 	struct start_data *start;
 	unsigned long long success;
+	unsigned long long val = 0;
 
 	proxy = find_task(h, pid);
 
@@ -1224,11 +1232,17 @@ static int handle_sched_wakeup_event(struct handle_data *h,
 	 */
 	proxy->proxy = task;
 
+	if (task->comm && task->group) {
+		char *str = task->comm;
+		while (*str) val += (int)*(str++);
+	} else
+		val = pid;
+
 	/* There should be a blocked schedule out of this task */
-	find_and_update_start(task, event_data->start, record->ts, pid);
+	find_and_update_start(task, event_data->start, record->ts, val);
 
 	/* Set this up for timing how long the wakeup takes */
-	start = add_start(task, event_data, record, pid, pid);
+	start = add_start(task, event_data, record, val, val);
 	task->last_event = NULL;
 	task->last_start = start;
 
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ