LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Intel(R)Xeon(Performance-monitoringcounterssupport)模块介绍分析

2023年6月29日 243点热度

零、需求介绍

须要使用PAPI得到硬件级的数据,即与微指令相关的数据,比如L1/L2cachemiss、TLBmiss、Cycle等,而PAPI须要perfctr(Performance-monitoringcounterssupport)模块的支持,而Linux内核当中默认没有perfctr模块,但是perfctr只在个别内核上被支持,它实际上是内核的一个补丁,须要重新编译内核,打上补丁能够在内核上运行perfctr模块。更多信息参考papi和perfctr的INSTALL文件。

一、环境介绍

Intel(R)Xeon(R)CPU,X86_64平台;

化学机

CentOSrelease5.4(Final)

内核版本是2.6.18-164.el5-x86_64

查看内核、平台等信息#uname-aLinuxgc04vm132.6.18-164.el5#1SMPThuSep303:28:30EDT2009x86_64x86_64x86_64GNU/Linux查看操作系统版本#cat/etc/issueCentOSrelease5.4(Final)查看CPU信息cat/proc/cpuinfo|grepname|cut-f2-d:|uniq-c1Intel(R)Xeon(R)CPUE5520@2.27GHz

二、准备工作

(i)下载papi,可以在上下载各个版本的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文件,上面详尽说明了安装步骤和测试。

三、安装步骤

(1)解压内核

bzip2-dlinux-2.6.19.tar.bz2

tarxvflinux-2.6.19.tar

生成linux-2.6.19目录

(2)复制内核到/usr/src目录下

cp-rlinux-2.6.19/usr/src/

(3)解压papi到目录/opt下,

tarzxvfpapi-3.6.0.tar.gz

cppapi-3.6.0/opt/

(4)

cd/usr/src/linux-2.6.19

linux内核编译_linux内核版本 选择_内核支持把模块编译到指定目录

makemrproper

(5)在内核目录下执行update-kernel

cd/usr/src/linux-2.6.19

/opt/papi-3.6.0/src/perfctr-2.6.x/update-kernel

若内核版本有问题则出现如下信息

Error:nosuitablepatchfoundforkernel2.6.19zkl-perfctr

Seeperfctr-2.6.x/patches/forsupportedkernelversions,

可以查看perfctr-2.6.x/patches/下支持的内核版本。

(6)该步骤可以跳过,也可以这样做

拷贝原有内核的.config到当前内核目录下

cd/usr/src/linux-2.6.19

cp/usr/src/kernels/2.6.18-164.el5-x86_64/.config.

(7)配置选择内核模块

cd/usr/src/linux-2.6.19

makemenuconfig

选择模块:

查看perfctr-2.6.x目录下的INSTALL文件,它有如下这种内容,其意思是说必须选择这样几个模块:

(i)Loadablemodulesupport选项下linux开发培训,通常默认即可,这个模块的功能是帮助系统可以动态加载模块。

(ii)Processortypeandfeatures选项下的Performance-monitoringcounterssupport(即PERFCTR),

这个必须选择,笔者做实验认为应当将PERFCTR选择为(M),其子项均选择为*,将它编译成可动态加载的模块,请按如下方法选择。

注意:

我在做实验时,最开始将PERFCTR选择为*,将其编译进内核,最后安装完毕,仍然不能执行perfectr的实例,查看系统目录/lib/modules/'uname-r'/drivers下也没有perfectr模块,使用lsmod不能查看到perfctr模块,既然编译进了内核,应当能看见的,不知啥缘由?更不能使用命令modprobeperfctr加载模块(由于不是以动态加载模块的方式加载的),可能与没有将PERFCTR模块设置为M有关。

内核模块选择操作方法:

选择模块是按Y会出现*,按M会出现M,按N可以取消选择。也可以按空格键从*切换到无,为小写M(键下小写M)表示编译成可动态加载的模块,*表示编译步入内核。

(iii)内核支持APIC

内核支持把模块编译到指定目录_linux内核版本 选择_linux内核编译

据悉必须保证内核支持APIC(AdvancedProgrammableInterruptController中级可编程中断控制器),这是由于前面papi要使用linux系统镜像下载,所以请保证选中了APIC相关项,可以按"/",之后键入APIClinux内核版本 选择,搜索以下与之相关的模块是否选择了,这个模块实际上在在Processortypeandfeatures选项下,模块选择完毕,可以使用命令grepPIC/usr/src/linux-2.6.19/.config查看apic是否选择,选择了的话应当显示CONFIG_X86_GOOD_APIC=y等字样,papi的INSTALL文件中说到“SMP(多核,对称多处理器)上默认选择了该项,然而UP(单处理器)上默认没选择”。

----------------------------------------------------------------------------------------

以下摘自perfctr的INSTALL文件

Youshouldeitherconfigurewithmodules(CONFIG_MODULES=y)ANDmodule

versions(CONFIG_MODVERSIONS=y),orcompletelywithoutmodules

(CONFIG_MODULES=n).Moduleswithoutmoduleversionsisaninherently

unsafeconfigurationwhichisnotrecommended.

Loadablemodulesupport选项

YoushouldalsoenableatleastCONFIG_PERFCTR,CONFIG_PERFCTR_VIRTUAL,

andCONFIG_PERFCTR_GLOBAL.

Processortypeandfeatures选项下的Performance-monitoringcounterssupport(即PERFCTR)选项下的所有选项都选中

YoumayalsoselectCONFIG_PERFCTR=mtobuildthebulkofthedriver(或则设为M,编译成动态加载的模块)

asaloadablekernelmodule;themodulewillbenamed`perfctr'.

Note:Theperfctrkernelpatchaddsonewordtothe`thread_struct'

type,whichmakesthepatchedkernelbinaryincompatiblewithan

unpatchedone.Thisiswhyitisimportanttodistinguishthepatched

kernelviaEXTRAVERSIONandCONFIG_MODVERSIONS.

----------------------------------------------------------------------------------------

(7)更改/usr/src/linux-2.6.19/Makefile,加上扩充版本号,对该内核给一个标记,

EXTRAVERSION=-zkl-perfctr

这样做以后,您编译内核完成后,你的内核版本就是linux-2.6.19-zkl-perfctr

(8)编译内核

第一种做法=================================================================================

#makeclean

#makevmlinuxmodules动作完成后在/usr/src/linux-2.6.19/下生成了模块相关文件,比如在drivers中有好多相关文件

#makemodules_install安装模块,此命令会借助里面在/usr/src/linux-2.6.19/下生成的模块相关文件,对它们进行编译,在系统目录/lib/modules/2.6.19-zkl-perfctr下生成模块,比如可以在drivers中见到perfctr模块

#makebzImage编译生成内核文件,/usr/src/linux-2.6.19/arch/x86_64/boot/目录下生成了内核文件bzImage

#makeinstall执行此命令必须保证之前生成了内核文件bzImage

sh/usr/src/linux-2.6.19/arch/x86_64/boot/install.sh2.6.19-zkl-perfctrarch/x86_64/boot/bzImageSystem.map"/boot"

此命令等同于第二种方式中的(e),只不过使用makeinstall命令会手动完成e中的几种动作,实现内核多重启动

=====================================================================================

或则

第二种做法

===============================================================================

(a)makeclean将之前生成的.o文件删掉掉,这样不会形成新旧版本的偏差

(b)makebzImage

命令执行成功将提示如下信息,在/usr/src/linux-2.6.19/arch/x86_64/boot/目录下生成了内核文件bzImage

Rootdeviceis(8,3)

Bootsector512bytes.

Setupis7252bytes.

Systemis1794kB

Kernel:arch/x86_64/boot/bzImageisready(#1)

(c)makemodules制做出模块相关的文件

(d)makemodules_install安装模块

(e)实现内核多重启动

cp/usr/src/linux-2.6.19/arch/x86_64/boot/bzImage(表示一条命令太长了,换行)

>/boot/vmlinux-2.6.19-zkl-perfctr

cp/usr/src/linux-2.6.19/System.map

>/boot/System.map-2.6.19-zkl-perfctr

自动生成initrd-2.6.19-zkl-perfctr.img文件到/boot目录下:

cd/usr/src/linux-2.6.19

[root@gc04vm13linux-2.6.19]#mkinitrd/boot/initrd-2.6.19zkl-perfctr.img2.6.19-zkl-perfctr(注意内核是2.6.19-zkl-perfctr,这是由于上面更改了Makefile中的版本扩充号,该命令将在/boot目录下生成initrd-2.6.19zkl-perfctr.img文件)

编辑系统内核启动文件

vim/boot/grub/menu.lst

#grub.confgeneratedbyanaconda

#

#Notethatyoudonothavetorerungrubaftermakingchangestothisfile

#NOTICE:Youhavea/bootpartition.Thismeansthat

#allkernelandinitrdpathsarerelativeto/boot/,eg.

#root(hd0,0)

#kernel/vmlinuz-versionroroot=/dev/VolGroup00/LogVol00

#initrd/initrd-version.img

#boot=/dev/sda

default=0#对应到第一个title

timeout=10#系统内核选择时的延后

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

titleCentOS(2.6.18-164.el5)

root(hd0,0)

kernel/vmlinuz-2.6.18-164.el5roroot=/dev/VolGroup00/LogVol00

initrd/initrd-2.6.18-164.el5.img

##加上以下启动新内核的句子

titleCentOS(2.6.19-zkl-perfctr)

root(hd0,0)

kernel/vmlinuz-2.6.19-zkl-perfctrroroot=/dev/VolGroup00/LogVol00#这是表示内核文件是/boot/vmlinux-2.6.19-zkl-perfctr

initrd/initrd-2.6.19-zkl-perfctr.img#这是上面生成的文件/boot/initrd-2.6.19zkl-perfctr.img

=================================================================================

(10)重新启动系统,

在启动菜单上将会出现两个内核选项,使用上下按键选择新内核启动

或则

将新内核设置为默认启动内核,即更改里面文件中default=1

(11)系统重启后,可以使用命令查看perfctr模块是否安装上,

#modprobeperfctr加载模块

lsmod显示模块

rmmodperfctr移除模块

若perfctr模块安装成功后,你将见到perfctr模块,但是你可以在/lib/modules/2.6.19-zkl-perfctr/kernel/drivers/perfctr中见到perfctr模块perfctr.ko

(12)编译安装perfctr,

#cd/opt/papi-3.6.0/src/perfctr-2.6.x

#make

#mknod/dev/perfctrc10108

#chmod644/dev/perfctr

#makePREFIX=/usr/localinstall

至此,安装全部完成,perfctr相关文件安装再/usr/local下的bin、include、lib下

(13)测试

测试perfctr-2.6.x下边的事例,出现结果,证明安装perfctr安装成功

[root@gc04vm13perfctr-2.6.x]#examples/global/global

PerfCtrInfo:

abi_version0x05010501

driver_version2.6.32DEBUG

cpu_type5(?)

cpu_features0x7(rdpmc,rdtsc,pcint)

cpu_khz2259879

tsc_to_cpu_mult1

cpu_nrctrs0

cpus[0],total:1

cpus_forbidden[],total:0

cputype5(?)notsupported

不支持,这是由于以上步骤我是在VMware虚拟机中完成的,换成化学机就没问题linux内核版本 选择,正常情况下是运行后每隔5秒刷现一次

viewplaincopytoclipboardprint?

涉及的命令:cp-rpapi-3.6.0/opt/cplinux-2.6.20.tar.gz/usr/src/kernelscd/usr/src/kernelstarzxvflinux-2.6.20.tar.gzcdlinux-2.6.20#makeclean#makemrproper/opt/papi-3.6.0/src/perfctr-2.6.x/update-kernelcp当前内核目录/.config.makemenuconfig做如下选择:(1)Processortypeandfeatures选项下的Performance-monitoringcounterssupport,即要支持硬件计数器(2)搜索APIC选项,查看是否早已选上y,没有则选上(也可以在退出menuconfig后使用grepAPIC.config查询APIC相关选项是否是y)退出menuconfig,保存。makemodulesmakemodules_installmakebzImagemakeinstall完毕后选择新内核重新启动新内核启动后modprobeperfctrlsmod|grepperfctrcd/opt/papi-3.6.0/src/perfctr-2.6.x/makeexamples/perfex-iexamples/global/global检查perfctr是否能正常运行,若出现错误,重启系统mknod/dev/perfctrc10108chmod644/dev/perfctrmakePREFIX=/usr/localinstall将perfctr的头文件、库、可执行命令安装到/usr/local下

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 内核 加载 模块 目录 解压
最后更新:2023年6月29日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux文件系统种类 如何卸载用源码包安装的软件?在线视频教程推荐 「职位」ASP.、PHP、Linux服务器集群开发 Torvalds:Linux内核开发的创新前景充满了热情 Linux文件系统的结构从终端窗口探索Linux目录树结构 卸载软件命令Linux.You linux软件开发如何入门?学习Linux步骤及学习方法介绍 14年Linux发行版的有趣历史观点 Linux中不像Windows可以直接在控制面板中卸载? 2018年波及众多Linux发行版的性能对比会更加深入 如何用源码包安装的软件?name的方法总结 Linux之父李纳斯托瓦兹开发的Linux只是一个内核 Linux系统中的apt和apt-get的区别及解决办法! Linux系统发行版的一种方法,除此以外 MacM1上安装Docker和CentOS,您需要遵循的步骤 linux光驱启动怎么设置 常见的几种设置方法,你知道几个? 关于ESXi主机磁盘空间回收的具体操作步骤及步骤 Linux设置显示中文和设置字体设置中文一个都不能少 如何在Linux系统中使用命令查看Linux发行版版本信息 电脑的系统出现问题需要修复时光驱,两种设置方法
嵌入式Linux操作系统学习规划+LINUX路线,主攻江苏电信天翼校园客户端故障指引及解决办法(101)英特尔GMAGMA950显卡驱动程序/WIN8/8.1电信校园网宽带用USB数据线共享给电脑无线上网国防科大开源操作系统:它只是一个吉祥的象征10个常用Linux文本查看命令及其详细说明和使用示例Linux嵌入式系统内核裁剪与定制方法的介绍情况淘宝教育热卖C语言编程开发C++程序设计零基础入门课程从CPU、内存、硬盘、显卡等这些方面安装Linux系统的最低配置Linux通过chkconfig设置开机启动服务创建的几种常见方式(技术分析)Linux多线程的使用与操作系统的区别通常rar命令由一个主命令加若干选项(可选)构成RedHatLinux中自动运行程序中的应用linux 读写文件 关于Linux内核的神秘面纱,你知道几个?使用wget实用程序的有用命令行工具的使用怎么设置linux开机项自启动?方式是怎样的?嵌入式Linux应用层与驱动层要想学习关于Linux内核的交叉编译步骤和方法:步骤、方法STM32嵌入式linux开发流程及应用程序分析-STMlinux下有哪些文件在介绍lsof命令实用用法介绍?
Linux里swap的几种常见含义及解决办法!! 【指南】Linux中网络接口卡的10种方法使用 红旗Linux推出新版本:界面设计媲美Windows Linux进程间通信(IPC)有几种方式 FATFS文件系统负责管理和存储文件信息的特点及应用 如何让终端彻底的清静?(图)命令的方法 Linux系统的安装-Ubuntu开启虚拟机安装过程默认注意事项 ubuntu麒麟系统tomcat中文显示乱码的解决方法有哪些? Linux上运行Windows可执行文件和运行可执行文件的基本信息开始了 北海罗辑:Linux服务器中系统编码默认设置成 如何在Linux上创建可执行文件? 一个使用容器的最佳范例是使用Docker[1]_ PC104板上用Metrowerks的PCS系统实现实时嵌入式Linux操作系统的过程 LINUX设备驱动程序(第3版)-设备 Linux移植6410:从零开始的挑战! 开源软件最古老的笑话——阅读源代码-documenting du命令查看目录占用空间大小的命令-linux教程 防火墙和SELinux关闭防火墙及SELinux链接进行下载地址 10.5内核定时器编程TIMER_SOFTIRQ软中断,运行当前处理器CPU上到期的所有定时器 Linux环境变量配置的6种方式
标签聚合
应用 文件 软件 linux服务器 虚拟机 内核 命令 操作 文件目录 linux系统
书籍
课程
技术群
技术干货大合集↓
  • 2023年9月 / 69篇
  • 2023年8月 / 93篇
  • 2023年7月 / 94篇
  • 2023年6月 / 90篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.