需要使用PAPI得到硬件级的数据,即与微指令相关的数据,例如L1/L2 cache miss、TLB miss、Cycle等,而PAPI需要perfctr(Performance-monitoring counters support)模块的支持,而Linux内核当中默认没有perfctr模块,并且perfctr只在某些内核上被支持,它实际上是内核的一个补丁,需要重新编译内核,打上补丁才能在内核上运行perfctr模块。更多信息参考papi和perfctr的INSTALL文件。
一、环境介绍
Intel(R) Xeon(R) CPU ,X86_64平台;
物理机<建议不要在虚拟机上试,否则可能出现问题,后面介绍>
CentOS release 5.4 (Final)
内核版本是2.6.18-164.el5-x86_64
查看内核、平台等信息 #uname -a Linux gc04vm13 2.6.18-164.el5<原来内核> #1 SMP Thu Sep 3 03:28:30 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux 查看操作系统版本 #cat /etc/issue CentOS release 5.4 (Final) 查看CPU信息 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 1 Intel(R) Xeon(R) CPU E5520 @ 2.27GHz <只给虚拟机分配了一个CPU>
二、准备工作
(i)下载papi,可以在?lid=51&slid=69上下载各个版本的papi,这里下载papi-3.6.0。
papi中包含了perfctr,用户不需要单独下载perfctr,(当然也可以单独下载,网址是~mikpe/linux/perfctr),这里选择2.6版本的perfctr。
解压papi,阅读papi-3.6.0/src/perfctr-2.6.x目录下的INSTALL文件,里面讲到“该版本的perfctr适用于如下版本的Linux内核:在papi-3.6.0/src/perfctr-2.6.x/patches目录下,若存在patch-kernel-*补丁,说明适用于*版本的Linux内核,我们选择2.6.19版本的linux内核。
注意: PERFCTR 的版本并不是和linux内核版本相对应的,比如ompi自带的perfctr-2.6.x可适用于很多版本的linux内核,例如2.4.26版本的内核。
(ii)下载linux-2.6.19.tar.bz2,在网站 上可以下载任何版本的linux内核。
一般情况下,当前内核版本是x.y.***版本的话,编译的新内核版本最好也是x.y.***版本,例如不要从2.4.x升级到2.6.x,因为两者差异比较大,一般[主].[次]版本号相同的内核可以顺利升级。
(iii) 认真看完perfctr的INSTALL文件,里面详细说明了安装步骤和测试。