diff options
| author | Jonathan Herman <hermanjl@cs.unc.edu> | 2012-04-10 12:24:53 -0400 |
|---|---|---|
| committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2012-04-10 12:24:53 -0400 |
| commit | ce75da68ec7f4b8a8ea5e66459d0828633af67fe (patch) | |
| tree | 9912c75d7984ee6e620edc5f32fe6aca88ee04f9 | |
| parent | 7c67b2cdcd779525a88a9f7173c6d628a98c01c5 (diff) | |
containers: now working with real task systems
| -rw-r--r-- | rt-graph.c | 21 | ||||
| -rw-r--r-- | rt-graph.h | 6 | ||||
| -rw-r--r-- | rt-plot-container.c | 10 | ||||
| -rw-r--r-- | rt-plot-container.h | 2 | ||||
| -rw-r--r-- | rt-plot-cpu.c | 4 | ||||
| -rw-r--r-- | rt-plot-task.c | 18 | ||||
| -rw-r--r-- | rt-plot-vcpu.c | 74 | ||||
| -rw-r--r-- | rt-plot-vtask.c | 98 | ||||
| -rw-r--r-- | rt-plot.c | 15 | ||||
| -rw-r--r-- | rt-plot.h | 8 | ||||
| -rw-r--r-- | trace-graph.c | 2 |
11 files changed, 132 insertions, 126 deletions
| @@ -255,7 +255,7 @@ int rt_graph_check_task_param(struct graph_info *ginfo, | |||
| 255 | if (id == rtg_info->task_param_id) { | 255 | if (id == rtg_info->task_param_id) { |
| 256 | LOAD_INT(rtg_info, record, param, pid, pid); | 256 | LOAD_INT(rtg_info, record, param, pid, pid); |
| 257 | LOAD_LONG(rtg_info, record, param, wcet, &wcet); | 257 | LOAD_LONG(rtg_info, record, param, wcet, &wcet); |
| 258 | LOAD_LONG(rtg_info, record, param, wcet, &period); | 258 | LOAD_LONG(rtg_info, record, param, period, &period); |
| 259 | 259 | ||
| 260 | ret = 1; | 260 | ret = 1; |
| 261 | dprintf(3, "Read task_param record for task %d (%llu, %llu)\n", | 261 | dprintf(3, "Read task_param record for task %d (%llu, %llu)\n", |
| @@ -433,6 +433,7 @@ int rt_graph_check_task_completion(struct graph_info *ginfo, | |||
| 433 | if (id == rtg_info->task_completion_id) { | 433 | if (id == rtg_info->task_completion_id) { |
| 434 | LOAD_INT(rtg_info, record, completion, pid, pid); | 434 | LOAD_INT(rtg_info, record, completion, pid, pid); |
| 435 | LOAD_INT(rtg_info, record, completion, job, job); | 435 | LOAD_INT(rtg_info, record, completion, job, job); |
| 436 | *ts = get_rts(ginfo, record); | ||
| 436 | 437 | ||
| 437 | ret = 1; | 438 | ret = 1; |
| 438 | dprintf(3, "Read task_completion (%d) record for job %d:%d " | 439 | dprintf(3, "Read task_completion (%d) record for job %d:%d " |
| @@ -618,7 +619,8 @@ int rt_graph_check_server_param(struct graph_info *ginfo, struct record *record, | |||
| 618 | */ | 619 | */ |
| 619 | int rt_graph_check_server_switch_to(struct graph_info *ginfo, | 620 | int rt_graph_check_server_switch_to(struct graph_info *ginfo, |
| 620 | struct record *record, | 621 | struct record *record, |
| 621 | gint *sid, gint *job, gint *tid, | 622 | gint *sid, gint *job, |
| 623 | gint *tid, gint *tjob, | ||
| 622 | unsigned long long *ts) | 624 | unsigned long long *ts) |
| 623 | { | 625 | { |
| 624 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; | 626 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; |
| @@ -637,6 +639,7 @@ int rt_graph_check_server_switch_to(struct graph_info *ginfo, | |||
| 637 | STORE_FIELD(rtg_info, event, sswitch_to, sid); | 639 | STORE_FIELD(rtg_info, event, sswitch_to, sid); |
| 638 | STORE_FIELD(rtg_info, event, sswitch_to, job); | 640 | STORE_FIELD(rtg_info, event, sswitch_to, job); |
| 639 | STORE_FIELD(rtg_info, event, sswitch_to, tid); | 641 | STORE_FIELD(rtg_info, event, sswitch_to, tid); |
| 642 | STORE_FIELD(rtg_info, event, sswitch_to, tjob); | ||
| 640 | } | 643 | } |
| 641 | 644 | ||
| 642 | id = pevent_data_type(pevent, record); | 645 | id = pevent_data_type(pevent, record); |
| @@ -644,9 +647,10 @@ int rt_graph_check_server_switch_to(struct graph_info *ginfo, | |||
| 644 | LOAD_INT(rtg_info, record, sswitch_to, sid, sid); | 647 | LOAD_INT(rtg_info, record, sswitch_to, sid, sid); |
| 645 | LOAD_INT(rtg_info, record, sswitch_to, job, job); | 648 | LOAD_INT(rtg_info, record, sswitch_to, job, job); |
| 646 | LOAD_INT(rtg_info, record, sswitch_to, tid, tid); | 649 | LOAD_INT(rtg_info, record, sswitch_to, tid, tid); |
| 650 | LOAD_INT(rtg_info, record, sswitch_to, tjob, tjob); | ||
| 647 | *ts = get_rts(ginfo, record); | 651 | *ts = get_rts(ginfo, record); |
| 648 | 652 | ||
| 649 | dprintf(3, "Read server_switch_to(job(%d, %d)): %d", | 653 | dprintf(3, "Read server_switch_to(job(%d, %d)): %d\n", |
| 650 | *sid, *job, *tid); | 654 | *sid, *job, *tid); |
| 651 | ret = 1; | 655 | ret = 1; |
| 652 | } | 656 | } |
| @@ -660,7 +664,8 @@ int rt_graph_check_server_switch_to(struct graph_info *ginfo, | |||
| 660 | */ | 664 | */ |
| 661 | int rt_graph_check_server_switch_away(struct graph_info *ginfo, | 665 | int rt_graph_check_server_switch_away(struct graph_info *ginfo, |
| 662 | struct record *record, | 666 | struct record *record, |
| 663 | gint *sid, gint *job, gint *tid, | 667 | gint *sid, gint *job, |
| 668 | gint *tid, gint *tjob, | ||
| 664 | unsigned long long *ts) | 669 | unsigned long long *ts) |
| 665 | { | 670 | { |
| 666 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; | 671 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; |
| @@ -679,6 +684,7 @@ int rt_graph_check_server_switch_away(struct graph_info *ginfo, | |||
| 679 | STORE_FIELD(rtg_info, event, sswitch_away, sid); | 684 | STORE_FIELD(rtg_info, event, sswitch_away, sid); |
| 680 | STORE_FIELD(rtg_info, event, sswitch_away, job); | 685 | STORE_FIELD(rtg_info, event, sswitch_away, job); |
| 681 | STORE_FIELD(rtg_info, event, sswitch_away, tid); | 686 | STORE_FIELD(rtg_info, event, sswitch_away, tid); |
| 687 | STORE_FIELD(rtg_info, event, sswitch_away, tjob); | ||
| 682 | } | 688 | } |
| 683 | 689 | ||
| 684 | id = pevent_data_type(pevent, record); | 690 | id = pevent_data_type(pevent, record); |
| @@ -686,10 +692,11 @@ int rt_graph_check_server_switch_away(struct graph_info *ginfo, | |||
| 686 | LOAD_INT(rtg_info, record, sswitch_away, sid, sid); | 692 | LOAD_INT(rtg_info, record, sswitch_away, sid, sid); |
| 687 | LOAD_INT(rtg_info, record, sswitch_away, job, job); | 693 | LOAD_INT(rtg_info, record, sswitch_away, job, job); |
| 688 | LOAD_INT(rtg_info, record, sswitch_away, tid, tid); | 694 | LOAD_INT(rtg_info, record, sswitch_away, tid, tid); |
| 695 | LOAD_INT(rtg_info, record, sswitch_away, tjob, tjob); | ||
| 689 | *ts = get_rts(ginfo, record); | 696 | *ts = get_rts(ginfo, record); |
| 690 | 697 | ||
| 691 | 698 | ||
| 692 | dprintf(3, "Read server_switch_away(job(%d, %d)): %d", | 699 | dprintf(3, "Read server_switch_away(job(%d, %d)): %d\n", |
| 693 | *sid, *job, *tid); | 700 | *sid, *job, *tid); |
| 694 | ret = 1; | 701 | ret = 1; |
| 695 | } | 702 | } |
| @@ -719,7 +726,7 @@ int rt_graph_check_server_release(struct graph_info *ginfo, | |||
| 719 | if (!event) | 726 | if (!event) |
| 720 | goto out; | 727 | goto out; |
| 721 | rtg_info->server_release_id = event->id; | 728 | rtg_info->server_release_id = event->id; |
| 722 | dprintf(2, "Found server_switch_away id %d\n", event->id); | 729 | dprintf(2, "Found server_release id %d\n", event->id); |
| 723 | STORE_FIELD(rtg_info, event, srelease, sid); | 730 | STORE_FIELD(rtg_info, event, srelease, sid); |
| 724 | STORE_FIELD(rtg_info, event, srelease, job); | 731 | STORE_FIELD(rtg_info, event, srelease, job); |
| 725 | STORE_FIELD(rtg_info, event, srelease, release); | 732 | STORE_FIELD(rtg_info, event, srelease, release); |
| @@ -762,7 +769,7 @@ int rt_graph_check_server_completion(struct graph_info *ginfo, | |||
| 762 | if (!event) | 769 | if (!event) |
| 763 | goto out; | 770 | goto out; |
| 764 | rtg_info->server_completion_id = event->id; | 771 | rtg_info->server_completion_id = event->id; |
| 765 | dprintf(2, "Found server_switch_away id %d\n", event->id); | 772 | dprintf(2, "Found server_completion id %d\n", event->id); |
| 766 | STORE_FIELD(rtg_info, event, scompletion, sid); | 773 | STORE_FIELD(rtg_info, event, scompletion, sid); |
| 767 | STORE_FIELD(rtg_info, event, scompletion, job); | 774 | STORE_FIELD(rtg_info, event, scompletion, job); |
| 768 | } | 775 | } |
| @@ -76,11 +76,13 @@ struct rt_graph_info { | |||
| 76 | struct format_field *sswitch_to_sid_field; | 76 | struct format_field *sswitch_to_sid_field; |
| 77 | struct format_field *sswitch_to_job_field; | 77 | struct format_field *sswitch_to_job_field; |
| 78 | struct format_field *sswitch_to_tid_field; | 78 | struct format_field *sswitch_to_tid_field; |
| 79 | struct format_field *sswitch_to_tjob_field; | ||
| 79 | 80 | ||
| 80 | gint server_switch_away_id; | 81 | gint server_switch_away_id; |
| 81 | struct format_field *sswitch_away_sid_field; | 82 | struct format_field *sswitch_away_sid_field; |
| 82 | struct format_field *sswitch_away_job_field; | 83 | struct format_field *sswitch_away_job_field; |
| 83 | struct format_field *sswitch_away_tid_field; | 84 | struct format_field *sswitch_away_tid_field; |
| 85 | struct format_field *sswitch_away_tjob_field; | ||
| 84 | 86 | ||
| 85 | gint server_release_id; | 87 | gint server_release_id; |
| 86 | struct format_field *srelease_sid_field; | 88 | struct format_field *srelease_sid_field; |
| @@ -180,11 +182,11 @@ int rt_graph_check_server_param(struct graph_info *ginfo, struct record *record, | |||
| 180 | unsigned long long *period); | 182 | unsigned long long *period); |
| 181 | int rt_graph_check_server_switch_to(struct graph_info *ginfo, | 183 | int rt_graph_check_server_switch_to(struct graph_info *ginfo, |
| 182 | struct record *record, | 184 | struct record *record, |
| 183 | gint *sid, gint *job, gint *tid, | 185 | gint *sid, gint *job, gint *tid, gint *tjob, |
| 184 | unsigned long long *when); | 186 | unsigned long long *when); |
| 185 | int rt_graph_check_server_switch_away(struct graph_info *ginfo, | 187 | int rt_graph_check_server_switch_away(struct graph_info *ginfo, |
| 186 | struct record *record, | 188 | struct record *record, |
| 187 | gint *sid, gint *job, gint *tid, | 189 | gint *sid, gint *job, gint *tid, gint *tjob, |
| 188 | unsigned long long *when); | 190 | unsigned long long *when); |
| 189 | int rt_graph_check_server_release(struct graph_info *ginfo, | 191 | int rt_graph_check_server_release(struct graph_info *ginfo, |
| 190 | struct record *record, | 192 | struct record *record, |
diff --git a/rt-plot-container.c b/rt-plot-container.c index 97e9fd8..cb814fa 100644 --- a/rt-plot-container.c +++ b/rt-plot-container.c | |||
| @@ -26,11 +26,11 @@ int get_server_info(struct graph_info *ginfo, struct rt_plot_common *rt, | |||
| 26 | int match_sid, unsigned long long time, | 26 | int match_sid, unsigned long long time, |
| 27 | unsigned long long *out_release, | 27 | unsigned long long *out_release, |
| 28 | unsigned long long *out_deadline, | 28 | unsigned long long *out_deadline, |
| 29 | int *out_job, int *out_tid, | 29 | int *out_job, int *out_tid, int *out_tjob, |
| 30 | struct record **out_record) | 30 | struct record **out_record) |
| 31 | { | 31 | { |
| 32 | struct record *record; | 32 | struct record *record; |
| 33 | int sid, job, tid, match, next_cpu, is_running = 0; | 33 | int sid, job, tid, tjob, match, next_cpu, is_running = 0; |
| 34 | unsigned long long when, max_ts; | 34 | unsigned long long when, max_ts; |
| 35 | 35 | ||
| 36 | *out_record = find_rt_record(ginfo, rt, time); | 36 | *out_record = find_rt_record(ginfo, rt, time); |
| @@ -55,10 +55,11 @@ int get_server_info(struct graph_info *ginfo, struct rt_plot_common *rt, | |||
| 55 | break; | 55 | break; |
| 56 | 56 | ||
| 57 | match = rt_graph_check_server_switch_away(ginfo, record, | 57 | match = rt_graph_check_server_switch_away(ginfo, record, |
| 58 | &sid, &job, &tid, | 58 | &sid, &job, &tid, &tjob, |
| 59 | &when); | 59 | &when); |
| 60 | if (match && sid == match_sid) { | 60 | if (match && sid == match_sid) { |
| 61 | *out_tid = tid; | 61 | *out_tid = tid; |
| 62 | *out_tjob = tjob; | ||
| 62 | is_running = 1; | 63 | is_running = 1; |
| 63 | break; | 64 | break; |
| 64 | } | 65 | } |
| @@ -88,8 +89,9 @@ void rt_plot_container(struct graph_info *ginfo, int cid) | |||
| 88 | cont->plotted = TRUE; | 89 | cont->plotted = TRUE; |
| 89 | 90 | ||
| 90 | for (vlist = cont->vcpus; vlist; vlist = vlist->next) { | 91 | for (vlist = cont->vcpus; vlist; vlist = vlist->next) { |
| 91 | insert_vtask(ginfo, cont, vlist); | ||
| 92 | insert_vcpu(ginfo, cont, vlist); | 92 | insert_vcpu(ginfo, cont, vlist); |
| 93 | if (vlist->params.wcet && vlist->params.period) | ||
| 94 | insert_vtask(ginfo, cont, vlist); | ||
| 93 | } | 95 | } |
| 94 | } | 96 | } |
| 95 | 97 | ||
diff --git a/rt-plot-container.h b/rt-plot-container.h index cde5c2f..c96d6e9 100644 --- a/rt-plot-container.h +++ b/rt-plot-container.h | |||
| @@ -17,6 +17,6 @@ int get_server_info(struct graph_info *ginfo, | |||
| 17 | struct rt_plot_common *rt, | 17 | struct rt_plot_common *rt, |
| 18 | int match_sid, unsigned long long time, | 18 | int match_sid, unsigned long long time, |
| 19 | unsigned long long *release, unsigned long long *deadline, | 19 | unsigned long long *release, unsigned long long *deadline, |
| 20 | int *job, int *tid, struct record **record); | 20 | int *job, int *tid, int *tjob, struct record **record); |
| 21 | 21 | ||
| 22 | #endif | 22 | #endif |
diff --git a/rt-plot-cpu.c b/rt-plot-cpu.c index ba380fb..cfc19c3 100644 --- a/rt-plot-cpu.c +++ b/rt-plot-cpu.c | |||
| @@ -57,10 +57,6 @@ is_displayed(struct graph_info *ginfo, int eid) | |||
| 57 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; | 57 | struct rt_graph_info *rtg_info = &ginfo->rtg_info; |
| 58 | return (eid == rtg_info->switch_away_id || | 58 | return (eid == rtg_info->switch_away_id || |
| 59 | eid == rtg_info->switch_to_id || | 59 | eid == rtg_info->switch_to_id || |
| 60 | eid == rtg_info->task_completion_id || | ||
| 61 | eid == rtg_info->task_block_id || | ||
| 62 | eid == rtg_info->task_resume_id || | ||
| 63 | eid == rtg_info->task_release_id || | ||
| 64 | eid == ginfo->event_sched_switch_id); | 60 | eid == ginfo->event_sched_switch_id); |
| 65 | } | 61 | } |
| 66 | 62 | ||
diff --git a/rt-plot-task.c b/rt-plot-task.c index 94c60f1..63f4f20 100644 --- a/rt-plot-task.c +++ b/rt-plot-task.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | #include "trace-graph.h" | 3 | #include "trace-graph.h" |
| 4 | #include "trace-filter.h" | 4 | #include "trace-filter.h" |
| 5 | 5 | ||
| 6 | #define DEBUG_LEVEL 5 | 6 | #define DEBUG_LEVEL 4 |
| 7 | #if DEBUG_LEVEL > 0 | 7 | #if DEBUG_LEVEL > 0 |
| 8 | #define dprintf(l, x...) \ | 8 | #define dprintf(l, x...) \ |
| 9 | do { \ | 9 | do { \ |
| @@ -237,9 +237,7 @@ static int try_block(struct graph_info *ginfo, struct rt_task_info *rtt_info, | |||
| 237 | dprintf(3, "Block for %d on %d at %llu\n", | 237 | dprintf(3, "Block for %d on %d at %llu\n", |
| 238 | pid, record->cpu, ts); | 238 | pid, record->cpu, ts); |
| 239 | ret = 1; | 239 | ret = 1; |
| 240 | } else { | 240 | } |
| 241 | dprintf(3, "%d does not match my pid %d\n", pid, rtt_info->pid); | ||
| 242 | } | ||
| 243 | return ret; | 241 | return ret; |
| 244 | } | 242 | } |
| 245 | 243 | ||
| @@ -259,9 +257,7 @@ static int try_resume(struct graph_info *ginfo, struct rt_task_info *rtt_info, | |||
| 259 | info->bstart = rtt_info->block_time; | 257 | info->bstart = rtt_info->block_time; |
| 260 | info->bend = ts; | 258 | info->bend = ts; |
| 261 | 259 | ||
| 262 | printf("drawing block\n"); | ||
| 263 | if (lid) { | 260 | if (lid) { |
| 264 | printf("Adding label %s\n", rtt_info->block_label); | ||
| 265 | info->blabel = rtt_info->block_label; | 261 | info->blabel = rtt_info->block_label; |
| 266 | } | 262 | } |
| 267 | 263 | ||
| @@ -328,6 +324,7 @@ static int try_switch_to(struct graph_info *ginfo, struct rt_task_info *rtt_info | |||
| 328 | pid, job, record->cpu, ts); | 324 | pid, job, record->cpu, ts); |
| 329 | ret = 1; | 325 | ret = 1; |
| 330 | } | 326 | } |
| 327 | |||
| 331 | return ret; | 328 | return ret; |
| 332 | } | 329 | } |
| 333 | 330 | ||
| @@ -417,8 +414,6 @@ static int rt_task_plot_event(struct graph_info *ginfo, struct graph_plot *plot, | |||
| 417 | struct rt_task_info *rtt_info = plot->private; | 414 | struct rt_task_info *rtt_info = plot->private; |
| 418 | int match; | 415 | int match; |
| 419 | 416 | ||
| 420 | dprintf(4,"%s\n", __FUNCTION__); | ||
| 421 | |||
| 422 | /* No more records, finish what we started */ | 417 | /* No more records, finish what we started */ |
| 423 | if (!record) { | 418 | if (!record) { |
| 424 | do_plot_end(ginfo, rtt_info, info); | 419 | do_plot_end(ginfo, rtt_info, info); |
| @@ -443,8 +438,6 @@ static void rt_task_plot_start(struct graph_info *ginfo, struct graph_plot *plot | |||
| 443 | int i; | 438 | int i; |
| 444 | struct rt_task_info *rtt_info = plot->private; | 439 | struct rt_task_info *rtt_info = plot->private; |
| 445 | 440 | ||
| 446 | dprintf(4,"%s\n", __FUNCTION__); | ||
| 447 | |||
| 448 | rtt_info->run_time = time; | 441 | rtt_info->run_time = time; |
| 449 | rtt_info->block_time = time; | 442 | rtt_info->block_time = time; |
| 450 | rtt_info->run_cpu = NO_CPU; | 443 | rtt_info->run_cpu = NO_CPU; |
| @@ -454,14 +447,13 @@ static void rt_task_plot_start(struct graph_info *ginfo, struct graph_plot *plot | |||
| 454 | for (i = 0; i < 3; i++) | 447 | for (i = 0; i < 3; i++) |
| 455 | rtt_info->first_rels[i] = 0ULL; | 448 | rtt_info->first_rels[i] = 0ULL; |
| 456 | rtt_info->last_job = -1; | 449 | rtt_info->last_job = -1; |
| 457 | update_job(rtt_info, 0); | 450 | update_job(rtt_info, -1); |
| 458 | update_lid(rtt_info, 0); | 451 | update_lid(rtt_info, 0); |
| 459 | } | 452 | } |
| 460 | 453 | ||
| 461 | static void rt_task_plot_destroy(struct graph_info *ginfo, struct graph_plot *plot) | 454 | static void rt_task_plot_destroy(struct graph_info *ginfo, struct graph_plot *plot) |
| 462 | { | 455 | { |
| 463 | struct rt_task_info *rtt_info = plot->private; | 456 | struct rt_task_info *rtt_info = plot->private; |
| 464 | dprintf(4,"%s\n", __FUNCTION__); | ||
| 465 | trace_graph_plot_remove_all_recs(ginfo, plot); | 457 | trace_graph_plot_remove_all_recs(ginfo, plot); |
| 466 | free(rtt_info->label); | 458 | free(rtt_info->label); |
| 467 | free(rtt_info); | 459 | free(rtt_info); |
| @@ -507,8 +499,6 @@ rt_task_plot_write_header(struct rt_plot_common *rt, | |||
| 507 | unsigned long long release, deadline; | 499 | unsigned long long release, deadline; |
| 508 | struct rt_task_info *rtt_info = (struct rt_task_info*)rt; | 500 | struct rt_task_info *rtt_info = (struct rt_task_info*)rt; |
| 509 | 501 | ||
| 510 | dprintf(4,"%s\n", __FUNCTION__); | ||
| 511 | |||
| 512 | found = get_time_info(ginfo, rtt_info, time, | 502 | found = get_time_info(ginfo, rtt_info, time, |
| 513 | &job, &release, &deadline, &record); | 503 | &job, &release, &deadline, &record); |
| 514 | if (!found) | 504 | if (!found) |
diff --git a/rt-plot-vcpu.c b/rt-plot-vcpu.c index f327f57..0867ff7 100644 --- a/rt-plot-vcpu.c +++ b/rt-plot-vcpu.c | |||
| @@ -19,6 +19,7 @@ static void update_tid(struct vcpu_info *info, int tid) | |||
| 19 | if (tid != info->run_tid) { | 19 | if (tid != info->run_tid) { |
| 20 | info->run_tid = tid; | 20 | info->run_tid = tid; |
| 21 | snprintf(info->label, LLABEL, "%d", tid); | 21 | snprintf(info->label, LLABEL, "%d", tid); |
| 22 | printf("Upated label to %s\n", info->label); | ||
| 22 | } | 23 | } |
| 23 | } | 24 | } |
| 24 | 25 | ||
| @@ -26,16 +27,16 @@ static int | |||
| 26 | try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | 27 | try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info, |
| 27 | struct record *record, struct plot_info *info) | 28 | struct record *record, struct plot_info *info) |
| 28 | { | 29 | { |
| 29 | int job, sid, tid, match, ret = 0; | 30 | int job, sid, tid, tjob, match, ret = 0; |
| 30 | unsigned long long ts; | 31 | unsigned long long ts; |
| 31 | 32 | ||
| 32 | match = rt_graph_check_server_switch_away(ginfo, record, | 33 | match = rt_graph_check_server_switch_away(ginfo, record, |
| 33 | &sid, &job, | 34 | &sid, &job, |
| 34 | &tid, &ts); | 35 | &tid, &tjob, &ts); |
| 35 | if (match && sid == vcpu_info->sid) { | 36 | if (match && sid == vcpu_info->sid) { |
| 36 | update_tid(vcpu_info, tid); | 37 | update_tid(vcpu_info, tid); |
| 37 | 38 | ||
| 38 | if (vcpu_info->run_time < ts) { | 39 | if (vcpu_info->run_time && vcpu_info->run_time < ts) { |
| 39 | info->box = TRUE; | 40 | info->box = TRUE; |
| 40 | info->bcolor = hash_pid(tid); | 41 | info->bcolor = hash_pid(tid); |
| 41 | info->bfill = vcpu_info->running; | 42 | info->bfill = vcpu_info->running; |
| @@ -48,7 +49,7 @@ try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | |||
| 48 | tid, sid, job, ts); | 49 | tid, sid, job, ts); |
| 49 | vcpu_info->run_time = 0ULL; | 50 | vcpu_info->run_time = 0ULL; |
| 50 | vcpu_info->run_cpu = NO_CPU; | 51 | vcpu_info->run_cpu = NO_CPU; |
| 51 | vcpu_info->run_tid = 0; | 52 | vcpu_info->run_tid = -1; |
| 52 | vcpu_info->running = FALSE; | 53 | vcpu_info->running = FALSE; |
| 53 | 54 | ||
| 54 | ret = 1; | 55 | ret = 1; |
| @@ -60,11 +61,11 @@ try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | |||
| 60 | static int try_server_switch_to(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | 61 | static int try_server_switch_to(struct graph_info *ginfo, struct vcpu_info *vcpu_info, |
| 61 | struct record *record, struct plot_info *info) | 62 | struct record *record, struct plot_info *info) |
| 62 | { | 63 | { |
| 63 | int job, sid, tid, match, ret = 0; | 64 | int job, sid, tid, tjob, match, ret = 0; |
| 64 | unsigned long long ts; | 65 | unsigned long long ts; |
| 65 | 66 | ||
| 66 | match = rt_graph_check_server_switch_to(ginfo, record, | 67 | match = rt_graph_check_server_switch_to(ginfo, record, |
| 67 | &sid, &job, &tid, &ts); | 68 | &sid, &job, &tid, &tjob, &ts); |
| 68 | if (match && sid == vcpu_info->sid) { | 69 | if (match && sid == vcpu_info->sid) { |
| 69 | update_tid(vcpu_info, tid); | 70 | update_tid(vcpu_info, tid); |
| 70 | vcpu_info->run_time = ts; | 71 | vcpu_info->run_time = ts; |
| @@ -111,12 +112,14 @@ static int try_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info | |||
| 111 | if (match && pid && pid == vcpu_info->run_tid && vcpu_info->running) { | 112 | if (match && pid && pid == vcpu_info->run_tid && vcpu_info->running) { |
| 112 | vcpu_info->running = FALSE; | 113 | vcpu_info->running = FALSE; |
| 113 | 114 | ||
| 114 | info->box = TRUE; | 115 | if (vcpu_info->run_time && vcpu_info->run_time < ts) { |
| 115 | info->bcolor = hash_pid(pid); | 116 | info->box = TRUE; |
| 116 | info->bfill = TRUE; | 117 | info->bcolor = hash_pid(pid); |
| 117 | info->bstart = vcpu_info->run_time; | 118 | info->bfill = TRUE; |
| 118 | info->bend = ts; | 119 | info->bstart = vcpu_info->run_time; |
| 119 | info->blabel = vcpu_info->label; | 120 | info->bend = ts; |
| 121 | info->blabel = vcpu_info->label; | ||
| 122 | } | ||
| 120 | 123 | ||
| 121 | vcpu_info->run_time = ts; | 124 | vcpu_info->run_time = ts; |
| 122 | ret = 1; | 125 | ret = 1; |
| @@ -127,7 +130,7 @@ static int try_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info | |||
| 127 | static void do_plot_end(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | 130 | static void do_plot_end(struct graph_info *ginfo, struct vcpu_info *vcpu_info, |
| 128 | struct plot_info *info) | 131 | struct plot_info *info) |
| 129 | { | 132 | { |
| 130 | int tid, job, is_running; | 133 | int tid, job, tjob, is_running; |
| 131 | unsigned long long deadline, release; | 134 | unsigned long long deadline, release; |
| 132 | struct record *record; | 135 | struct record *record; |
| 133 | 136 | ||
| @@ -147,7 +150,7 @@ static void do_plot_end(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | |||
| 147 | vcpu_info->sid, | 150 | vcpu_info->sid, |
| 148 | ginfo->view_end_time, | 151 | ginfo->view_end_time, |
| 149 | &release, &deadline, | 152 | &release, &deadline, |
| 150 | &job, &tid, &record); | 153 | &job, &tid, &tjob, &record); |
| 151 | if (is_running) { | 154 | if (is_running) { |
| 152 | update_tid(vcpu_info, tid); | 155 | update_tid(vcpu_info, tid); |
| 153 | info->box = TRUE; | 156 | info->box = TRUE; |
| @@ -175,8 +178,8 @@ static int rt_vcpu_plot_event(struct graph_info *ginfo, struct graph_plot *plot, | |||
| 175 | try_server_switch_to(ginfo, vcpu_info, record, info) || | 178 | try_server_switch_to(ginfo, vcpu_info, record, info) || |
| 176 | /* vcpu_try_block(ginfo, vcpu_info, record, info) || */ | 179 | /* vcpu_try_block(ginfo, vcpu_info, record, info) || */ |
| 177 | /* vcpu_try_resume(ginfo, vcpu_info, record, info) || */ | 180 | /* vcpu_try_resume(ginfo, vcpu_info, record, info) || */ |
| 178 | vcpu_try_release(ginfo, vcpu_info, record, info) || | 181 | /* vcpu_try_release(ginfo, vcpu_info, record, info) || */ |
| 179 | vcpu_try_completion(ginfo, vcpu_info, record, info) || | 182 | /* vcpu_try_completion(ginfo, vcpu_info, record, info) || */ |
| 180 | try_switch_to(ginfo, vcpu_info, record, info) || | 183 | try_switch_to(ginfo, vcpu_info, record, info) || |
| 181 | try_switch_away(ginfo, vcpu_info, record, info); | 184 | try_switch_away(ginfo, vcpu_info, record, info); |
| 182 | return match; | 185 | return match; |
| @@ -199,6 +202,7 @@ void insert_vcpu(struct graph_info *ginfo, struct cont_list *cont, | |||
| 199 | struct graph_plot *plot; | 202 | struct graph_plot *plot; |
| 200 | struct vcpu_info *vcpu; | 203 | struct vcpu_info *vcpu; |
| 201 | char *label; | 204 | char *label; |
| 205 | int len; | ||
| 202 | 206 | ||
| 203 | vcpu = malloc_or_die(sizeof(*vcpu)); | 207 | vcpu = malloc_or_die(sizeof(*vcpu)); |
| 204 | vcpu->sid = vcpu_info->sid; | 208 | vcpu->sid = vcpu_info->sid; |
| @@ -211,8 +215,19 @@ void insert_vcpu(struct graph_info *ginfo, struct cont_list *cont, | |||
| 211 | 215 | ||
| 212 | g_assert(cont); | 216 | g_assert(cont); |
| 213 | 217 | ||
| 214 | label = malloc_or_die(1); | 218 | |
| 215 | snprintf(label, 2, " "); | 219 | len = strlen(cont->name) + 100; |
| 220 | label = malloc_or_die(len); | ||
| 221 | |||
| 222 | if (vcpu_info->params.wcet) | ||
| 223 | snprintf(label, len, "%s - %d\nServer %d\n(%1.1f, %1.1f)", | ||
| 224 | cont->name, cont->cid, vcpu_info->sid, | ||
| 225 | nano_as_milli(vcpu_info->params.wcet), | ||
| 226 | nano_as_milli(vcpu_info->params.period)); | ||
| 227 | else | ||
| 228 | snprintf(label, len, "%s - %d\nServer %d", | ||
| 229 | cont->name, cont->cid, vcpu_info->sid); | ||
| 230 | |||
| 216 | plot = trace_graph_plot_append(ginfo, label, PLOT_TYPE_SERVER_CPU, | 231 | plot = trace_graph_plot_append(ginfo, label, PLOT_TYPE_SERVER_CPU, |
| 217 | TIME_TYPE_RT, &rt_vcpu_cb, vcpu); | 232 | TIME_TYPE_RT, &rt_vcpu_cb, vcpu); |
| 218 | trace_graph_plot_add_all_recs(ginfo, plot); | 233 | trace_graph_plot_add_all_recs(ginfo, plot); |
| @@ -231,15 +246,14 @@ void rt_vcpu_plot_start(struct graph_info *ginfo, struct graph_plot *plot, | |||
| 231 | vcpu_info->run_time = time; | 246 | vcpu_info->run_time = time; |
| 232 | vcpu_info->block_time = time; | 247 | vcpu_info->block_time = time; |
| 233 | vcpu_info->run_cpu = NO_CPU; | 248 | vcpu_info->run_cpu = NO_CPU; |
| 234 | vcpu_info->run_tid = 0; | 249 | vcpu_info->run_tid = -1; |
| 235 | vcpu_info->block_cpu = NO_CPU; | 250 | vcpu_info->block_cpu = NO_CPU; |
| 236 | vcpu_info->fresh = FALSE; | 251 | vcpu_info->fresh = FALSE; |
| 237 | 252 | ||
| 238 | vcpu_info->fresh = TRUE; | 253 | vcpu_info->fresh = TRUE; |
| 239 | vcpu_info->running = FALSE; | 254 | vcpu_info->running = FALSE; |
| 240 | vcpu_info->last_job = -1; | 255 | vcpu_info->last_job = -1; |
| 241 | 256 | update_tid(vcpu_info, 0); | |
| 242 | vcpu_info->run_tid = 0; | ||
| 243 | } | 257 | } |
| 244 | 258 | ||
| 245 | /** | 259 | /** |
| @@ -265,10 +279,10 @@ int rt_vcpu_plot_record_matches(struct rt_plot_common *rt, | |||
| 265 | unsigned long long dull; | 279 | unsigned long long dull; |
| 266 | 280 | ||
| 267 | #define ARG ginfo, record, &sid | 281 | #define ARG ginfo, record, &sid |
| 268 | match = rt_graph_check_server_switch_to(ARG, &dint, &dint, &dull) || | 282 | match = rt_graph_check_server_switch_to(ARG, &dint, &dint, &dint, &dull) || |
| 269 | rt_graph_check_server_switch_away(ARG, &dint, &dint, &dull) || | 283 | rt_graph_check_server_switch_away(ARG, &dint, &dint, &dint, &dull); |
| 270 | rt_graph_check_server_completion(ARG, &dint, &dull) || | 284 | /* rt_graph_check_server_completion(ARG, &dint, &dull) || */ |
| 271 | rt_graph_check_server_release(ARG, &dint, &dull, &dull); | 285 | /* rt_graph_check_server_release(ARG, &dint, &dull, &dull); */ |
| 272 | /* rt_graph_check_server_block(ARG, &dull) || */ | 286 | /* rt_graph_check_server_block(ARG, &dull) || */ |
| 273 | /* rt_graph_check_server_resume(ARG, &dull); */ | 287 | /* rt_graph_check_server_resume(ARG, &dull); */ |
| 274 | #undef ARG | 288 | #undef ARG |
| @@ -300,19 +314,19 @@ rt_vcpu_plot_write_header(struct rt_plot_common *rt, | |||
| 300 | struct trace_seq *s, | 314 | struct trace_seq *s, |
| 301 | unsigned long long time) | 315 | unsigned long long time) |
| 302 | { | 316 | { |
| 303 | int is_running, job, tid; | 317 | int is_running, job, tid, tjob; |
| 304 | unsigned long long release, deadline; | 318 | unsigned long long release, deadline; |
| 305 | struct vcpu_info *vcpu_info = (struct vcpu_info*)rt; | 319 | struct vcpu_info *vcpu_info = (struct vcpu_info*)rt; |
| 306 | struct record *record; | 320 | struct record *record; |
| 307 | 321 | ||
| 308 | is_running = get_server_info(ginfo, rt, vcpu_info->sid, time, | 322 | is_running = get_server_info(ginfo, rt, vcpu_info->sid, time, |
| 309 | &release, &deadline, | 323 | &release, &deadline, |
| 310 | &job, &tid, &record); | 324 | &job, &tid, &tjob, &record); |
| 311 | 325 | ||
| 312 | trace_seq_printf(s, "%s-%d\n%d", vcpu_info->cont->name, | 326 | trace_seq_printf(s, "%s\nServer: %d:%d\n", vcpu_info->cont->name, |
| 313 | vcpu_info->sid, job); | 327 | vcpu_info->sid, job); |
| 314 | if (is_running) { | 328 | if (is_running) { |
| 315 | trace_seq_printf(s, " - %d", tid); | 329 | trace_seq_printf(s, "Running: %d:%d", tid, tjob); |
| 316 | } | 330 | } |
| 317 | trace_seq_putc(s, '\n'); | 331 | trace_seq_putc(s, '\n'); |
| 318 | return record; | 332 | return record; |
diff --git a/rt-plot-vtask.c b/rt-plot-vtask.c index 5000873..91eeb19 100644 --- a/rt-plot-vtask.c +++ b/rt-plot-vtask.c | |||
| @@ -32,18 +32,18 @@ static int | |||
| 32 | try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | 32 | try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info, |
| 33 | struct record *record, struct plot_info *info) | 33 | struct record *record, struct plot_info *info) |
| 34 | { | 34 | { |
| 35 | int job, sid, tid, match, ret = 0; | 35 | int job, sid, tid, tjob, match, ret = 0; |
| 36 | unsigned long long ts; | 36 | unsigned long long ts; |
| 37 | 37 | ||
| 38 | match = rt_graph_check_server_switch_away(ginfo, record, | 38 | match = rt_graph_check_server_switch_away(ginfo, record, |
| 39 | &sid, &job, | 39 | &sid, &job, |
| 40 | &tid, &ts); | 40 | &tid, &tjob, &ts); |
| 41 | if (match && sid == vcpu_info->sid) { | 41 | if (match && tid == vcpu_info->sid) { |
| 42 | /* update_job(vcpu_info, job); */ | 42 | update_job(vcpu_info, tjob); |
| 43 | 43 | ||
| 44 | if (vcpu_info->run_time < ts) { | 44 | if (vcpu_info->run_time && vcpu_info->run_time < ts) { |
| 45 | info->box = TRUE; | 45 | info->box = TRUE; |
| 46 | info->bcolor = hash_pid(sid); | 46 | info->bcolor = hash_cpu(sid - 1); |
| 47 | info->bfill = TRUE; | 47 | info->bfill = TRUE; |
| 48 | info->bstart = vcpu_info->run_time; | 48 | info->bstart = vcpu_info->run_time; |
| 49 | info->bend = ts; | 49 | info->bend = ts; |
| @@ -65,13 +65,13 @@ try_server_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | |||
| 65 | static int try_server_switch_to(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | 65 | static int try_server_switch_to(struct graph_info *ginfo, struct vcpu_info *vcpu_info, |
| 66 | struct record *record, struct plot_info *info) | 66 | struct record *record, struct plot_info *info) |
| 67 | { | 67 | { |
| 68 | int job, sid, tid, match, ret = 0; | 68 | int job, sid, tid, tjob, match, ret = 0; |
| 69 | unsigned long long ts; | 69 | unsigned long long ts; |
| 70 | 70 | ||
| 71 | match = rt_graph_check_server_switch_to(ginfo, record, | 71 | match = rt_graph_check_server_switch_to(ginfo, record, |
| 72 | &sid, &job, &tid, &ts); | 72 | &sid, &job, &tid, &tjob, &ts); |
| 73 | if (match && sid == vcpu_info->sid) { | 73 | if (match && tid == vcpu_info->sid) { |
| 74 | update_job(vcpu_info, job); | 74 | update_job(vcpu_info, tjob); |
| 75 | vcpu_info->run_time = ts; | 75 | vcpu_info->run_time = ts; |
| 76 | vcpu_info->run_cpu = record->cpu; | 76 | vcpu_info->run_cpu = record->cpu; |
| 77 | vcpu_info->run_tid = tid; | 77 | vcpu_info->run_tid = tid; |
| @@ -82,40 +82,40 @@ static int try_server_switch_to(struct graph_info *ginfo, struct vcpu_info *vcpu | |||
| 82 | return ret; | 82 | return ret; |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | static int try_switch_to(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | 85 | /* static int try_switch_to(struct graph_info *ginfo, struct vcpu_info *vcpu_info, */ |
| 86 | struct record *record, struct plot_info *info) | 86 | /* struct record *record, struct plot_info *info) */ |
| 87 | { | 87 | /* { */ |
| 88 | int job, pid, match, ret = 0; | 88 | /* int job, pid, match, ret = 0; */ |
| 89 | unsigned long long ts; | 89 | /* unsigned long long ts; */ |
| 90 | 90 | ||
| 91 | match = rt_graph_check_switch_to(ginfo, record, &pid, &job, &ts); | 91 | /* match = rt_graph_check_switch_to(ginfo, record, &pid, &job, &ts); */ |
| 92 | if (match && pid && pid == vcpu_info->run_tid && vcpu_info->run_time) { | 92 | /* if (match && pid && pid == vcpu_info->run_tid && vcpu_info->run_time) { */ |
| 93 | info->line = TRUE; | 93 | /* info->line = TRUE; */ |
| 94 | info->lcolor = hash_pid(pid); | 94 | /* info->lcolor = hash_pid(pid); */ |
| 95 | ret = 1; | 95 | /* ret = 1; */ |
| 96 | } | 96 | /* } */ |
| 97 | return ret; | 97 | /* return ret; */ |
| 98 | } | 98 | /* } */ |
| 99 | 99 | ||
| 100 | static int try_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | 100 | /* static int try_switch_away(struct graph_info *ginfo, struct vcpu_info *vcpu_info, */ |
| 101 | struct record *record, struct plot_info *info) | 101 | /* struct record *record, struct plot_info *info) */ |
| 102 | { | 102 | /* { */ |
| 103 | int job, pid, match, ret = 0; | 103 | /* int job, pid, match, ret = 0; */ |
| 104 | unsigned long long ts; | 104 | /* unsigned long long ts; */ |
| 105 | 105 | ||
| 106 | match = rt_graph_check_switch_away(ginfo, record, &pid, &job, &ts); | 106 | /* match = rt_graph_check_switch_away(ginfo, record, &pid, &job, &ts); */ |
| 107 | if (match && pid && pid == vcpu_info->run_tid) { | 107 | /* if (match && pid && pid == vcpu_info->run_tid) { */ |
| 108 | info->line = TRUE; | 108 | /* info->line = TRUE; */ |
| 109 | info->lcolor = hash_pid(pid); | 109 | /* info->lcolor = hash_pid(pid); */ |
| 110 | ret = 1; | 110 | /* ret = 1; */ |
| 111 | } | 111 | /* } */ |
| 112 | return ret; | 112 | /* return ret; */ |
| 113 | } | 113 | /* } */ |
| 114 | 114 | ||
| 115 | static void do_plot_end(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | 115 | static void do_plot_end(struct graph_info *ginfo, struct vcpu_info *vcpu_info, |
| 116 | struct plot_info *info) | 116 | struct plot_info *info) |
| 117 | { | 117 | { |
| 118 | int tid, job, is_running; | 118 | int tid, job, is_running, tjob; |
| 119 | unsigned long long deadline, release; | 119 | unsigned long long deadline, release; |
| 120 | struct record *record; | 120 | struct record *record; |
| 121 | 121 | ||
| @@ -135,7 +135,7 @@ static void do_plot_end(struct graph_info *ginfo, struct vcpu_info *vcpu_info, | |||
| 135 | vcpu_info->sid, | 135 | vcpu_info->sid, |
| 136 | ginfo->view_end_time, | 136 | ginfo->view_end_time, |
| 137 | &release, &deadline, | 137 | &release, &deadline, |
| 138 | &job, &tid, &record); | 138 | &job, &tid, &tjob, &record); |
| 139 | if (is_running) { | 139 | if (is_running) { |
| 140 | update_job(vcpu_info, job); | 140 | update_job(vcpu_info, job); |
| 141 | info->box = TRUE; | 141 | info->box = TRUE; |
| @@ -164,9 +164,9 @@ static int rt_vtask_plot_event(struct graph_info *ginfo, struct graph_plot *plot | |||
| 164 | /* vcpu_try_block(ginfo, vcpu_info, record, info) || */ | 164 | /* vcpu_try_block(ginfo, vcpu_info, record, info) || */ |
| 165 | /* vcpu_try_resume(ginfo, vcpu_info, record, info) || */ | 165 | /* vcpu_try_resume(ginfo, vcpu_info, record, info) || */ |
| 166 | vcpu_try_release(ginfo, vcpu_info, record, info) || | 166 | vcpu_try_release(ginfo, vcpu_info, record, info) || |
| 167 | vcpu_try_completion(ginfo, vcpu_info, record, info) || | 167 | vcpu_try_completion(ginfo, vcpu_info, record, info); |
| 168 | try_switch_to(ginfo, vcpu_info, record, info) || | 168 | /* try_switch_to(ginfo, vcpu_info, record, info) || */ |
| 169 | try_switch_away(ginfo, vcpu_info, record, info); | 169 | /* try_switch_away(ginfo, vcpu_info, record, info); */ |
| 170 | return match; | 170 | return match; |
| 171 | } | 171 | } |
| 172 | 172 | ||
| @@ -186,7 +186,6 @@ void insert_vtask(struct graph_info *ginfo, struct cont_list *cont, | |||
| 186 | struct graph_plot *plot; | 186 | struct graph_plot *plot; |
| 187 | struct vcpu_info *vtask; | 187 | struct vcpu_info *vtask; |
| 188 | char *label; | 188 | char *label; |
| 189 | int len; | ||
| 190 | 189 | ||
| 191 | vtask = malloc_or_die(sizeof(*vtask)); | 190 | vtask = malloc_or_die(sizeof(*vtask)); |
| 192 | vtask->sid = vcpu_info->sid; | 191 | vtask->sid = vcpu_info->sid; |
| @@ -197,13 +196,8 @@ void insert_vtask(struct graph_info *ginfo, struct cont_list *cont, | |||
| 197 | vtask->common.is_drawn = rt_vcpu_plot_is_drawn; | 196 | vtask->common.is_drawn = rt_vcpu_plot_is_drawn; |
| 198 | vtask->common.write_header = rt_vcpu_plot_write_header; | 197 | vtask->common.write_header = rt_vcpu_plot_write_header; |
| 199 | 198 | ||
| 200 | 199 | label = malloc_or_die(1); | |
| 201 | len = strlen(cont->name) + 100; | 200 | snprintf(label, 2, " "); |
| 202 | label = malloc_or_die(len); | ||
| 203 | snprintf(label, len, "%s - %d\n(%1.1f, %1.1f)", | ||
| 204 | cont->name, -vtask->sid, | ||
| 205 | nano_as_milli(vcpu_info->params.wcet), | ||
| 206 | nano_as_milli(vcpu_info->params.period)); | ||
| 207 | 201 | ||
| 208 | plot = trace_graph_plot_append(ginfo, label, PLOT_TYPE_SERVER_TASK, | 202 | plot = trace_graph_plot_append(ginfo, label, PLOT_TYPE_SERVER_TASK, |
| 209 | TIME_TYPE_RT, &rt_vtask_cb, vtask); | 203 | TIME_TYPE_RT, &rt_vtask_cb, vtask); |
| @@ -287,8 +287,9 @@ set_cpu_to_rts(struct graph_info *ginfo, unsigned long long rt_target, int cpu) | |||
| 287 | */ | 287 | */ |
| 288 | do { | 288 | do { |
| 289 | seek_time = seek_time - 1.5 * (rts - rt_target); | 289 | seek_time = seek_time - 1.5 * (rts - rt_target); |
| 290 | last_rts = rts; | ||
| 290 | rts = next_rts(ginfo, cpu, seek_time); | 291 | rts = next_rts(ginfo, cpu, seek_time); |
| 291 | } while (rts > rt_target); | 292 | } while (rts > rt_target && rts != last_rts); |
| 292 | } | 293 | } |
| 293 | 294 | ||
| 294 | /* Get to first record at or after time */ | 295 | /* Get to first record at or after time */ |
| @@ -368,11 +369,11 @@ int is_task_running(struct graph_info *ginfo, | |||
| 368 | * Returns release record and @out_job, @out_release, and @out_deadline if a | 369 | * Returns release record and @out_job, @out_release, and @out_deadline if a |
| 369 | * release was found for @tid before @time. | 370 | * release was found for @tid before @time. |
| 370 | */ | 371 | */ |
| 371 | struct record* get_previous_release(struct graph_info *ginfo, int match_tid, | 372 | void get_previous_release(struct graph_info *ginfo, int match_tid, |
| 372 | unsigned long long time, | 373 | unsigned long long time, |
| 373 | int *out_job, | 374 | int *out_job, |
| 374 | unsigned long long *out_release, | 375 | unsigned long long *out_release, |
| 375 | unsigned long long *out_deadline) | 376 | unsigned long long *out_deadline) |
| 376 | { | 377 | { |
| 377 | int tid, cpu, match, job; | 378 | int tid, cpu, match, job; |
| 378 | unsigned long long release, deadline, min_ts; | 379 | unsigned long long release, deadline, min_ts; |
| @@ -424,5 +425,5 @@ struct record* get_previous_release(struct graph_info *ginfo, int match_tid, | |||
| 424 | loop_end: | 425 | loop_end: |
| 425 | free_record(last_rec); | 426 | free_record(last_rec); |
| 426 | } | 427 | } |
| 427 | return ret; | 428 | free_record(ret); |
| 428 | } | 429 | } |
| @@ -60,9 +60,9 @@ void set_cpus_to_rts(struct graph_info *ginfo, | |||
| 60 | int is_task_running(struct graph_info *ginfo, | 60 | int is_task_running(struct graph_info *ginfo, |
| 61 | unsigned long long time, | 61 | unsigned long long time, |
| 62 | int pid); | 62 | int pid); |
| 63 | struct record* get_previous_release(struct graph_info *ginfo, int tid, | 63 | void get_previous_release(struct graph_info *ginfo, int tid, |
| 64 | unsigned long long time, int *job, | 64 | unsigned long long time, int *job, |
| 65 | unsigned long long *release, | 65 | unsigned long long *release, |
| 66 | unsigned long long *deadline); | 66 | unsigned long long *deadline); |
| 67 | 67 | ||
| 68 | #endif | 68 | #endif |
diff --git a/trace-graph.c b/trace-graph.c index b20aabe..1ce3d47 100644 --- a/trace-graph.c +++ b/trace-graph.c | |||
| @@ -55,7 +55,7 @@ | |||
| 55 | #define PLOT_GIVE 2 | 55 | #define PLOT_GIVE 2 |
| 56 | #define PLOT_BEGIN 80 | 56 | #define PLOT_BEGIN 80 |
| 57 | #define PLOT_SEP 50 | 57 | #define PLOT_SEP 50 |
| 58 | #define MAX_TRI_TIME 1000000 | 58 | #define MAX_TRI_TIME 10000000 |
| 59 | #define PLOT_LINE(plot) (PLOT_SEP * (plot) + PLOT_BEGIN + PLOT_SIZE) | 59 | #define PLOT_LINE(plot) (PLOT_SEP * (plot) + PLOT_BEGIN + PLOT_SIZE) |
| 60 | #define PLOT_TOP(plot) (PLOT_LINE(plot) - PLOT_SIZE * 2) | 60 | #define PLOT_TOP(plot) (PLOT_LINE(plot) - PLOT_SIZE * 2) |
| 61 | #define PLOT_BOX_TOP(plot) (PLOT_LINE(plot) - PLOT_SIZE) | 61 | #define PLOT_BOX_TOP(plot) (PLOT_LINE(plot) - PLOT_SIZE) |
