只是想運(yùn)行一下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")不存在,運(yùn)行命令:stap -vl 'kernel.trace("*")'。發(fā)現(xiàn)確實(shí)沒有kvm_exit。現(xiàn)在面臨兩個選擇:尋找systemtap,kernel.trace的原理,看看如何獲得kernel的trace信息。另一個選擇:直接進(jìn)入內(nèi)核查看kvm_exit。我決定選擇后者。
在kvm_service_time.stp中,我發(fā)現(xiàn)了頭文件:vmx.h。里面定義了exit reason的類型。這個應(yīng)該是關(guān)鍵,運(yùn)行命令:find /usr -name 'vmx.h'。獲得如下信息:
/usr/include/x86_64-linux-gnu/asm/vmx.h
在內(nèi)核源碼中運(yùn)行命令:grep -nr 'include <asm/vmx.h>' ./。獲得如下信息:
./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這么感興趣,因?yàn)閠race其實(shí)就是探針(具體請看“工作中什么能力最重要”)。這個也許就是理解原理的一條捷徑!