diff options
author | Avi Kivity <avi@qumranet.com> | 2007-04-19 10:27:43 -0400 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2007-05-03 03:52:30 -0400 |
commit | 1165f5fec18c077bdba88e7125fd41f8e3617cb4 (patch) | |
tree | a1931bfddfabaa909f4ebd14a5c00a549d1e37ec /drivers/kvm/kvm.h | |
parent | 3fca03653010b8c5fa63b99fc94c78cbfb433d00 (diff) |
KVM: Per-vcpu statistics
Make the exit statistics per-vcpu instead of global. This gives a 3.5%
boost when running one virtual machine per core on my two socket dual core
(4 cores total) machine.
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'drivers/kvm/kvm.h')
-rw-r--r-- | drivers/kvm/kvm.h | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h index b9c318a9e334..d1a90c5d76ce 100644 --- a/drivers/kvm/kvm.h +++ b/drivers/kvm/kvm.h | |||
@@ -236,6 +236,22 @@ struct kvm_pio_request { | |||
236 | int rep; | 236 | int rep; |
237 | }; | 237 | }; |
238 | 238 | ||
239 | struct kvm_stat { | ||
240 | u32 pf_fixed; | ||
241 | u32 pf_guest; | ||
242 | u32 tlb_flush; | ||
243 | u32 invlpg; | ||
244 | |||
245 | u32 exits; | ||
246 | u32 io_exits; | ||
247 | u32 mmio_exits; | ||
248 | u32 signal_exits; | ||
249 | u32 irq_window_exits; | ||
250 | u32 halt_exits; | ||
251 | u32 request_irq_exits; | ||
252 | u32 irq_exits; | ||
253 | }; | ||
254 | |||
239 | struct kvm_vcpu { | 255 | struct kvm_vcpu { |
240 | struct kvm *kvm; | 256 | struct kvm *kvm; |
241 | union { | 257 | union { |
@@ -298,6 +314,8 @@ struct kvm_vcpu { | |||
298 | int sigset_active; | 314 | int sigset_active; |
299 | sigset_t sigset; | 315 | sigset_t sigset; |
300 | 316 | ||
317 | struct kvm_stat stat; | ||
318 | |||
301 | struct { | 319 | struct { |
302 | int active; | 320 | int active; |
303 | u8 save_iopl; | 321 | u8 save_iopl; |
@@ -347,22 +365,6 @@ struct kvm { | |||
347 | struct file *filp; | 365 | struct file *filp; |
348 | }; | 366 | }; |
349 | 367 | ||
350 | struct kvm_stat { | ||
351 | u32 pf_fixed; | ||
352 | u32 pf_guest; | ||
353 | u32 tlb_flush; | ||
354 | u32 invlpg; | ||
355 | |||
356 | u32 exits; | ||
357 | u32 io_exits; | ||
358 | u32 mmio_exits; | ||
359 | u32 signal_exits; | ||
360 | u32 irq_window_exits; | ||
361 | u32 halt_exits; | ||
362 | u32 request_irq_exits; | ||
363 | u32 irq_exits; | ||
364 | }; | ||
365 | |||
366 | struct descriptor_table { | 368 | struct descriptor_table { |
367 | u16 limit; | 369 | u16 limit; |
368 | unsigned long base; | 370 | unsigned long base; |
@@ -424,7 +426,6 @@ struct kvm_arch_ops { | |||
424 | unsigned char *hypercall_addr); | 426 | unsigned char *hypercall_addr); |
425 | }; | 427 | }; |
426 | 428 | ||
427 | extern struct kvm_stat kvm_stat; | ||
428 | extern struct kvm_arch_ops *kvm_arch_ops; | 429 | extern struct kvm_arch_ops *kvm_arch_ops; |
429 | 430 | ||
430 | #define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) | 431 | #define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) |