• Jiri Olsa's avatar
    tools lib traceevent: Add kvm plugin · 35d79f9f
    Jiri Olsa authored
    Backporting kvm plugin.
    
    Backported from Steven Rostedt's trace-cmd repo (HEAD 0f2c2fb):
    git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git
    
    This plugin adds field resolving functions for following
    tracepoint events:
      kvm:kvm_exit
      kvm:kvm_emulate_insn
      kvm:kvm_nested_vmexit
      kvm:kvm_nested_vmexit_inject
      kvmmmu:kvm_mmu_get_page
      kvmmmu:kvm_mmu_sync_page
      kvmmmu:kvm_mmu_unsync_page
      kvmmmu:kvm_mmu_zap_page
      kvmmmu:kvm_mmu_prepare_zap_page
    
    The diff of 'perf script' output generated by old and new code:
    (data was generated by 'perf record -e 'kvm:*,kvmmmu:*' -a')
    
      --- script.kvm.old
      +++ script.kvm.new
        qemu-system-x86 17414 [000]  6868.995053: kvm:kvm_exit: reason EPT_VIOLATION rip 0xfff0 info 184 0
        qemu-system-x86 17414 [000]  6868.995109: kvm:kvm_emulate_insn: f0000:c46b:e4 71 (real)
      - qemu-system-x86  3006 [002] 10562.079422: kvmmmu:kvm_mmu_get_page: [FAILED TO PARSE] mmu_valid_gen=0x2 gfn=0 role=122884 root_count=0 unsync=0 created=1
      + qemu-system-x86  3006 [002] 10562.079422: kvmmmu:kvm_mmu_get_page: new sp gfn 0 0/4 q0 direct --- !pge !nxe root 0 sync
      - qemu-system-x86  3006 [002] 10562.080502: kvmmmu:kvm_mmu_prepare_zap_page: [FAILED TO PARSE] mmu_valid_gen=0x2 gfn=0 role=122884 root_count=1 unsync=0
      + qemu-system-x86  3006 [002] 10562.080502: kvmmmu:kvm_mmu_prepare_zap_page: 0/4 q0 direct --- !pge !nxe root 1 sync
        qemu-system-x86  3290 [002] 10708.755312: kvmmmu:fast_page_fault: [FAILED TO PARSE] vcpu_id=0 gva=4094486080 error_code=3 sptep=0xffff88019f1e3670 old_spte=336391285 new_spte=336391287 retry=1
      -          insmod  2576 [001]   781.731666: kvmmmu:kvm_mmu_sync_page: [FAILED TO PARSE] mmu_valid_gen=0x1 gfn=2 role=24624 root_count=10 unsync=1
      +          insmod  2576 [001]   781.731666: kvmmmu:kvm_mmu_sync_page: 3/0 q0 --- !pge !nxe root 10 unsync
      -          insmod  2576 [001]   781.731668: kvmmmu:kvm_mmu_unsync_page: [FAILED TO PARSE] mmu_valid_gen=0x1 gfn=2 role=24624 root_count=10 unsync=1
      +          insmod  2576 [001]   781.731668: kvmmmu:kvm_mmu_unsync_page: 3/0 q0 --- !pge !nxe root 10 unsync
    
    Note:
     - kvm_mmu_zap_page is replaced by kvm_mmu_prepare_zap_page
       in current kernel, keeping it for backward compatibility
     - some of the tracepoints keep the same output even with
       the plugin handling: kvm:kvm_exit, kvm:kvm_emulate_insn
     - the 'kvmmmu:fast_page_fault' is still broken because of
       missing is_writable_pte function and is fixed in another patch
     - ommited following tracepoints from backport because
       the output was buggy
         kvm:kvm_nested_vmexit
         kvm:kvm_nested_vmexit_inject
    
    Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Link: http://lkml.kernel.org/r/1386076182-14484-16-git-send-email-jolsa@redhat.comSigned-off-by: default avatarJiri Olsa <jolsa@redhat.com>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    35d79f9f
plugin_kvm.c 10.5 KB