提交 35d75a19 编写于 作者: N nocjj

display: add vcpu_stat related items

Add vcpu_stat related items to display, include:
EXThvc: hvc kvm exit
EXTWFE: wfe kvm exit
EXTwfi: wfi kvm exit
EXTmmioU: mmio User kvm exit
EXTmmioK: mmio Kernel kvm exit
EXTfp: FP ASIMD kvm exit
EXTirq: IRQ kvm exit
EXTsys64: SYS64 kvm  exit
EXTmabt: mem abort kvm exit
EXTsum: times of all kvm exit
Signed-off-by: NJiajun Chen <1250062498@qq.com>
上级 fbd08bed
......@@ -287,7 +287,7 @@ static void refresh_threads(struct domain *dom, struct domain *old_dom)
refresh_delta_stat(&(dom->threads[i]), old_thread);
if (dom->threads[i].type == ISVCPU) {
refresh_delta_vcpu_stat(&(dom->threads[i]), old_thread);
sum_vcpu_stat(&(dom->threads[i]), old_thread);
sum_vcpu_stat(dom, &(dom->threads[i]));
}
}
}
......
......@@ -24,9 +24,19 @@ const char *filter_help = ""
FID fields[] = {
/* name . flag . align */
{"DID", FIELDS_DISPLAY, 5 },
{"VMname", FIELDS_DISPLAY, 14 },
{"VM/task-name", FIELDS_DISPLAY, 14 },
{"PID", FIELDS_DISPLAY, 8 },
{"%CPU", FIELDS_DISPLAY, 6 },
{"EXThvc", FIELDS_DISPLAY, 10 },
{"EXTwfe", FIELDS_DISPLAY, 10 },
{"EXTwfi", FIELDS_DISPLAY, 10 },
{"EXTmmioU", FIELDS_DISPLAY, 10 },
{"EXTmmioK", FIELDS_DISPLAY, 10 },
{"EXTfp", FIELDS_DISPLAY, 10 },
{"EXTirq", FIELDS_DISPLAY, 10 },
{"EXTsys64", FIELDS_DISPLAY, 10 },
{"EXTmabt", FIELDS_DISPLAY, 10 },
{"EXTsum", FIELDS_DISPLAY, 10 },
{"S", FIELDS_DISPLAY, 5 },
{"P", FIELDS_DISPLAY, 5 }
};
......@@ -21,6 +21,16 @@ enum fields_type {
FD_VMNAME,
FD_PID,
FD_CPU,
FD_EXTHVC,
FD_EXTWFE,
FD_EXTWFI,
FD_EXTMMIOU,
FD_EXTMMIOK,
FD_EXTFP,
FD_EXTIRQ,
FD_EXTSYS64,
FD_EXTMABT,
FD_EXTSUM,
FD_STATE,
FD_P,
FD_END
......
......@@ -21,7 +21,7 @@
struct file_item vcpu_stat_stab[] = {
#define GDF(f) (void *)GET_NAME(f), (void *)DELTA_NAME(f), (void *)SUM_NAME(f)
#define GF(f) (void *)GET_NAME(f), NULL, NULL
{"%lu", GF(pid)},
{"%*u", NULL, NULL, NULL},
{"%llu", GDF(hvc_exit_stat)},
{"%llu", GDF(wfe_exit_stat)},
{"%llu", GDF(wfi_exit_stat)},
......@@ -77,9 +77,9 @@ int get_vcpu_stat(struct domain *dom)
}
for (p = strtok_r(buf, " \t\r\n", &p_next); p && i < vcpu_stat_size;
p = strtok_r(NULL, " \t\r\n", &p_next)) {
if (sscanf(p, vcpu_stat_stab[i].format,
(*vcpu_stat_stab[i].get_fun)(dom)) < 0) {
break;
if (vcpu_stat_stab[i].get_fun) {
sscanf(p, vcpu_stat_stab[i].format,
(*vcpu_stat_stab[i].get_fun)(dom));
}
i++;
}
......
......@@ -115,6 +115,47 @@ static void print_domain_field(struct domain *dom, int field)
printw("%*.1f", fields[i].align, usage);
break;
}
/* kvm exit fields show */
case FD_EXTHVC: {
printw("%*llu", fields[i].align, dom->DELTA_VALUE(hvc_exit_stat));
break;
}
case FD_EXTWFE: {
printw("%*llu", fields[i].align, dom->DELTA_VALUE(wfe_exit_stat));
break;
}
case FD_EXTWFI: {
printw("%*llu", fields[i].align, dom->DELTA_VALUE(wfi_exit_stat));
break;
}
case FD_EXTMMIOU: {
printw("%*llu", fields[i].align, dom->DELTA_VALUE(mmio_exit_user));
break;
}
case FD_EXTMMIOK: {
printw("%*llu", fields[i].align, dom->DELTA_VALUE(mmio_exit_kernel));
break;
}
case FD_EXTFP: {
printw("%*llu", fields[i].align, dom->DELTA_VALUE(fp_asimd_exit_stat));
break;
}
case FD_EXTIRQ: {
printw("%*llu", fields[i].align, dom->DELTA_VALUE(irq_exit_stat));
break;
}
case FD_EXTSYS64: {
printw("%*llu", fields[i].align, dom->DELTA_VALUE(sys64_exit_stat));
break;
}
case FD_EXTMABT: {
printw("%*llu", fields[i].align, dom->DELTA_VALUE(mabt_exit_stat));
break;
}
case FD_EXTSUM: {
printw("%*llu", fields[i].align, dom->DELTA_VALUE(exits));
break;
}
case FD_STATE: {
printw("%*c", fields[i].align, dom->state);
break;
......@@ -129,17 +170,28 @@ static void print_domain_field(struct domain *dom, int field)
return;
}
static void show_task(struct domain *task)
{
clrtoeol();
for (int i = 0; i < FD_END; i++) {
if (fields[i].display_flag == 1) {
print_domain_field(task, i);
}
}
printw("\n");
}
static void show_domains_threads(struct domain *dom)
{
if (!dom) {
return;
}
for (int i = 0; i < dom->nlwp; i++) {
struct domain *thread = &(dom->threads[i]);
if (thread == NULL) {
continue;
}
for (int j = 0; j < FD_END; j++) {
print_domain_field(thread, j);
}
printw("\n");
show_task(thread);
}
}
......@@ -147,10 +199,7 @@ static void show_domains(struct domain_list *list)
{
for (int i = 0; i < list->num; i++) {
struct domain *dom = &(list->domains[i]);
for (int j = 0; j < FD_END; j++) {
print_domain_field(dom, j);
}
printw("\n");
show_task(dom);
show_domains_threads(dom);
}
clrtobot(); /* clear to bottom to avoid image residue */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册