aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rt-graph.c8
-rw-r--r--rt-graph.h6
-rw-r--r--rt-plot-container.c4
-rw-r--r--rt-plot-vcpu.c91
4 files changed, 65 insertions, 44 deletions
diff --git a/rt-graph.c b/rt-graph.c
index f9abcef..b77f9ea 100644
--- a/rt-graph.c
+++ b/rt-graph.c
@@ -664,7 +664,7 @@ int rt_graph_check_server_param(struct graph_info *ginfo, struct record *record,
664int rt_graph_check_server_switch_to(struct graph_info *ginfo, 664int rt_graph_check_server_switch_to(struct graph_info *ginfo,
665 struct record *record, 665 struct record *record,
666 gint *sid, gint *job, 666 gint *sid, gint *job,
667 gint *tid, gint *tjob, 667 gint *tid, gint *tjob, gint *cpu,
668 unsigned long long *ts) 668 unsigned long long *ts)
669{ 669{
670 struct rt_graph_info *rtg_info = &ginfo->rtg_info; 670 struct rt_graph_info *rtg_info = &ginfo->rtg_info;
@@ -684,6 +684,7 @@ int rt_graph_check_server_switch_to(struct graph_info *ginfo,
684 STORE_FIELD(rtg_info, event, sswitch_to, job); 684 STORE_FIELD(rtg_info, event, sswitch_to, job);
685 STORE_FIELD(rtg_info, event, sswitch_to, tid); 685 STORE_FIELD(rtg_info, event, sswitch_to, tid);
686 STORE_FIELD(rtg_info, event, sswitch_to, tjob); 686 STORE_FIELD(rtg_info, event, sswitch_to, tjob);
687 STORE_FIELD(rtg_info, event, sswitch_to, cpu);
687 } 688 }
688 689
689 id = pevent_data_type(pevent, record); 690 id = pevent_data_type(pevent, record);
@@ -692,6 +693,7 @@ int rt_graph_check_server_switch_to(struct graph_info *ginfo,
692 LOAD_INT(rtg_info, record, sswitch_to, job, job); 693 LOAD_INT(rtg_info, record, sswitch_to, job, job);
693 LOAD_INT(rtg_info, record, sswitch_to, tid, tid); 694 LOAD_INT(rtg_info, record, sswitch_to, tid, tid);
694 LOAD_INT(rtg_info, record, sswitch_to, tjob, tjob); 695 LOAD_INT(rtg_info, record, sswitch_to, tjob, tjob);
696 LOAD_INT(rtg_info, record, sswitch_to, cpu, cpu);
695 *ts = get_rts(ginfo, record); 697 *ts = get_rts(ginfo, record);
696 698
697 dprintf(3, "Read server_switch_to(job(%d, %d)): %d\n", 699 dprintf(3, "Read server_switch_to(job(%d, %d)): %d\n",
@@ -709,7 +711,7 @@ int rt_graph_check_server_switch_to(struct graph_info *ginfo,
709int rt_graph_check_server_switch_away(struct graph_info *ginfo, 711int rt_graph_check_server_switch_away(struct graph_info *ginfo,
710 struct record *record, 712 struct record *record,
711 gint *sid, gint *job, 713 gint *sid, gint *job,
712 gint *tid, gint *tjob, 714 gint *tid, gint *tjob, gint *cpu,
713 unsigned long long *ts) 715 unsigned long long *ts)
714{ 716{
715 struct rt_graph_info *rtg_info = &ginfo->rtg_info; 717 struct rt_graph_info *rtg_info = &ginfo->rtg_info;
@@ -729,6 +731,7 @@ int rt_graph_check_server_switch_away(struct graph_info *ginfo,
729 STORE_FIELD(rtg_info, event, sswitch_away, job); 731 STORE_FIELD(rtg_info, event, sswitch_away, job);
730 STORE_FIELD(rtg_info, event, sswitch_away, tid); 732 STORE_FIELD(rtg_info, event, sswitch_away, tid);
731 STORE_FIELD(rtg_info, event, sswitch_away, tjob); 733 STORE_FIELD(rtg_info, event, sswitch_away, tjob);
734 STORE_FIELD(rtg_info, event, sswitch_away, cpu);
732 } 735 }
733 736
734 id = pevent_data_type(pevent, record); 737 id = pevent_data_type(pevent, record);
@@ -737,6 +740,7 @@ int rt_graph_check_server_switch_away(struct graph_info *ginfo,
737 LOAD_INT(rtg_info, record, sswitch_away, job, job); 740 LOAD_INT(rtg_info, record, sswitch_away, job, job);
738 LOAD_INT(rtg_info, record, sswitch_away, tid, tid); 741 LOAD_INT(rtg_info, record, sswitch_away, tid, tid);
739 LOAD_INT(rtg_info, record, sswitch_away, tjob, tjob); 742 LOAD_INT(rtg_info, record, sswitch_away, tjob, tjob);
743 LOAD_INT(rtg_info, record, sswitch_away, tjob, cpu);
740 *ts = get_rts(ginfo, record); 744 *ts = get_rts(ginfo, record);
741 745
742 746
diff --git a/rt-graph.h b/rt-graph.h
index f3a1705..91ce3c0 100644
--- a/rt-graph.h
+++ b/rt-graph.h
@@ -86,12 +86,14 @@ struct rt_graph_info {
86 struct format_field *sswitch_to_job_field; 86 struct format_field *sswitch_to_job_field;
87 struct format_field *sswitch_to_tid_field; 87 struct format_field *sswitch_to_tid_field;
88 struct format_field *sswitch_to_tjob_field; 88 struct format_field *sswitch_to_tjob_field;
89 struct format_field *sswitch_to_cpu_field;
89 90
90 gint server_switch_away_id; 91 gint server_switch_away_id;
91 struct format_field *sswitch_away_sid_field; 92 struct format_field *sswitch_away_sid_field;
92 struct format_field *sswitch_away_job_field; 93 struct format_field *sswitch_away_job_field;
93 struct format_field *sswitch_away_tid_field; 94 struct format_field *sswitch_away_tid_field;
94 struct format_field *sswitch_away_tjob_field; 95 struct format_field *sswitch_away_tjob_field;
96 struct format_field *sswitch_away_cpu_field;
95 97
96 gint server_release_id; 98 gint server_release_id;
97 struct format_field *srelease_sid_field; 99 struct format_field *srelease_sid_field;
@@ -188,11 +190,11 @@ int rt_graph_check_server_param(struct graph_info *ginfo, struct record *record,
188 unsigned long long *period); 190 unsigned long long *period);
189int rt_graph_check_server_switch_to(struct graph_info *ginfo, 191int rt_graph_check_server_switch_to(struct graph_info *ginfo,
190 struct record *record, 192 struct record *record,
191 gint *sid, gint *job, gint *tid, gint *tjob, 193 gint *sid, gint *job, gint *tid, gint *tjob, gint *cpu,
192 unsigned long long *when); 194 unsigned long long *when);
193int rt_graph_check_server_switch_away(struct graph_info *ginfo, 195int rt_graph_check_server_switch_away(struct graph_info *ginfo,
194 struct record *record, 196 struct record *record,
195 gint *sid, gint *job, gint *tid, gint *tjob, 197 gint *sid, gint *job, gint *tid, gint *tjob, gint *cpu,
196 unsigned long long *when); 198 unsigned long long *when);
197int rt_graph_check_server_release(struct graph_info *ginfo, 199int rt_graph_check_server_release(struct graph_info *ginfo,
198 struct record *record, 200 struct record *record,
diff --git a/rt-plot-container.c b/rt-plot-container.c
index b21f9de..623c616 100644
--- a/rt-plot-container.c
+++ b/rt-plot-container.c
@@ -71,7 +71,7 @@ static inline void try_job_update(struct server_iter_args *args, int candidate)
71 71
72static int server_iterator(struct graph_info *ginfo, struct record *record, void *data) 72static int server_iterator(struct graph_info *ginfo, struct record *record, void *data)
73{ 73{
74 int sid, job, tid, tjob, match, ret; 74 int sid, job, tid, tjob, match, ret, cpu;
75 struct server_iter_args *args = data; 75 struct server_iter_args *args = data;
76 unsigned long long when, time = get_rts(ginfo, record); 76 unsigned long long when, time = get_rts(ginfo, record);
77 77
@@ -80,7 +80,7 @@ static int server_iterator(struct graph_info *ginfo, struct record *record, void
80 if (time < args->goal) 80 if (time < args->goal)
81 return 1; 81 return 1;
82 82
83#define ARGS ginfo, record, &sid, &job, &tid, &tjob, &when 83#define ARGS ginfo, record, &sid, &job, &tid, &tjob, &cpu, &when
84 match = rt_graph_check_server_switch_away(ARGS); 84 match = rt_graph_check_server_switch_away(ARGS);
85 if (match && sid == args->match_sid) { 85 if (match && sid == args->match_sid) {
86 /* We were running something */ 86 /* We were running something */
diff --git a/rt-plot-vcpu.c b/rt-plot-vcpu.c
index b04bcfb..60b3d90 100644
--- a/rt-plot-vcpu.c
+++ b/rt-plot-vcpu.c
@@ -43,13 +43,12 @@ static int
43try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info, 43try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info,
44 struct record *record, struct plot_info *info) 44 struct record *record, struct plot_info *info)
45{ 45{
46 int job, sid, tid, tjob, match, ret = 0; 46 int job, sid, tid, tjob, cpu, match, ret = 0;
47 unsigned long long ts; 47 unsigned long long ts;
48 48
49 match = rt_graph_check_server_switch_away(ginfo, record, 49 match = rt_graph_check_server_switch_away(ginfo, record,
50 &sid, &job, 50 &sid, &job,
51 &tid, &tjob, &ts); 51 &tid, &tjob, &cpu, &ts);
52
53 if (match && sid == vcpu_info->sid) { 52 if (match && sid == vcpu_info->sid) {
54 /* This server is no longer running something */ 53 /* This server is no longer running something */
55 update_task_label(vcpu_info, tid, tjob); 54 update_task_label(vcpu_info, tid, tjob);
@@ -76,28 +75,37 @@ try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info,
76 75
77 ret = 1; 76 ret = 1;
78 } else if (vcpu_info->show_server && match && tid == vcpu_info->sid) { 77 } else if (vcpu_info->show_server && match && tid == vcpu_info->sid) {
79 /* This server is no longer running */ 78 info->box = TRUE;
80 update_server_label(vcpu_info, tjob); 79 info->bstart = vcpu_info->server_run_time;
80 info->bend = ts;
81 81
82 check_server(vcpu_info->server_running, vcpu_info, ts, 82 if (!sid) {
83 "stopped running when wasn't running"); 83 /* This server is leaving an undetermined state */
84 check_server(!vcpu_info->task_running || vcpu_info->task_cpu == NO_CPU, 84 vcpu_info->server_run_time = ts;
85 vcpu_info, ts, "stopped running while a task is active");
86 85
87 if (vcpu_info->server_run_time && vcpu_info->server_run_time < ts) { 86 if (vcpu_info->server_running) {
88 info->box = TRUE;
89 if (!sid)
90 info->bcolor = 0; 87 info->bcolor = 0;
91 else 88 info->bfill = TRUE;
92 info->bcolor = hash_cpu(sid - 1); 89 } else {
93 info->bfill = TRUE; 90 info->bcolor = hash_cpu(vcpu_info->server_cpu);
94 info->bstart = vcpu_info->server_run_time; 91 info->bfill = FALSE;
95 info->bend = ts; 92 }
93 } else {
94 /* This server is no longer running */
95 update_server_label(vcpu_info, tjob);
96
97 /* This should always be true. It is drawn just to show
98 * when server state has broken
99 */
100 info->bfill = (vcpu_info->server_running) ? TRUE : FALSE;
101
102 info->bcolor = hash_cpu(cpu);
96 info->blabel = vcpu_info->server_label; 103 info->blabel = vcpu_info->server_label;
104
105 vcpu_info->server_run_time = 0ULL;
106 vcpu_info->server_cpu = NO_CPU;
107 vcpu_info->server_running = FALSE;
97 } 108 }
98 vcpu_info->server_run_time = 0ULL;
99 vcpu_info->server_cpu = NO_CPU;
100 vcpu_info->server_running = FALSE;
101 109
102 ret = 1; 110 ret = 1;
103 } 111 }
@@ -105,11 +113,6 @@ try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info,
105 if (ret) { 113 if (ret) {
106 dprintf(3, "VCPU Switch away tid: %d on %d:%d at %llu\n", 114 dprintf(3, "VCPU Switch away tid: %d on %d:%d at %llu\n",
107 tid, sid, job, ts); 115 tid, sid, job, ts);
108
109 vcpu_info->task_run_time = 0ULL;
110 vcpu_info->task_tid = -1;
111 vcpu_info->task_running = FALSE;
112 vcpu_info->task_cpu = NO_CPU;
113 } 116 }
114 117
115 return ret; 118 return ret;
@@ -118,11 +121,11 @@ try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info,
118static int try_server_switch_to(struct graph_info *ginfo, struct vcpu_info *vcpu_info, 121static int try_server_switch_to(struct graph_info *ginfo, struct vcpu_info *vcpu_info,
119 struct record *record, struct plot_info *info) 122 struct record *record, struct plot_info *info)
120{ 123{
121 int job, sid, tid, tjob, match, ret = 0; 124 int job, sid, tid, tjob, cpu, match, ret = 0;
122 unsigned long long ts; 125 unsigned long long ts;
123 126
124 match = rt_graph_check_server_switch_to(ginfo, record, 127 match = rt_graph_check_server_switch_to(ginfo, record,
125 &sid, &job, &tid, &tjob, &ts); 128 &sid, &job, &tid, &tjob, &cpu, &ts);
126 if (match && sid == vcpu_info->sid) { 129 if (match && sid == vcpu_info->sid) {
127 update_server_label(vcpu_info, job); 130 update_server_label(vcpu_info, job);
128 check_server(!vcpu_info->task_running || vcpu_info->task_cpu == NO_CPU, vcpu_info, ts, 131 check_server(!vcpu_info->task_running || vcpu_info->task_cpu == NO_CPU, vcpu_info, ts,
@@ -137,22 +140,33 @@ static int try_server_switch_to(struct graph_info *ginfo, struct vcpu_info *vcpu
137 140
138 vcpu_info->task_run_time = ts; 141 vcpu_info->task_run_time = ts;
139 vcpu_info->task_cpu = sid; 142 vcpu_info->task_cpu = sid;
140 vcpu_info->server_cpu = record->cpu; 143 vcpu_info->server_cpu = cpu;
141 vcpu_info->task_tid = tid; 144 vcpu_info->task_tid = tid;
142 vcpu_info->task_running = TRUE; 145 vcpu_info->task_running = TRUE;
143 ret = 1; 146 ret = 1;
144 } else if (vcpu_info->show_server && match && tid == vcpu_info->sid) { 147 } else if (vcpu_info->show_server && match && tid == vcpu_info->sid) {
145 /* This server is now running */ 148 if (!sid) {
146 update_server_label(vcpu_info, tjob); 149 /* Server is now in an undetermined state */
150 if (vcpu_info->server_running) {
151 info->box = TRUE;
152 info->bstart = vcpu_info->server_run_time;
153 info->bend = ts;
154 info->blabel = vcpu_info->server_label;
155 info->bfill = TRUE;
156 info->bcolor = hash_cpu(vcpu_info->server_cpu);
157 }
158 } else {
159 /* This server is now running */
160 update_server_label(vcpu_info, tjob);
147 161
148 check_server(vcpu_info->spare || !vcpu_info->server_running || vcpu_info->server_cpu == NO_CPU,
149 vcpu_info, ts, "running server again on %d:%d, run: %d, cpu: %d", sid, job, vcpu_info->server_running, vcpu_info->server_cpu);
150 162
151 vcpu_info->spare = FALSE; 163 vcpu_info->server_running = TRUE;
164 vcpu_info->task_running = FALSE;
165 vcpu_info->task_run_time = ts;
152 166
167 }
168 vcpu_info->server_cpu = cpu;
153 vcpu_info->server_run_time = ts; 169 vcpu_info->server_run_time = ts;
154 vcpu_info->server_cpu = sid;
155 vcpu_info->server_running = TRUE;
156 ret = 1; 170 ret = 1;
157 } 171 }
158 172
@@ -196,7 +210,7 @@ static int try_switch_to(struct graph_info *ginfo, struct vcpu_info *vcpu_info,
196 } 210 }
197 211
198 if (ret) { 212 if (ret) {
199 dprintf(3, "VCPU Switch away on VCPU %d for %d:%d at %llu\n", 213 dprintf(3, "Switch to on VCPU %d for %d:%d at %llu\n",
200 vcpu_info->sid, pid, job, ts); 214 vcpu_info->sid, pid, job, ts);
201 } 215 }
202 return ret; 216 return ret;
@@ -260,6 +274,7 @@ static int try_server_block(struct graph_info *ginfo, struct vcpu_info *vcpu_inf
260 vcpu_info->block_time = ts; 274 vcpu_info->block_time = ts;
261 vcpu_info->block_cpu = record->cpu; 275 vcpu_info->block_cpu = record->cpu;
262 vcpu_info->blocked = TRUE; 276 vcpu_info->blocked = TRUE;
277 vcpu_info->server_running = FALSE;
263 278
264 if (!ts) 279 if (!ts)
265 die("Initally no block time\n"); 280 die("Initally no block time\n");
@@ -495,8 +510,8 @@ int rt_vcpu_plot_record_matches(struct rt_plot_common *rt,
495 unsigned long long dull; 510 unsigned long long dull;
496 511
497#define ARG ginfo, record, &sid, &dint 512#define ARG ginfo, record, &sid, &dint
498 match = rt_graph_check_server_switch_to(ARG, &dint, &dint, &dull) || 513 match = rt_graph_check_server_switch_to(ARG, &dint, &dint, &dint, &dull) ||
499 rt_graph_check_server_switch_away(ARG,&dint, &dint, &dull) || 514 rt_graph_check_server_switch_away(ARG, &dint, &dint, &dint, &dull) ||
500 rt_graph_check_server_completion(ARG, &dull) || 515 rt_graph_check_server_completion(ARG, &dull) ||
501 rt_graph_check_server_release(ARG, &dull, &dull) || 516 rt_graph_check_server_release(ARG, &dull, &dull) ||
502 rt_graph_check_switch_to(ARG, &dull) || 517 rt_graph_check_switch_to(ARG, &dull) ||