From d31d425a6b65f7ec5a272ec7af06e48e4edf0e04 Mon Sep 17 00:00:00 2001 From: George Dunlap Date: Wed, 24 Sep 2008 12:00:46 +0100 Subject: [PATCH] [global] Added interval_domain_time and interval_domain_time_all. Also modified interval-domain-short-summary to make percentage based on interval time, rather than domain runtime. --- analyze.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/analyze.c b/analyze.c index 1a5515b..f39ad5a 100644 --- a/analyze.c +++ b/analyze.c @@ -92,6 +92,7 @@ struct { INTERVAL_CR3_SCHEDULE_TIME, INTERVAL_CR3_SCHEDULE_ORDERED, INTERVAL_CR3_SHORT_SUMMARY, + INTERVAL_DOMAIN_TOTAL_TIME, INTERVAL_DOMAIN_SHORT_SUMMARY, INTERVAL_DOMAIN_GUEST_INTERRUPT, INTERVAL_DOMAIN_GRANT_MAPS @@ -2366,7 +2367,8 @@ void interval_cr3_value_check(struct cr3_value_struct *cr3) { interval_list_add(&cr3->total_time.interval, desc); } else { /* Custom */ - P.interval.cr3 = cr3; + if(cr3->gmfn == opt.interval.array.values[0]) + P.interval.cr3 = cr3; } } @@ -2480,7 +2482,8 @@ void interval_domain_value_check(struct domain_data *d) { snprintf(desc, 32, "%d", d->did); interval_list_add(&d->total_time.interval, desc); } else { - P.interval.domain.d = d; + if(d->did == opt.interval.array.values[0]) + P.interval.domain.d = d; } } @@ -2509,8 +2512,7 @@ void interval_domain_short_summary_output(void) { interval_cycle_percent_output(&d->total_time.interval); for(i=0; ihvm_short.s[i].interval, - interval_cycles); + interval_cycle_percent_output(&d->hvm_short.s[i].interval); printf("\n"); } @@ -4733,8 +4735,8 @@ void hvm_process(struct pcpu_info *p) struct record_info *ri = &p->ri; struct vcpu_data *v = p->current; struct hvm_data *h = &v->hvm; - - if(v->d->did == IDLE_DOMAIN) { + + if(v->d->did == IDLE_DOMAIN) { fprintf(warn, "%s: Strange, hvm record for idle domain!\n", __func__); dump_generic(warn, ri); @@ -7448,6 +7450,8 @@ enum { OPT_INTERVAL_CR3_SCHEDULE_TIME_ALL, OPT_INTERVAL_CR3_SCHEDULE_ORDERED, OPT_INTERVAL_CR3_SHORT_SUMMARY, + OPT_INTERVAL_DOMAIN_TOTAL_TIME, + OPT_INTERVAL_DOMAIN_TOTAL_TIME_ALL, OPT_INTERVAL_DOMAIN_SHORT_SUMMARY, OPT_INTERVAL_DOMAIN_GUEST_INTERRUPT, OPT_INTERVAL_DOMAIN_GRANT_MAPS, @@ -7752,6 +7756,33 @@ error_t cmd_parser(int key, char *arg, struct argp_state *state) break; } + case OPT_INTERVAL_DOMAIN_TOTAL_TIME: + { + if(parse_array(arg, &opt.interval.array) < 0) + goto idtt_usage; + interval_table_alloc(opt.interval.array.count); + opt.interval.output = INTERVAL_DOMAIN_TOTAL_TIME; + opt.interval.check = INTERVAL_CHECK_DOMAIN; + opt.interval.mode = INTERVAL_MODE_ARRAY; + opt.interval_mode = 1; + opt.summary_info = 1; + G.output_defined = 1; + break; + idtt_usage: + fprintf(stderr, "Invalid input for domain_total_time\n"); + argp_usage(state); + break; + } + + case OPT_INTERVAL_DOMAIN_TOTAL_TIME_ALL: + opt.interval.output = INTERVAL_DOMAIN_TOTAL_TIME; + opt.interval.check = INTERVAL_CHECK_DOMAIN; + opt.interval.mode = INTERVAL_MODE_LIST; + opt.interval_mode = 1; + opt.summary_info = 1; + G.output_defined = 1; + break; + case OPT_INTERVAL_DOMAIN_SHORT_SUMMARY: { if((parse_array(arg, &opt.interval.array) < 0) @@ -7975,6 +8006,17 @@ const struct argp_option cmd_opts[] = { .group = OPT_GROUP_INTERVAL, .doc = "Print a csv with the hvm short summary of cr3 value every interval.", }, + { .name = "interval-domain-total-time", + .key = OPT_INTERVAL_DOMAIN_TOTAL_TIME, + .arg = "domain[,domain...]", + .group = OPT_GROUP_INTERVAL, + .doc = "Print a csv with the listed domain(s) total runtime every interval.", }, + + { .name = "interval-domain-total-time-all", + .key = OPT_INTERVAL_DOMAIN_TOTAL_TIME_ALL, + .group = OPT_GROUP_INTERVAL, + .doc = "Print a csv with all domains every interval.", }, + { .name = "interval-domain-short-summary", .key = OPT_INTERVAL_DOMAIN_SHORT_SUMMARY, .arg = "domain-id", -- 2.39.5