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
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;
}
}
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;
}
}
interval_cycle_percent_output(&d->total_time.interval);
for(i=0; i<HVM_SHORT_SUMMARY_MAX; i++)
- __interval_cycle_percent_output(&d->hvm_short.s[i].interval,
- interval_cycles);
+ interval_cycle_percent_output(&d->hvm_short.s[i].interval);
printf("\n");
}
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);
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,
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)
.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",