通过xentrace、xentrace_format和xenalyze获取Xen执行的详细参数信息
在Xen进行测试或调优的时候,需要进行比较底层的细节分析,比如统计VMExit的频率、VMExit的类型、VMExit消耗了多少CPU时间,这时就可以使用xentrace这个工具了.
xentrace是在xen源代码中自带的一个工具,在“make tools”编译时就会默认生成,xentrace生成的数据是二进制的格式,人的肉眼不能直接读取,可以使用xentrace_format转换为凡人能够直接读取的信息,xentrace_format解析后的数据信息量一般也比较大,可能还需要自己编写解析工具来提取自己需要的数据.
使用xentrace/xentrace_format来分析HVM的VMExit的情况,可以有如下操作:
- ##startXenHVMguestbeforethistracing
- #xentrace-D-e0x81000-T30trace.data
- #cattrace.data|xentrace_formatxen.git/tools/xentrace/formats|./my-xentrace-analyzer.pl
其中-e 0×81000 是指“TRC_HVM_ENTRYEXIT”这类event的trace信息,包括VMEntry和VMExit,关于其他各种event的代号是多少,可以参考文末的参考文档;-T 30表示trace执行时间为30s.
使用xentrace_format时,需要一个格式文件作为参数,一般可以选择xen源代码中的tools/xentrace/formats这个文件.
另外,这里我还有一个自己的脚本提取自己感兴趣的数据,得到结果示例如下:
- VMExitCount:1117671
- TypeTotalTSCTSCRatioTotalCountCountRatioAvgTSC
- ExternalInterrupt24278912440.173475440.316985
- Interruptwindow209880.00100.002098
- HLT97503870240.664374590.3922288
- VMCALL1789120.00100.0017891
- CRaccess4026000.00720.005591
- I/OInstruction10413581920.07307470.0333868
- PAUSE352447520.0080670.014369--phpfensi.com
- VirtualizedEOI392501840.00144250.012720
- EPTviolation443583000.0031790.0013953
- APICwrite13337348360.092761580.254829
对于各种VMExit类型,可以参考Intel SDM 3C 中的附录 Appendix C “VMX Basic Exit Reasons” 中的介绍.
xen社区中也做了一个解析xentrace数据的工具,叫做xenalyze,没有在xen源代码中,是offline维护着的一个repository,我就使用过一下,对其还不是很熟悉.
xenalyze的源代码可以从http://xenbits.xen.org/ext/xenalyze/下载(使用hg clone命令).
在使用时,注意的是,xenalyze中用到了CPU的频率,需要根据自己CPU实际频率进行修改,否则计算出来每秒钟多少事件这样的信息就不准了,修改 xenalyze.c文件中的“#define DEFAULT_CPU_HZ 2400000000LL”这一行(已经表示2.4GHz了).
热门评论