X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_telemetry.c;h=898850ad6daa1288950672593dd0b2bbc9ac3e87;hp=906f2ef0fdcd93486d07dc6e5b0ab1bf9d9f9312;hb=cfcc5717f659b3ed2954f41cf363d3bceae8dc84;hpb=f3eb8bbb7c58c98b03797f2188e6c1d2a7610c15 diff --git a/palacios/src/palacios/vmm_telemetry.c b/palacios/src/palacios/vmm_telemetry.c index 906f2ef..898850a 100644 --- a/palacios/src/palacios/vmm_telemetry.c +++ b/palacios/src/palacios/vmm_telemetry.c @@ -21,19 +21,20 @@ #include #include #include +#include #ifdef CONFIG_TELEMETRY_GRANULARITY #define DEFAULT_GRANULARITY CONFIG_TELEMETRY_GRANULARITY #else -#define DEFAULT_GRANULARITY 5000 +#define DEFAULT_GRANULARITY 50000 #endif struct telemetry_cb { - void (*telemetry_fn)(struct guest_info * info, void * private_data); + void (*telemetry_fn)(struct guest_info * info, void * private_data, char * hdr); void * private_data; struct list_head cb_node; @@ -168,8 +169,8 @@ void v3_telemetry_end_exit(struct guest_info * info, uint_t exit_code) { void v3_add_telemetry_cb(struct guest_info * info, - void (*telemetry_fn)(struct guest_info * info, void * private_data), - void * private_data) { + void (*telemetry_fn)(struct guest_info * info, void * private_data, char * hdr), + void * private_data) { struct v3_telemetry_state * telemetry = &(info->telemetry); struct telemetry_cb * cb = (struct telemetry_cb *)V3_Malloc(sizeof(struct telemetry_cb)); @@ -180,14 +181,17 @@ void v3_add_telemetry_cb(struct guest_info * info, } + void v3_print_telemetry(struct guest_info * info) { struct v3_telemetry_state * telemetry = &(info->telemetry); uint64_t invoke_tsc = 0; + char hdr_buf[32]; rdtscll(invoke_tsc); - V3_Print("Telemetry (%d)\n", telemetry->invoke_cnt++); - V3_Print("\ttelemetry window tsc cnt: %d\n", (uint32_t)(invoke_tsc - telemetry->prev_tsc)); + snprintf(hdr_buf, 32, "telem.%d>", telemetry->invoke_cnt++); + + V3_Print("%stelemetry window tsc cnt: %d\n", hdr_buf, (uint32_t)(invoke_tsc - telemetry->prev_tsc)); // Exit Telemetry { @@ -198,13 +202,13 @@ void v3_print_telemetry(struct guest_info * info) { evt = rb_entry(node, struct exit_event, tree_node); const char * code_str = vmexit_code_to_str(evt->exit_code); - V3_Print("%s:%sCnt=%u,%sAvg. Time=%u\n", - code_str, - (strlen(code_str) > 14) ? "\t" : "\t\t", - evt->cnt, - (evt->cnt >= 100) ? "\t" : "\t\t", - (uint32_t)(evt->handler_time / evt->cnt)); - + V3_Print("%s%s:%sCnt=%u,%sAvg. Time=%u\n", + hdr_buf, + code_str, + (strlen(code_str) > 13) ? "\t" : "\t\t", + evt->cnt, + (evt->cnt >= 100) ? "\t" : "\t\t", + (uint32_t)(evt->handler_time / evt->cnt)); } while ((node = v3_rb_next(node))); } @@ -214,9 +218,12 @@ void v3_print_telemetry(struct guest_info * info) { struct telemetry_cb * cb = NULL; list_for_each_entry(cb, &(telemetry->cb_list), cb_node) { - cb->telemetry_fn(info, cb->private_data); + cb->telemetry_fn(info, cb->private_data, hdr_buf); } } telemetry->prev_tsc = invoke_tsc; + + V3_Print("%s Telemetry done\n", hdr_buf); + }