Xenoprof是HP公司针对OProfile工具开发的一个接口,它使得OProfile能够适用于基于Xen的虚拟环境,从而能够对内核、应用程序等的性能信息进行监控,在官网http://xenoprof.sourceforge.net/上有详细的介绍。
Xenprof的原理是:在基于Xen的虚拟环境下,可以使用Xenoprof建立一个profile的 session,在这个session里可以有选择性地对多个虚拟机进行profile(包括半虚拟化安装的Linux以及以全虚拟化安装的 Windows或OpenSolaris),以获取内核或应用程序的性能信息(如Cache miss, TLB miss, etc)。
? 具体安装过程如下:
1. 从http://oprofile.sourceforge.net/上下载oprofile-0.9.5.tar.gz(不是Oprofile的最新版本0.9.6,Xen现在只支持到这个版本) ;
2. 从Xenoprof官方网站http://xenoprof.sourceforge.net/上下载oprofile-0.9.5-xen.patch;
3.将oprofile-0.9.5.tar.gz与oprofile-0.9.5-xen.patch放在同一个目录。
解压oprofile并打补丁:
tar xzvf oprofile-0.9.5.tar.gz
cd oprofile-0.9.5
patch -p1 < ../oprofile-0.9.5-xen.patch;
4. 执行./configure --with-kernel-support命令进行编译前的配置
期间会碰到两个错误:
configure: error: popt library not found
configure: error: liberty library not found
解决办法:sudo apt-get install libpopt-dev binutils-dev
5. 配置好以后执行:
make
sudo make install
即可完成OProfile的安装.
除此之外,还需要重新编译内核以添加对Oprofile的支持。
重新编译Xen化内核并添加Oprofile支持
如果你还未安装Xen,推荐你可以将二者一起完成,安装Xen-4.0.1参见:http://www.linuxidc.com/Linux/2011-07/39259.htm
接1.4小结:
进入配置界面,加入xen的配置:
$ make menuconfig
General setup --->
<*> OProfile system profiling (EXPERIMENTAL)
//添加Oprofile支持
Processor type and features --->
[*] Enable Xen compatible kernel
Networking support --->
Networking options --->
<*> 802.1d Ethernet Bridging
Device Drivers --->
XEN --->
[*] Privileged Guest (domain 0)
<*> Backend driver support
<*> Block-device backend driver
<*> Block-device tap backend driver
<*> Block-device tap backend driver 2
<*> Network-device backend driver
<*> PCI-device backend driver
<*> SCSI backend driver
<*> USB backend driver
<*> Block-device frontend driver
<*> Network-device frontend driver
<*> SCSI frontend driver
<*> USB frontend driver
<*> Framebuffer-device frontend driver
<*> Keyboard-device frontend driver
[*] Disable serial port drivers
<*> Export Xen attributes in sysfs
Xen version compatibility (3.3.0 and later) --->
3.3.0 and later
后面的编译配置过程按照原来的步骤来即可。
测试Xenoprof
内核重新编译,配置完成后一切安装完毕,现在我们开始测试Xenoprof:
># opcontrol --help
得到:/usr/local/bin/opcontrol: 567: Syntax error: Bad for loop variable
这需要修改文件:# vi /usr/local/bin/opcontrol 的第一行:
#!/bin/bash
好了现在Xenoprof可以正常运行了:
sudo opcontrol --help
opcontrol: usage:
-l/--list-events list event types and unit masks
-?/--help this message
-v/--version show version
--init loads the oprofile module and oprofilefs
--setup give setup arguments (may be omitted)
--status show configuration
--start-daemon start daemon without starting profiling
-s/--start start data collection
… …
小测试一下:
$ sudo opcontrol --dump
$ sudo opreport
Overflow stats not available
CPU: Intel Architectural Perfmon, speed 2800.06 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
CPU_CLK_UNHALT...|
samples| %|
------------------
3054 60.7157 no-vmlinux
1015 20.1789 libc-2.11.1.so
632 12.5646 bash
198 3.9364 ld-2.11.1.so
74 1.4712 python2.6
CPU_CLK_UNHALT...|
samples| %|
------------------
73 98.6486 python2.6
1 1.3514 [vdso] (tgid:3638 range:0x7fffe57ff000-0x7fffe5800000)
16 0.3181 oprofiled
7 0.1392 gawk
4 0.0795 libgcc_s.so.1
4 0.0795 sudo
4 0.0795 libstdc++.so.6.0.13
3 0.0596 grep
3 0.0596 libpam.so.0.82.2
3 0.0596 libpthread-2.11.1.so
3 0.0596 opreport
2 0.0398 libdl-2.11.1.so
2 0.0398 libnsl-2.11.1.so
1 0.0199 dash
1 0.0199 ls
1 0.0199 mv
1 0.0199 libacl.so.1.1.0
1 0.0199 libnss_files-2.11.1.so
1 0.0199 rsyslogd
这样就可以在Xen里面使用Xenoprof了!