From: ehrhardt@linux.vnet.ibm.com
To: kvm-ppc@vger.kernel.org
Subject: [PATCH 2/3] kvmppc: optimize kvm stat handling
Date: Fri, 10 Oct 2008 10:59:32 +0000 [thread overview]
Message-ID: <1223636372-8946-4-git-send-email-ehrhardt@linux.vnet.ibm.com> (raw)
From: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
Currently we use an unneicessary if&switch to detect some cases.
To be honest we don't need the ligh_exits counter anyway, because we can
calculate it out of others. Sum_exits can also be calculated, so we can
remove that too.
MMIO, DCR and INTR can be counted on other places without these
additional control structures (The INTR case was never hit anyway).
The handling of BOOKE_INTERRUPT_EXTERNAL/BOOKE_INTERRUPT_DECREMENTER is
similar, but we can avoid the additional if when copying 3 lines of code.
I thought about a goto there to prevent duplicate lines, but rewriting three
lines should be better style than a goto cross switch/case statements (its
also not enough code to justify a new inline function).
Signed-off-by: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
---
[diffstat]
booke_guest.c | 40 ++++++++++++----------------------------
1 file changed, 12 insertions(+), 28 deletions(-)
[diff]
diff --git a/arch/powerpc/kvm/booke_guest.c b/arch/powerpc/kvm/booke_guest.c
--- a/arch/powerpc/kvm/booke_guest.c
+++ b/arch/powerpc/kvm/booke_guest.c
@@ -36,11 +36,9 @@
#define VCPU_STAT(x) offsetof(struct kvm_vcpu, stat.x), KVM_STAT_VCPU
struct kvm_stats_debugfs_item debugfs_entries[] = {
- { "exits", VCPU_STAT(sum_exits) },
{ "mmio", VCPU_STAT(mmio_exits) },
{ "dcr", VCPU_STAT(dcr_exits) },
{ "sig", VCPU_STAT(signal_exits) },
- { "light", VCPU_STAT(light_exits) },
{ "itlb_r", VCPU_STAT(itlb_real_miss_exits) },
{ "itlb_v", VCPU_STAT(itlb_virt_miss_exits) },
{ "dtlb_r", VCPU_STAT(dtlb_real_miss_exits) },
@@ -270,7 +268,16 @@
break;
case BOOKE_INTERRUPT_EXTERNAL:
+ vcpu->stat.ext_intr_exits++;
+ set_last_exit_type(EXT_INTR_EXITS);
+ if (need_resched())
+ cond_resched();
+ r = RESUME_GUEST;
+ break;
+
case BOOKE_INTERRUPT_DECREMENTER:
+ vcpu->stat.dec_exits++;
+ set_last_exit_type(DEC_EXITS);
/* Since we switched IVPR back to the host's value, the host
* handled this interrupt the moment we enabled interrupts.
* Now we just offer it a chance to reschedule the guest. */
@@ -281,13 +288,6 @@
* misses before ceding control. */
if (need_resched())
cond_resched();
- if (exit_nr = BOOKE_INTERRUPT_DECREMENTER) {
- vcpu->stat.dec_exits++;
- set_last_exit_type(DEC_EXITS);
- } else {
- vcpu->stat.ext_intr_exits++;
- set_last_exit_type(EXT_INTR_EXITS);
- }
r = RESUME_GUEST;
break;
@@ -313,6 +313,7 @@
break;
case EMULATE_DO_DCR:
run->exit_reason = KVM_EXIT_DCR;
+ vcpu->stat.dcr_exits++;
set_last_exit_type(DCR_EXITS);
r = RESUME_HOST;
break;
@@ -415,6 +416,7 @@
* actually RAM. */
r = kvmppc_emulate_mmio(run, vcpu);
set_last_exit_type(MMIO_EXITS);
+ vcpu->stat.mmio_exits++;
}
break;
@@ -485,8 +487,6 @@
kvmppc_check_and_deliver_interrupts(vcpu);
- /* Do some exit accounting. */
- vcpu->stat.sum_exits++;
if (!(r & RESUME_HOST)) {
/* To avoid clobbering exit_reason, only check for signals if
* we aren't already exiting to userspace for some other
@@ -494,24 +494,8 @@
if (signal_pending(current)) {
run->exit_reason = KVM_EXIT_INTR;
r = (-EINTR << 2) | RESUME_HOST | (r & RESUME_FLAG_NV);
-
+ set_last_exit_type(SIGNAL_EXITS);
vcpu->stat.signal_exits++;
- set_last_exit_type(SIGNAL_EXITS);
- } else {
- vcpu->stat.light_exits++;
- }
- } else {
- switch (run->exit_reason) {
- case KVM_EXIT_MMIO:
- vcpu->stat.mmio_exits++;
- break;
- case KVM_EXIT_DCR:
- vcpu->stat.dcr_exits++;
- break;
- case KVM_EXIT_INTR:
- vcpu->stat.signal_exits++;
- set_last_exit_type(SIGNAL_EXITS);
- break;
}
}
next reply other threads:[~2008-10-10 10:59 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-10 10:59 ehrhardt [this message]
2008-10-10 18:12 ` [PATCH 2/3] kvmppc: optimize kvm stat handling Hollis Blanchard
2008-10-13 12:07 ` ehrhardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1223636372-8946-4-git-send-email-ehrhardt@linux.vnet.ibm.com \
--to=ehrhardt@linux.vnet.ibm.com \
--cc=kvm-ppc@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.