加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
arch-add-x86-kvm-exits-items.patch 10.24 KB
一键复制 编辑 原始数据 按行查看 历史
From 697ed50e404408d34e19afc493e5fe8270cc3433 Mon Sep 17 00:00:00 2001
From: nocjj <1250062498@qq.com>
Date: Mon, 2 Nov 2020 19:07:29 +0800
Subject: [PATCH 7/8] arch: add x86 kvm exits items
add x86 support for vmtop
Signed-off-by: nocjj <1250062498@qq.com>
---
src/field.c | 26 ++++++++++++++++++++++++++
src/field.h | 26 ++++++++++++++++++++++++++
src/type.h | 33 +++++++++++++++++++++++++++++++++
src/vcpu_stat.c | 34 ++++++++++++++++++++++++++++++++++
src/vcpu_stat.h | 33 +++++++++++++++++++++++++++++++++
src/vmtop.c | 26 ++++++++++++++++++++++++++
6 files changed, 178 insertions(+)
diff --git a/src/field.c b/src/field.c
index 7ff0d44..418d642 100644
--- a/src/field.c
+++ b/src/field.c
@@ -42,6 +42,7 @@ FID fields[] = {
{"VM/task-name", FIELDS_DISPLAY, 14, NULL },
{"PID", FIELDS_DISPLAY, 8, NULL },
{"%CPU", FIELDS_DISPLAY, 8, NULL },
+#ifdef __aarch64__
{"EXThvc", FIELDS_DISPLAY, 10, GDF(hvc_exit_stat) },
{"EXTwfe", FIELDS_DISPLAY, 10, GDF(wfe_exit_stat) },
{"EXTwfi", FIELDS_DISPLAY, 10, GDF(wfi_exit_stat) },
@@ -63,6 +64,31 @@ FID fields[] = {
{"EXTsve", FIELDS_HIDDEN, 10, GDF(sve_exit_stat) },
{"EXTdbg", FIELDS_HIDDEN, 10, GDF(debug_exit_stat) },
{"EXTfail", FIELDS_HIDDEN, 10, GDF(fail_entry_exit_stat) },
+#else
+ {"PFfix", FIELDS_HIDDEN, 10, GDF(pf_fixed) },
+ {"PFgu", FIELDS_HIDDEN, 10, GDF(pf_guest) },
+ {"INvlpg", FIELDS_HIDDEN, 10, GDF(invlpg) },
+ {"EXTio", FIELDS_HIDDEN, 10, GDF(io_exits) },
+ {"EXTmmio", FIELDS_HIDDEN, 10, GDF(mmio_exits) },
+ {"EXTsum", FIELDS_DISPLAY, 10, GDF(exits) },
+ {"EXThalt", FIELDS_HIDDEN, 10, GDF(halt_exits) },
+ {"EXTsig", FIELDS_HIDDEN, 10, GDF(signal_exits) },
+ {"EXTirq", FIELDS_HIDDEN, 10, GDF(irq_exits) },
+ {"EXTnmiW", FIELDS_HIDDEN, 10, GDF(nmi_window_exits) },
+ {"EXTirqW", FIELDS_HIDDEN, 10, GDF(irq_window_exits) },
+ {"IrqIn", FIELDS_HIDDEN, 10, GDF(irq_injections) },
+ {"NmiIn", FIELDS_HIDDEN, 10, GDF(nmi_injections) },
+ {"TLBfl", FIELDS_HIDDEN, 10, GDF(tlb_flush) },
+ {"HostReL", FIELDS_HIDDEN, 10, GDF(host_state_reload) },
+ {"Hyperv", FIELDS_HIDDEN, 10, GDF(hypercalls) },
+ {"EXTcr", FIELDS_HIDDEN, 10, GDF(cr_exits) },
+ {"EXTrmsr", FIELDS_HIDDEN, 10, GDF(msr_rd_exits) },
+ {"EXTwmsr", FIELDS_HIDDEN, 10, GDF(msr_wr_exits) },
+ {"EXTapic", FIELDS_HIDDEN, 10, GDF(apic_wr_exits) },
+ {"EXTeptv", FIELDS_DISPLAY, 10, GDF(ept_vio_exits) },
+ {"EXTeptm", FIELDS_HIDDEN, 10, GDF(ept_mis_exits) },
+ {"EXTpau", FIELDS_DISPLAY, 10, GDF(pause_exits) },
+#endif
{"S", FIELDS_DISPLAY, 5, GF(state) },
{"P", FIELDS_DISPLAY, 5, GF(processor) },
{"%ST", FIELDS_DISPLAY, 8, GDF(steal) },
diff --git a/src/field.h b/src/field.h
index 3a33008..8ce047a 100644
--- a/src/field.h
+++ b/src/field.h
@@ -21,6 +21,7 @@ enum fields_type {
FD_VMNAME,
FD_PID,
FD_CPU,
+#ifdef __aarch64__
FD_EXTHVC,
FD_EXTWFE,
FD_EXTWFI,
@@ -42,6 +43,31 @@ enum fields_type {
FD_EXTSVE,
FD_EXTDBG,
FD_EXTFAIL,
+#else
+ FD_PFFIXED,
+ FD_PFGUEST,
+ FD_INVLPG,
+ FD_IOEXITS,
+ FD_MMIOEXITS,
+ FD_EXTSUM,
+ FD_EXTHALT,
+ FD_EXTSIG,
+ FD_EXTIRQ,
+ FD_EXTNMIW,
+ FD_EXTIRQW,
+ FD_IRQIN,
+ FD_NMIIN,
+ FD_TLB,
+ FD_HOSTREL,
+ FD_HYPERV,
+ FD_EXTCR,
+ FD_EXTRMSR,
+ FD_EXTWMSR,
+ FD_EXTAPIC,
+ FD_EXTEPTV,
+ FD_EXTEPTM,
+ FD_EXTPAU,
+#endif
FD_STATE,
FD_P,
FD_ST,
diff --git a/src/type.h b/src/type.h
index 40b7287..3c08387 100644
--- a/src/type.h
+++ b/src/type.h
@@ -116,6 +116,7 @@ struct domain {
start_time;
/* vcpu_stat items */
u64
+#ifdef __aarch64__
DFX_VALUE(hvc_exit_stat),
DFX_VALUE(wfe_exit_stat),
DFX_VALUE(wfi_exit_stat),
@@ -137,6 +138,38 @@ struct domain {
DFX_VALUE(smc_exit_stat),
DFX_VALUE(sve_exit_stat),
DFX_VALUE(debug_exit_stat),
+#else
+ DFX_VALUE(pf_fixed),
+ DFX_VALUE(pf_guest),
+ DFX_VALUE(tlb_flush),
+ DFX_VALUE(invlpg),
+ DFX_VALUE(exits),
+ DFX_VALUE(io_exits),
+ DFX_VALUE(mmio_exits),
+ DFX_VALUE(signal_exits),
+ DFX_VALUE(irq_window_exits),
+ DFX_VALUE(nmi_window_exits),
+ DFX_VALUE(halt_exits),
+ DFX_VALUE(halt_successful_poll),
+ DFX_VALUE(halt_attempted_poll),
+ DFX_VALUE(halt_wakeup),
+ DFX_VALUE(request_irq_exits),
+ DFX_VALUE(irq_exits),
+ DFX_VALUE(host_state_reload),
+ DFX_VALUE(fpu_reload),
+ DFX_VALUE(insn_emulation),
+ DFX_VALUE(insn_emulation_fail),
+ DFX_VALUE(hypercalls),
+ DFX_VALUE(irq_injections),
+ DFX_VALUE(nmi_injections),
+ DFX_VALUE(cr_exits),
+ DFX_VALUE(msr_rd_exits),
+ DFX_VALUE(msr_wr_exits),
+ DFX_VALUE(apic_wr_exits),
+ DFX_VALUE(ept_vio_exits),
+ DFX_VALUE(ept_mis_exits),
+ DFX_VALUE(pause_exits),
+#endif
DFX_VALUE(steal),
st_max,
DFX_VALUE(vcpu_utime),
diff --git a/src/vcpu_stat.c b/src/vcpu_stat.c
index 7009d41..55cfc7b 100644
--- a/src/vcpu_stat.c
+++ b/src/vcpu_stat.c
@@ -22,6 +22,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
{"%u", GF(pid) },
+#ifdef __aarch64__
{"%llu", GDF(hvc_exit_stat) },
{"%llu", GDF(wfe_exit_stat) },
{"%llu", GDF(wfi_exit_stat) },
@@ -43,11 +44,44 @@ struct file_item vcpu_stat_stab[] = {
{"%llu", GDF(smc_exit_stat) },
{"%llu", GDF(sve_exit_stat) },
{"%llu", GDF(debug_exit_stat) },
+#else
+ {"%llu", GDF(pf_fixed) },
+ {"%llu", GDF(pf_guest) },
+ {"%llu", GDF(tlb_flush) },
+ {"%llu", GDF(invlpg) },
+ {"%llu", GDF(exits) },
+ {"%llu", GDF(io_exits) },
+ {"%llu", GDF(mmio_exits) },
+ {"%llu", GDF(signal_exits) },
+ {"%llu", GDF(irq_window_exits) },
+ {"%llu", GDF(nmi_window_exits) },
+ {"%llu", GDF(halt_exits) },
+ {"%llu", GDF(halt_successful_poll) },
+ {"%llu", GDF(halt_attempted_poll) },
+ {"%llu", GDF(halt_wakeup) },
+ {"%llu", GDF(request_irq_exits) },
+ {"%llu", GDF(irq_exits) },
+ {"%llu", GDF(host_state_reload) },
+ {"%llu", GDF(fpu_reload) },
+ {"%llu", GDF(insn_emulation) },
+ {"%llu", GDF(insn_emulation_fail) },
+ {"%llu", GDF(hypercalls) },
+ {"%llu", GDF(irq_injections) },
+ {"%llu", GDF(nmi_injections) },
+ {"%llu", GDF(cr_exits) },
+ {"%llu", GDF(msr_rd_exits) },
+ {"%llu", GDF(msr_wr_exits) },
+ {"%llu", GDF(apic_wr_exits) },
+ {"%llu", GDF(ept_vio_exits) },
+ {"%llu", GDF(ept_mis_exits) },
+ {"%llu", GDF(pause_exits) },
+#endif
{"%llu", GDF(steal) },
{"%llu", GF(st_max) },
{"%llu", GDF(vcpu_utime) },
{"%llu", GDF(vcpu_stime) },
{"%llu", GDF(gtime) }
+
#undef GF
#undef GDF
};
diff --git a/src/vcpu_stat.h b/src/vcpu_stat.h
index edbef86..9b3f4c2 100644
--- a/src/vcpu_stat.h
+++ b/src/vcpu_stat.h
@@ -15,6 +15,7 @@
/* vcpu_stat items get fun */
GET_VALUE(pid)
+#ifdef __aarch64__
GET_DELTA_FUN(hvc_exit_stat)
GET_DELTA_FUN(wfe_exit_stat)
GET_DELTA_FUN(wfi_exit_stat)
@@ -36,6 +37,38 @@ GET_DELTA_FUN(cp14_64_exit_stat)
GET_DELTA_FUN(smc_exit_stat)
GET_DELTA_FUN(sve_exit_stat)
GET_DELTA_FUN(debug_exit_stat)
+#else
+GET_DELTA_FUN(pf_fixed)
+GET_DELTA_FUN(pf_guest)
+GET_DELTA_FUN(tlb_flush)
+GET_DELTA_FUN(invlpg)
+GET_DELTA_FUN(exits)
+GET_DELTA_FUN(io_exits)
+GET_DELTA_FUN(mmio_exits)
+GET_DELTA_FUN(signal_exits)
+GET_DELTA_FUN(irq_window_exits)
+GET_DELTA_FUN(nmi_window_exits)
+GET_DELTA_FUN(halt_exits)
+GET_DELTA_FUN(halt_successful_poll)
+GET_DELTA_FUN(halt_attempted_poll)
+GET_DELTA_FUN(halt_wakeup)
+GET_DELTA_FUN(request_irq_exits)
+GET_DELTA_FUN(irq_exits)
+GET_DELTA_FUN(host_state_reload)
+GET_DELTA_FUN(fpu_reload)
+GET_DELTA_FUN(insn_emulation)
+GET_DELTA_FUN(insn_emulation_fail)
+GET_DELTA_FUN(hypercalls)
+GET_DELTA_FUN(irq_injections)
+GET_DELTA_FUN(nmi_injections)
+GET_DELTA_FUN(cr_exits)
+GET_DELTA_FUN(msr_rd_exits)
+GET_DELTA_FUN(msr_wr_exits)
+GET_DELTA_FUN(apic_wr_exits)
+GET_DELTA_FUN(ept_vio_exits)
+GET_DELTA_FUN(ept_mis_exits)
+GET_DELTA_FUN(pause_exits)
+#endif
GET_DELTA_FUN(steal)
GET_VALUE(st_max)
GET_DELTA_FUN(vcpu_utime)
diff --git a/src/vmtop.c b/src/vmtop.c
index 0137fdd..f5fd4bd 100644
--- a/src/vmtop.c
+++ b/src/vmtop.c
@@ -192,6 +192,7 @@ static void print_domain_field(struct domain *dom, int field)
break;
}
/* kvm exit fields show */
+#ifdef __aarch64__
case FD_EXTHVC:
case FD_EXTWFE:
case FD_EXTWFI:
@@ -213,6 +214,31 @@ static void print_domain_field(struct domain *dom, int field)
case FD_EXTSVE:
case FD_EXTDBG:
case FD_EXTFAIL: {
+#else
+ case FD_PFFIXED:
+ case FD_PFGUEST:
+ case FD_INVLPG:
+ case FD_IOEXITS:
+ case FD_MMIOEXITS:
+ case FD_EXTSUM:
+ case FD_EXTHALT:
+ case FD_EXTSIG:
+ case FD_EXTIRQ:
+ case FD_EXTNMIW:
+ case FD_EXTIRQW:
+ case FD_IRQIN:
+ case FD_NMIIN:
+ case FD_TLB:
+ case FD_HOSTREL:
+ case FD_HYPERV:
+ case FD_EXTCR:
+ case FD_EXTRMSR:
+ case FD_EXTWMSR:
+ case FD_EXTAPIC:
+ case FD_EXTEPTV:
+ case FD_EXTEPTM:
+ case FD_EXTPAU: {
+#endif
print_scr("%*llu", fields[i].align, *(u64 *)(*fields[i].get_fun)(dom));
break;
}
--
2.27.0
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化