只是想运行kvm_service_time.stp

只是想运行一下kvm_service_time.stp,提示这个错误:

semantic error: while resolving probe point: identifier 'kernel' at ./kvm_service_time.stp:25:7 source: probe kernel.trace("kvm_exit")

探针kernel.trace("kvm_exit")不存在,运行命令:stap -vl 'kernel.trace("*")'。发现确实没有kvm_exit。现在面临两个选择:寻找systemtap,kernel.trace的原理,看看如何获得kernel的trace信息。另一个选择:直接进入内核查看kvm_exit。我决定选择后者。

在kvm_service_time.stp中,我发现了头文件:vmx.h。里面定义了exit reason的类型。这个应该是关键,运行命令:find /usr -name 'vmx.h'。获得如下信息:

/usr/include/x86_64-linux-gnu/asm/vmx.h

在内核源码中运行命令:grep -nr 'include ' ./。获得如下信息:

./tools/arch/x86/include/uapi/asm/kvm_perf.h:5:#include

./tools/perf/arch/x86/util/kvm-stat.c:3:#include

./arch/x86/include/uapi/asm/kvm_perf.h:5:#include

./arch/x86/include/asm/virtext.h:20:#include

./arch/x86/kvm/vmx.c:42:#include  

./arch/x86/kvm/mmu.c:47:#include

./arch/x86/kvm/trace.h:5:#include

arch/x86/kvm/trace.h看起来像我要的东西。kvm trace的用法。

为什么对trace这么感兴趣,因为trace其实就是探针(具体请看“工作中什么能力最重要”)。这个也许就是理解原理的一条捷径!

你可能感兴趣的:(只是想运行kvm_service_time.stp)