diff options
| author | Steven Rostedt <srostedt@redhat.com> | 2011-01-19 21:50:41 -0500 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2011-01-19 21:50:41 -0500 |
| commit | e2fd3f44d10c5ac28727215d65445e7cd9342e49 (patch) | |
| tree | 1b66342dcecc8d21a80d93460f8a73260317ff14 /plugin_sched_switch.c | |
| parent | e2d243799e10c70d4e6ffc25cd9578f62f06b492 (diff) | |
trace-cmd: Change sched switch/wakeup plugin output
The current format for sched_switch and sched_wakeup events is:
trace-cmd-2271 [003] 6201.438152: sched_switch: 2271:120:S ==> 0:120: kworker/0:1
<idle>-0 [002] 6201.438301: sched_wakeup: 0:?:? + 2270:120:? trace-cmd [002] Success
<idle>-0 [002] 6201.438311: sched_switch: 0:120:R ==> 2270:120: trace-cmd
trace-cmd-2270 [002] 6201.438393: sched_switch: 2270:120:S ==> 0:120: kworker/0:1
<idle>-0 [000] 6201.438799: sched_wakeup: 0:?:? + 10:120:? kworker/0:1 [000] Success
<idle>-0 [000] 6201.438839: sched_switch: 0:120:R ==> 10:120: kworker/0:1
Which kinda sucks. Rewrite it to look like.
trace-cmd-2271 [003] 6201.438152: sched_switch: trace-cmd:2271 [120] S ==> kworker/0:1:0 [120]
<idle>-0 [002] 6201.438301: sched_wakeup: trace-cmd:2270 [120] success=1 CPU:002
<idle>-0 [002] 6201.438311: sched_switch: kworker/0:1:0 [120] R ==> trace-cmd:2270 [120]
trace-cmd-2270 [002] 6201.438393: sched_switch: trace-cmd:2270 [120] S ==> kworker/0:1:0 [120]
<idle>-0 [000] 6201.438799: sched_wakeup: kworker/0:1:10 [120] success=1 CPU:000
<idle>-0 [000] 6201.438839: sched_switch: swapper:0 [120] R ==> kworker/0:1:10 [120]
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'plugin_sched_switch.c')
| -rw-r--r-- | plugin_sched_switch.c | 109 |
1 files changed, 47 insertions, 62 deletions
diff --git a/plugin_sched_switch.c b/plugin_sched_switch.c index 7490e16..3872595 100644 --- a/plugin_sched_switch.c +++ b/plugin_sched_switch.c | |||
| @@ -45,59 +45,50 @@ static void write_state(struct trace_seq *s, int val) | |||
| 45 | trace_seq_putc(s, 'R'); | 45 | trace_seq_putc(s, 'R'); |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | static int sched_wakeup_handler(struct trace_seq *s, struct record *record, | 48 | static void write_and_save_comm(struct format_field *field, |
| 49 | struct event_format *event, void *context) | 49 | struct record *record, |
| 50 | struct trace_seq *s, int pid) | ||
| 50 | { | 51 | { |
| 51 | struct format_field *field; | 52 | const char *comm; |
| 52 | unsigned long long val; | 53 | int len; |
| 53 | 54 | ||
| 54 | if (pevent_get_common_field_val(s, event, "common_pid", record, &val, 1)) | 55 | comm = (char *)(record->data + field->offset); |
| 55 | return trace_seq_putc(s, '!'); | 56 | len = s->len; |
| 57 | trace_seq_printf(s, "%.*s", | ||
| 58 | field->size, comm); | ||
| 56 | 59 | ||
| 57 | trace_seq_printf(s, "%lld:", val); | 60 | /* make sure the comm has a \0 at the end. */ |
| 61 | trace_seq_terminate(s); | ||
| 62 | comm = &s->buffer[len]; | ||
| 58 | 63 | ||
| 59 | if (pevent_get_field_val(s, event, "prev_prio", record, &val, 0)) | 64 | /* Help out the comm to ids. This will handle dups */ |
| 60 | trace_seq_puts(s, "?:"); | 65 | pevent_register_comm(field->event->pevent, comm, pid); |
| 61 | else | 66 | } |
| 62 | trace_seq_printf(s, "%lld:", val); | ||
| 63 | |||
| 64 | if (pevent_get_field_val(s, event, "prev_state", record, &val, 0)) | ||
| 65 | trace_seq_putc(s, '?'); | ||
| 66 | else | ||
| 67 | write_state(s, val); | ||
| 68 | 67 | ||
| 69 | trace_seq_puts(s, " + "); | 68 | static int sched_wakeup_handler(struct trace_seq *s, struct record *record, |
| 69 | struct event_format *event, void *context) | ||
| 70 | { | ||
| 71 | struct format_field *field; | ||
| 72 | unsigned long long val; | ||
| 70 | 73 | ||
| 71 | if (pevent_get_field_val(s, event, "pid", record, &val, 1)) | 74 | if (pevent_get_field_val(s, event, "pid", record, &val, 1)) |
| 72 | return trace_seq_putc(s, '!'); | 75 | return trace_seq_putc(s, '!'); |
| 73 | 76 | ||
| 74 | trace_seq_printf(s, "%lld:", val); | 77 | field = pevent_find_any_field(event, "comm"); |
| 75 | 78 | if (field) { | |
| 76 | if (pevent_get_field_val(s, event, "prio", record, &val, 1)) | 79 | write_and_save_comm(field, record, s, val); |
| 77 | return trace_seq_putc(s, '!'); | 80 | trace_seq_putc(s, ':'); |
| 78 | |||
| 79 | trace_seq_printf(s, "%lld:", val); | ||
| 80 | |||
| 81 | if (pevent_get_field_val(s, event, "state", record, &val, 0)) | ||
| 82 | trace_seq_putc(s, '?'); | ||
| 83 | else | ||
| 84 | write_state(s, val); | ||
| 85 | |||
| 86 | trace_seq_putc(s, ' '); | ||
| 87 | |||
| 88 | field = pevent_find_field(event, "comm"); | ||
| 89 | if (!field) { | ||
| 90 | trace_seq_printf(s, "<CANT FIND FIELD %s>", "next_comm"); | ||
| 91 | return trace_seq_putc(s, '!'); | ||
| 92 | } | 81 | } |
| 82 | trace_seq_printf(s, "%lld", val); | ||
| 93 | 83 | ||
| 94 | trace_seq_printf(s, "%.*s", field->size, (char *)(record->data + field->offset)); | 84 | if (pevent_get_field_val(s, event, "prio", record, &val, 0) == 0) |
| 85 | trace_seq_printf(s, " [%lld]", val); | ||
| 95 | 86 | ||
| 96 | if (pevent_get_field_val(s, event, "target_cpu", record, &val, 0) == 0) | 87 | if (pevent_get_field_val(s, event, "success", record, &val, 1) == 0) |
| 97 | trace_seq_printf(s, " [%03llu]", val); | 88 | trace_seq_printf(s, " success=%lld", val); |
| 98 | 89 | ||
| 99 | if (pevent_get_field_val(s, event, "success", record, &val, 0) == 0) | 90 | if (pevent_get_field_val(s, event, "target_cpu", record, &val, 0) == 0) |
| 100 | trace_seq_puts(s, val ? " Success" : " Failed"); | 91 | trace_seq_printf(s, " CPU:%03llu", val); |
| 101 | 92 | ||
| 102 | return 0; | 93 | return 0; |
| 103 | } | 94 | } |
| @@ -111,39 +102,33 @@ static int sched_switch_handler(struct trace_seq *s, struct record *record, | |||
| 111 | if (pevent_get_field_val(s, event, "prev_pid", record, &val, 1)) | 102 | if (pevent_get_field_val(s, event, "prev_pid", record, &val, 1)) |
| 112 | return trace_seq_putc(s, '!'); | 103 | return trace_seq_putc(s, '!'); |
| 113 | 104 | ||
| 114 | trace_seq_printf(s, "%lld:", val); | 105 | field = pevent_find_any_field(event, "prev_comm"); |
| 115 | 106 | if (field) { | |
| 116 | if (pevent_get_field_val(s, event, "prev_prio", record, &val, 1)) | 107 | write_and_save_comm(field, record, s, val); |
| 117 | return trace_seq_putc(s, '!'); | 108 | trace_seq_putc(s, ':'); |
| 109 | } | ||
| 110 | trace_seq_printf(s, "%lld ", val); | ||
| 118 | 111 | ||
| 119 | trace_seq_printf(s, "%lld:", val); | 112 | if (pevent_get_field_val(s, event, "prev_prio", record, &val, 0) == 0) |
| 113 | trace_seq_printf(s, "[%lld] ", val); | ||
| 120 | 114 | ||
| 121 | if (pevent_get_field_val(s, event, "prev_state", record, &val, 1)) | 115 | if (pevent_get_field_val(s, event, "prev_state", record, &val, 0) == 0) |
| 122 | return trace_seq_putc(s, '!'); | 116 | write_state(s, val); |
| 123 | |||
| 124 | write_state(s, val); | ||
| 125 | 117 | ||
| 126 | trace_seq_puts(s, " ==> "); | 118 | trace_seq_puts(s, " ==> "); |
| 127 | 119 | ||
| 128 | if (pevent_get_field_val(s, event, "next_pid", record, &val, 1)) | 120 | if (pevent_get_field_val(s, event, "next_pid", record, &val, 1)) |
| 129 | return trace_seq_putc(s, '!'); | 121 | return trace_seq_putc(s, '!'); |
| 130 | 122 | ||
| 131 | trace_seq_printf(s, "%lld:", val); | ||
| 132 | |||
| 133 | if (pevent_get_field_val(s, event, "next_prio", record, &val, 1)) | ||
| 134 | return trace_seq_putc(s, '!'); | ||
| 135 | |||
| 136 | trace_seq_printf(s, "%lld:", val); | ||
| 137 | |||
| 138 | trace_seq_putc(s, ' '); | ||
| 139 | |||
| 140 | field = pevent_find_any_field(event, "next_comm"); | 123 | field = pevent_find_any_field(event, "next_comm"); |
| 141 | if (!field) { | 124 | if (field) { |
| 142 | trace_seq_printf(s, "<CANT FIND FIELD %s>", "next_comm"); | 125 | write_and_save_comm(field, record, s, val); |
| 143 | return trace_seq_putc(s, '!'); | 126 | trace_seq_putc(s, ':'); |
| 144 | } | 127 | } |
| 128 | trace_seq_printf(s, "%lld", val); | ||
| 145 | 129 | ||
| 146 | trace_seq_printf(s, "%.*s", field->size, (char *)(record->data + field->offset)); | 130 | if (pevent_get_field_val(s, event, "next_prio", record, &val, 0) == 0) |
| 131 | trace_seq_printf(s, " [%lld]", val); | ||
| 147 | 132 | ||
| 148 | return 0; | 133 | return 0; |
| 149 | } | 134 | } |
