KVM: PPC: Book3S HV: Counters for passthrough IRQ stats
Add VCPU stat counters to track affinity for passthrough interrupts. pthru_all: Counts all passthrough interrupts whose IRQ mappings are in the kvmppc_passthru_irq_map structure. pthru_host: Counts all cached passthrough interrupts that were injected from the host through kvm_set_irq (i.e. not handled in real mode). pthru_bad_aff: Counts how many cached passthrough interrupts have bad affinity (receiving CPU is not running VCPU that is the target of the virtual interrupt in the guest). Signed-off-by: Suresh Warrier <warrier@linux.vnet.ibm.com> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
This commit is contained in:
parent
5d375199ea
commit
65e7026a6c
|
@ -137,6 +137,9 @@ struct kvm_vcpu_stat {
|
|||
u64 ld_slow;
|
||||
u64 st_slow;
|
||||
#endif
|
||||
u64 pthru_all;
|
||||
u64 pthru_host;
|
||||
u64 pthru_bad_aff;
|
||||
};
|
||||
|
||||
enum kvm_exit_types {
|
||||
|
|
|
@ -68,6 +68,9 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
|
|||
{ "ld_slow", VCPU_STAT(ld_slow) },
|
||||
{ "st", VCPU_STAT(st) },
|
||||
{ "st_slow", VCPU_STAT(st_slow) },
|
||||
{ "pthru_all", VCPU_STAT(pthru_all) },
|
||||
{ "pthru_host", VCPU_STAT(pthru_host) },
|
||||
{ "pthru_bad_aff", VCPU_STAT(pthru_bad_aff) },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
|
|
|
@ -716,11 +716,19 @@ int kvmppc_rm_h_eoi(struct kvm_vcpu *vcpu, unsigned long xirr)
|
|||
icp->rm_eoied_irq = irq;
|
||||
}
|
||||
|
||||
if (state->host_irq && state->intr_cpu != -1) {
|
||||
int pcpu = cpu_first_thread_sibling(raw_smp_processor_id());
|
||||
if (state->intr_cpu != pcpu)
|
||||
xics_opal_rm_set_server(state->host_irq, pcpu);
|
||||
state->intr_cpu = -1;
|
||||
if (state->host_irq) {
|
||||
++vcpu->stat.pthru_all;
|
||||
if (state->intr_cpu != -1) {
|
||||
int pcpu = raw_smp_processor_id();
|
||||
|
||||
pcpu = cpu_first_thread_sibling(pcpu);
|
||||
++vcpu->stat.pthru_host;
|
||||
if (state->intr_cpu != pcpu) {
|
||||
++vcpu->stat.pthru_bad_aff;
|
||||
xics_opal_rm_set_server(state->host_irq, pcpu);
|
||||
}
|
||||
state->intr_cpu = -1;
|
||||
}
|
||||
}
|
||||
bail:
|
||||
return check_too_hard(xics, icp);
|
||||
|
|
Loading…
Reference in New Issue