kvm_service_time.stp - Time Statistics on KVM Exit Reasons

  The kvm_service_time.stp script tracks the statistics about the
  amount of time that the processor left the guest virtual machine for
  each exit reason (for example fixing up a page table or handling an
  IO operation).  When the script exits it prints out the number of
  times each exit reason was encountered, the total duration of time it
  left the guest VM, the minimum time, the average time, and the
  maximum time in microseconds for that exit reason. On Linux 2.6.38
  and newer kernel the script can automatically determine whether it is
  running on Intel or AMD processors. For older kernels with a
  kernel.trace("kvm_exit") tracepoint that does not have the $isa
  parameter you can explicitly state the kvm type with a "-G kvm=intel"
  or "-G kvm=amd" on the command line.

  # stap kvm_service_time.stp -T 1


$ stap kvm_service_time.stp -T 10

# Intel exit reasons are EXIT_REASON_* in linux/arch/x86/include/asm/vmx.h
# reason: count sum(us) min(us) avg(us) max(us)
0: 55 123 0 2 12
1: 16668 23165 0 1 77
7: 65 129 0 1 21
12: 182 29145513 58 160140 500054
28: 1 2 2 2 2
30: 1561 5126 0 3 43
32: 10728 7748 0 0 32
40: 4966918 1273170 0 0 47
49: 105 201 0 1 22


Below are the EXIT_REASON_* codes corresponding to the output from the result

#define EXIT_REASON_EXCEPTION_NMI       0
#define EXIT_REASON_EXTERNAL_INTERRUPT  1
#define EXIT_REASON_TRIPLE_FAULT        2

#define EXIT_REASON_PENDING_INTERRUPT   7
#define EXIT_REASON_NMI_WINDOW          8
#define EXIT_REASON_TASK_SWITCH         9
#define EXIT_REASON_CPUID               10
#define EXIT_REASON_HLT                 12
#define EXIT_REASON_INVD                13
#define EXIT_REASON_INVLPG              14
#define EXIT_REASON_RDPMC               15
#define EXIT_REASON_RDTSC               16
#define EXIT_REASON_VMCALL              18
#define EXIT_REASON_VMCLEAR             19
#define EXIT_REASON_VMLAUNCH            20
#define EXIT_REASON_VMPTRLD             21
#define EXIT_REASON_VMPTRST             22
#define EXIT_REASON_VMREAD              23
#define EXIT_REASON_VMRESUME            24
#define EXIT_REASON_VMWRITE             25
#define EXIT_REASON_VMOFF               26
#define EXIT_REASON_VMON                27
#define EXIT_REASON_CR_ACCESS           28
#define EXIT_REASON_DR_ACCESS           29
#define EXIT_REASON_IO_INSTRUCTION      30
#define EXIT_REASON_MSR_READ            31
#define EXIT_REASON_MSR_WRITE           32
#define EXIT_REASON_INVALID_STATE       33
#define EXIT_REASON_MWAIT_INSTRUCTION   36
#define EXIT_REASON_MONITOR_INSTRUCTION 39
#define EXIT_REASON_PAUSE_INSTRUCTION   40
#define EXIT_REASON_MCE_DURING_VMENTRY  41
#define EXIT_REASON_TPR_BELOW_THRESHOLD 43
#define EXIT_REASON_APIC_ACCESS         44
#define EXIT_REASON_EOI_INDUCED         45
#define EXIT_REASON_EPT_VIOLATION       48
#define EXIT_REASON_EPT_MISCONFIG       49
#define EXIT_REASON_INVEPT              50
#define EXIT_REASON_PREEMPTION_TIMER    52
#define EXIT_REASON_INVVPID             53
#define EXIT_REASON_WBINVD              54
#define EXIT_REASON_XSETBV              55
#define EXIT_REASON_APIC_WRITE          56
#define EXIT_REASON_INVPCID             58

