1.Linux 中断( IRQ / softirq )基础:原理及内核实现
2.电脑内核和cpu哪个好_内核和cpu的内核内核区别
3.Intel的10nm工艺是否在所有技术指标上都超越了台积电的7nm?
4.Linux性能观测之dstat命令详解
5.Linux性能优化之CPU使用率
6.Linux 性能调优必备:perf 使用指南
Linux 中断( IRQ / softirq )基础:原理及内核实现
中断(IRQ),尤其是源码源码软中断(softirq)的广泛用途之一是网络数据包的接收与发送,但其应用场景并非单一。指标指标本文将全面整理中断(IRQ)与软中断(softirq)的内核内核基础知识,这些内容与网络数据包处理虽无直接联系,源码源码但整理本文旨在更深入地理解网络数据包处理机制。指标指标codeblocks怎样导入源码
什么是内核内核中断?
CPU 通过时分复用处理多任务,其中包括硬件任务,源码源码如磁盘读写、指标指标键盘输入,内核内核以及软件任务,源码源码如网络数据包处理。指标指标CPU 在任何时刻只能执行一个任务。内核内核当某个硬件或软件任务当前未被执行,源码源码但希望CPU立即处理时,指标指标会向CPU发送中断请求——希望CPU暂停手头工作,优先服务“我”。中断以事件形式通知CPU,因此常看到“在XX条件下会触发XX中断事件”的表述。
中断分为两类:
管理中断的设备:Advanced Programmable Interrupt Controller(APIC)。
硬中断的中断处理流程
中断随时发生,处理流程如下:
Maskable and non-maskable
Maskable interrupts 在x_上可以通过sti/cli指令来屏蔽(关闭)和恢复:
在屏蔽期间,这种类型的中断不会触发新的中断事件。大部分IRQ都属于这种类型。例如,网卡的收发包硬件中断。
Non-maskable interrupts 不可屏蔽,因此属于更高优先级的类型。
问题:执行速度与逻辑复杂性之间的矛盾
IRQ处理器的两个特点如下:
存在内在矛盾。
解决方式:中断的推迟处理(deferred interrupt handling)
传统解决方式是将中断处理分为两部分:
这种方式称为中断的推迟处理或延后处理。现在已是一个通用术语,涵盖各种推迟执行中断处理的方式。中断分为两部分处理:
在Linux中,有三种推迟中断(deferred interrupts):
具体细节将在后续介绍。
软中断与软中断子系统
软中断是内核子系统的一部分:
每个CPU上会初始化一个ksoftirqd内核线程,负责处理各种类型的softirq中断事件;
使用cgroup ls或ps -ef都能看到:
软中断事件的handler提前注册到softirq子系统,注册方式为open_softirq(softirq_id, handler)
例如,注册网卡收发包(RX/TX)软中断处理函数:
软中断占用了CPU的总开销:可以使用top查看,第三行倒数第二个指标是系统的软中断开销(si字段):
Linux内核源码分析学习地址:ke.qq.com/course/...
文章福利小编推荐自己的Linux内核源码分析交流群:点击加入整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!
主处理
smpboot.c类似于事件驱动的循环,会调度ksoftirqd线程执行pending的软中断。ksoftirqd内部会进一步调用到__do_softirq,
避免软中断占用过多CPU
软中断的潜在影响:推迟执行的部分(如softirq)可能会占用较长时间,在这段时间内,用户空间线程只能等待。反映在top中,si占比。
不过softirq调度循环对此有所改进,通过budget机制来避免softirq占用过多CPU时间。
硬中断-软中断调用栈
softirq是一种推迟中断处理机制,将IRQ的大部分处理逻辑推迟在这里执行。有两条路径都会执行到softirq主处理逻辑__do_softirq():
1、CPU调度到ksoftirqd线程时,会执行到__do_softirq();
2、每次IRQ handler退出时:do_IRQ()->...
do_IRQ是内核中主要的IRQ处理方式。它执行结束时,会调用exiting_irq(),这会展开成irq_exit()。后者会检查是否pending有softirq,如果有,则唤醒:
进而会使CPU执行到__do_softirq。
软中断触发执行的步骤
总结,每个软中断会经过以下阶段:
以收包软中断为例,IRQ handler并不执行NAPI,只是触发它,在内部会执行到raiseNET_RX_SOFTIRQ;真正的执行在softirq,会调用网卡的poll()方法收包。IRQ handler中会调用napi_schedule(),然后启动NAPI poll()。
需要注意的nginx编译源码大全是,虽然IRQ handler所做的工作很少,但处理这个包的softirq和IRQ在同一CPU上运行。这意味着,如果大量的包都放在同一个RX队列,虽然IRQ开销可能不多,但该CPU仍然会非常繁忙,都花费在softirq上。解决方式:RPS。它不会降低延迟,只是将包重新分配:RXQ->CPU。
三种推迟执行方式(softirq/tasklet/workqueue)
提到,Linux中的三种推迟中断执行方式:
其中:
前面已经看到,Linux在每个CPU上创建了一个ksoftirqd内核线程。
softirqs是在Linux内核编译时确定的,例如网络收包对应的NET_RX_SOFTIRQ软中断。因此是一种静态机制。如果想添加一种新softirq类型,需要修改并重新编译内核。
内部组织
内部由一个数组(或称为向量)管理,每个软中断号对应一个softirq handler。数组与注册:
在5.中所有类型的softirq:
也就是在cat /proc/softirqs看到的哪些。
触发(唤醒)softirq
以收包软中断为例,IRQ handler并不执行NAPI,只是触发它,在内部会执行到raiseNET_RX_SOFTIRQ;真正的执行在softirq,会调用网卡的poll()方法收包。IRQ handler中会调用napi_schedule(),然后启动NAPI poll()。
如果对内核源码有一定了解,会发现softirq使用非常有限,原因之一是它是静态编译的,依赖内置的ksoftirqd线程来调度内置的9种softirq。如果想添加一种新功能,就得修改并重新编译内核,开发成本很高。
实际上,实现推迟执行的更常用方式是tasklet。它构建在softirq机制之上,具体来说就是使用了两种softirq:
换句话说,tasklet是在运行时(runtime)创建和初始化的softirq,
内核软中断子系统初始化了两个per-cpu变量:
tasklet再执行针对list的循环:
tasklet在内核中的使用非常广泛。不过,后面又出现了第三种方式:workqueue。
这也是一种推迟执行机制,与tasklet有些相似,但有显著不同。
使用场景
简而言之,workqueue子系统提供了一个接口,通过该接口可以创建内核线程来处理从其他地方enqueue过来的任务。这些内核线程称为worker threads,内置的per-cpu worker threads:
结构体
kworker线程调度workqueues,原理与ksoftirqd线程调度softirqs类似。然而,我们可以为workqueue创建新的线程,而softirq则不行。
参考资料引用链接
[1]
中断与中断处理:0xax.gitbooks.io/linux-...
作者:赵亚楠 原文:arthurchiao.art/blog/li...来源:云原生实验室
电脑内核和cpu哪个好_内核和cpu的区别
1. 内核和cpu的区别
处理器有各种各样的,比如intel, arm, mips, ppc . 简称CPU, CPU存在于主板上面。主板上还有许多其他硬件,比如网卡,声卡,显卡,内存,PCI插槽。主板加上风扇,电源,硬盘等等,就能形成一台电脑PC了。PC上安装一个操作系统,比如windows 7.就能用了。处理器就是linux驱动源码简单用来运算的。操作系统是软件,是来管理这些硬件的。比如你敲一下键盘,硬件并不能知道你是想执行什么操作,操作系统帮你翻译成硬件能理解的操作,让他去执行,然后返回执行的结果。
2. 内核和cpu的区别是什么
1. Linux内核版本与linux发行版本的区别:LINUX内核版本是指系统内核的版本号,LINUX的内核具有两种不同的版本号,实验版本和产品化版本。首先解释一下什么是Linux发行版(英文名称是Linux Distribution)。Linux实际上是一种开放源代码的操作系统内核,通常我们说的Linux指的是基于Linux内核的操作系统。2. Linux操作系统包括Linux内核和Linux用户态程序,Linux内核和Linux用户态程序都是开放源代码的,绝大多数软件代码遵循GPL协议,任何人拿到这些代码都可以对这些代码进行修改和分发。3. 由于Linux上代码的高度自由,很多公司和组织都推出了自己的Linux操作系统,这些Linux操作系统我们就叫做Linux发行版。各种不同的Linux发行版的共同点就是都使用了Linux内核,不同的Linux发行版的内核可能有一些小的修改。1. 要确定 LINUX版本 的类型,只要查看一下版本号:每一个版本号由三位数字组成,第二位数字说明版本类型。如果第二位数字是偶数则说明这种版本是产品化版本,如果是奇数说明是实验版本。2. 如2.4.是产品化版本,2.5.是实验版本。查看 linux内核版本 命令:uname -r Linux发行版本 是指一些 Linux厂商 将 LINUX系统内核 与应用软件及文档包装在一起,并提供一些安装界面和系统设定与管理工具,这就构成了一个发行套件。
3. 内核和cpu的区别在哪
微内核和宏内核的区别:微内核相当于一个信息交换中心,自身可以实现的功能较少,他的主要职责是传递一个请求,一个A模块对其他模块功能的请求;而宏内核相当于一个是一个中央集权控制中心,把内存管理,文件管理等功能全部管理。
微内核:提供操作系统核心功能的内核的精简版本,它设计成在很小的内存空间内增加移植性,提供模块化设计,以使用户安装不同的接口与,如DOS、Workplace OS、Workplace Unix等。IBM、Microsoft等操作系统都采用了这一研究成果的优点。
宏内核:是操作系统核心架构的一种,此架构的特性是整个核心程序都是以核心空间(Kernel Space)的身份及监管者模式(Supervisor Mode)来运行。相对于其他类型的操作系统架构,如微核心架构或混核心架构等,这些核心会定义出一个高级的虚拟接口,由该接口来涵盖描述整个电脑硬件,这些描述会集合成一组硬件描述用词,有时还会附加一些系统调用,如此可以用一个或多个模块来实现各种操作系统服务,如进程管理、共时(Concurrency)控制、存储器管理等。
明白了上述两个定义后,看下面的我的理解:
1、微内核相当于一个信息交换中心,自身可以实现的功能较少,他的主要职责是传递一个请求,一个A模块对其他模块功能的请求。而宏内核相当于一个是一个中央集权控制中心,把内存管理,文件管理等功能全部管理。
2、两个内核的优缺点:
A、理论上来看,直播商城源码搭建微内核的设计思想更好一些,它将系统分为各个小的功能模块,把设计难度大大降低。因此,系统的维护与修改也方便进行。
B、但是微内核的通信失效率很高,是一个大问题。宏内核的功能模块之间的耦合度太高,将修改与维护的代价提高。但是在目前的linux操作系统里不会因为此造成很大问题(目前的linux还不算很复杂)。宏内核因为是直接调用的,所以效率比较高。
4. cpu和核心的区别
CPU带核显表示处理器中集成了核心显卡,可以在无独立显卡的情况下显示画面。相反,不带核显的CPU则需要额外配备独立显卡才能正常显示画面。同一芯片的处理器带核显版本与不带核显版本在CPU性能表现上基本相同。以下是详细说明:
1、处理器生产商(比如英特尔、AMD)根据开发难度以及市场需求,会生产带核显和不带核显的处理器。同一芯片的处理器带核显版本与不带核显版本在CPU性能表现上基本相同,两者的区别仅为是否能够由处理器提供显示核心。也就是说,如果CPU带核显,主机插上CPU后即可正常显示画面,无需配备独立显卡,反之则需要独立显卡。
2、一般来说,同一芯片的处理器带核显版本与不带核显版本在价格方面会有一定差异(不带核显版本价格更低)。因此如果对显示性能没有太多要求的用户,可以直接选择带核心版本处理器,可以节省下一大笔硬件费用支出;如果需要玩3D游戏或者需要运行专业软件(设计类、渲染类),则可以选择不带核显版本的处理器,再配备高端独立显卡。
5. CPU内核是什么意思
CPU的主频指CPU内核工作的时钟频率,表示在CPU内数字脉冲信号震荡的速度。它是一个没有描述修饰的所指如i5-的主频即是i5-的“CPU内核工作时钟频率……”以下描述:i5-@0.8GHz,0.8GHz描述的是主频,但是主频不是0.8GHz,主频可以处于0.9GHz,可以处于1.9GHz、2.3GHz,等等等等等等。
最大睿频(并不是所有的型号都有睿频)是指能睿频的型号其主频的上限,如i5-的单个核心最大睿频可以达到3.5GHz,四个核心最大睿频可以达到3.3GHz,频率值描述的都是主频。简单说,主频是CPU性能的因素之一,是一个对象。工作频率/最大睿频等等都是对这个对象状态的描述。
6. 处理器和核有啥区别
区别在于处理器的能力不同,性能有很大差距。
手机核的处理器运行起来非常迅速,手机不会出现卡顿的情况,而且可以运行一些大型的游戏,运行非常流畅,性能非常强的处理器。
8核处理器相对来说就比较差了,有的时候会出现卡的情况,远不如核的运行的流程。
7. 内核和芯片的区别
一、车载U盘和普通优盘区别只在于外形和内存有所不同。
二、车载U盘和普通优盘的内核芯片是没有区别的,所以说普通优盘也可以当作车载U盘使用的。
三、solr分片算法源码普通优盘在车上无法正常使用可能是由于下面问题:1. U盘上的音频文件格式不正确,播放器无法识别。这时更换其他格式的音乐即可。2. U盘损坏,或者质量存在问题,换新的优盘试试。
注意事项:车载U盘,要设置好,指定文件夹,才能读到。
外观造型不同为了不过多的占用车内空间,车载U盘一般都十分的小巧,同时或多或少的还会刻画一些有关汽车的元素在上面。而普通U盘相对来说比较细长。外观多样性更足。
特点不同车载U盘的特点是它的尺寸相对较小,这样既可以避免或减小车内狭小环境下意外折断损伤优盘,也更加美观。而普通U盘一般都有比较长的外形,所以由此也会更加容易损坏。
8. 内核是cpu吗
核心(Die)又称为内核,是CPU最重要的组成部分。CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有科学的布局。
为了便于CPU设计、生产、销售的管理,CPU制造商会对各种CPU核心给出相应的代号,这也就是所谓的CPU核心类型。
不同的CPU(不同系列或同一系列)都会有不同的核心类型(例如Pentium 4的Northwood,Willamette以及K6-2的CXT和K6-2+的ST-等等),甚至同一种核心都会有不同版本的类型(例如Northwood核心就分为B0和C1等版本),核心版本的变更是为了修正上一版存在的一些错误,并提升一定的性能。
9. cpu的内核是由什么和什么组成的
CPU是计算机的心脏,包括运算部件和控制部件,是完成各种运算和控制的核心,也是决定计算机性能的最重要的部件。主要的参数是工作的主频和一次传送或处理的数据的位数。CPU是英语“CentralProcessingUnit/中央处理器”的缩写,CPU一般由逻辑运算单元、控制单元和存储单元组成。在逻辑运算和控制单元中包括一些寄存器,这些寄存器用于CPU在处理数据过程中数据的暂时保存,其实我们在买CPU时,并不需要知道它的构造,只要知道它的性能就可以了。CPU主要的性能指标有:主频即CPU的时钟频率(CPUClockSpeed)。这是我们最关心的,我们所说的、等就是指它,一般说来,主频越高,CPU的速度就越快,整机的就越高。时钟频率即CPU的外部时钟频率,由电脑主板提供,以前一般是MHz,也有主板支持各MHz,目前Intel公司最新的芯片组BX以使用MHz的时钟频率。另外VIA公司的MVP3、MVP4等一些非Intel的芯片组也开始支持MHz的外频。精英公司的BX主板甚至可以支持MHz的外频,这对于超频者来是首选的。内部缓存(L1Cache):封闭在CPU芯片内部的高速缓存,用于暂时存储CPU运算时的部分指令和数据,存取速度与CPU主频一致,L1缓存的容量单位一般为KB。L1缓存越大,CPU工作时与存取速度较慢的L2缓存和内存间交换数据的次数越少,相对电脑的运算速度可以提高。外部缓存(L2Cache):CPU外部的高速缓存,PentiumPro处理器的L2和CPU运行在相同频率下的,但成本昂贵,所以PentiumII运行在相当于CPU频率一半下的,容量为K。为降低成本Inter公司生产了一种不带L2的CPU命为赛扬,性能也不错,是超频的理想。MMX技术是“多媒体扩展指令集”的缩写。MMX是Intel公司在年为增强PentiumCPU在音像、图形和通信应用方面而采取的新技术。为CPU增加条MMX指令,除了指令集中增加MMX指令外,还将CPU芯片内的L1缓存由原来的KB增加到KB(K指命+K数据),因此MMXCPU比普通CPU在运行含有MMX指令的程序时,处理多媒体的能力上提高了%左右。目前CPU基本都具备MMX技术,除PC和PentiumⅡCPU还有K6、KD、MII等。制造工艺:现在CPU的制造工艺是0.微米,最新的PII可以达到0.微米,在将来的CPU制造工艺可以达到0.微米。
. 内核和处理器的区别
赛扬、奔腾、酷睿处理器的区别:
赛扬处理器与奔腾处理器在运算内核上完全相同,不同的地方是二级缓存的大小不同。现有的台式机处理器P4的二级缓存大小是KB,而P4赛扬的二级缓存大小是KB。
赛扬:Intel公司的一个处理器品牌,当时Intel的中高端处理器相比减少或去除了三级缓存,发热功耗很低,而且最大支持内存较低。所以性能上有所损失,但赛扬超频性能好,是追求性价比的DIYer的首选。
奔腾:奔腾处理器与以前的Intel公司处理器完全兼容,奔腾处理器中有两条数据流水线,可以同时执行两条指令,Intel公司把这种同时执行两条指令的能力称为超标量技术。
酷睿:服务器可以更快速,更低的功耗为企业节省大笔开支,创新技术保证安全稳定的运行。台式机可以在占用更小空间的同时,为家庭用户带来更多全新的娱乐体验,为企业员工带来更高的工作效率。笔记本电脑用户可以获得更高的移动性能和更耐久的电池使用时间。
扩展资料:
奔腾英特尔奔腾中央处理器 制造日期: 由年到年 厂商: 英特尔 处理器速度: MHz 到 MHz 前端总线速度: MHz 到 MHz 酷睿---之后就停止了奔腾系列命名英特尔处理器的名称,服务器版的开发代号为Woodcrest,桌面版的开发代号为Conroe,移动版的开发代号为Merom。分双核、四核、八核三种。酷睿处理器采用MHz-Mhz的前端总线速率,nm/nm制程工艺,2M/4M/8M/M/M L2缓存,双核酷睿处理器通过SmartCache技术两个核心共享M L2资源.英特尔公司已经结束使用长达年之久的“奔腾”的处理器转而推出“Core 2 Duo”和“Core 2 Quad”品牌。“奔腾”作为消费者所熟悉的一个品牌将逐渐转向经济型产品。酷睿一代英特尔先推出的CORE用于移动计算机上市不久即被CORE2取代酷睿二代包括DUO双核和QUAD四核,即将推出八核,但没有单核(现在有了,在笔记本配置里看到过)应用的核心“Merom用于移动计算机”“Conroe用于桌面计算机”“Woodcrest用于服务器”。
. 处理器和处理器内核的关系
cpu的组成是:1、CPU的内核分为运算器和控制器;2、CPU的外核分为解码器、一级缓存和二级缓存;3、指令系统,是一个CPU所能够处理的全部指令的集合,是一个CPU的根本属性。
从结构上讲CPU内核分为两部分:运算器和控制器。
运算器只能完成运算,而控制器用于控制着整个CPU的工作。
Intel的nm工艺是否在所有技术指标上都超越了台积电的7nm?
结论:尽管Intel的nm Ice Lake处理器的桌面版发货延迟,但从Linux内核源码的线索来看,其功能设计与移动平台保持同步,且在技术指标上超越了台积电的7nm工艺。尽管生产调度可能推迟了桌面产品的上市,但其工艺密度、栅极尺寸和SRAM面积的优势仍使其值得期待。
处理器和显卡新品的亮相通常在Linux平台的测试中初露端倪,Linux内核源码往往成为新品曝光的宝库。在Linux v5.2的x分支中,已经发现了多个Ice Lake平台处理器,包括专为移动笔记本设计的Ice Lake Mobile,以及还未全面发布的移动W标压、桌面/W和至强D系列产品,预计这些将在明年亮相。 尽管Intel在今年的台北电脑展上表示Ice Lake已经开始大规模移动产品发货,但实际上,这只是低电压版本。不过,即便桌面版的推出稍有延误,但从技术角度看,Intel的nm工艺在工艺密度、栅极尺寸以及SRAM面积上均领先于台积电的第一代7nm技术,这使得nm Ice Lake处理器仍具有显著的优势,值得我们耐心等待。Linux性能观测之dstat命令详解
dstat是一个强大的系统信息统计工具,集成了vmstat、iostat、netstat、nfsstat和ifstat的功能,能够全面观测Linux性能。 要深入理解dstat,首先回顾其安装方式。请按照以下步骤操作:1. 打开终端。
2. 使用命令 `sudo apt-get install dstat` 在Debian/Ubuntu系统上安装dstat,或使用 `yum install dstat` 在CentOS/RHEL系统上安装。
3. 若遇到问题,可以参考社区资源或官方文档寻求解决方案。
dstat的使用简单高效。它能以图形或文本形式提供系统性能指标,如CPU使用率、磁盘IO、网络I/O、分页活动和系统统计。以下是常用命令形式:
- `total-cpu-usage`:查看CPU的总体使用情况。
- `dsk/total`:展示磁盘IO的总情况。
- `net/total`:显示网络I/O的总览。
- `paging`:监测系统的分页活动。
- `system`:收集系统统计信息。
若需查阅更多dstat的英文说明或功能细节,可参考以下资源:
- Linux manpage dstat
此外,了解如何优化Linux性能和排查内存泄漏问题同样重要。我们整理了一些学习资料和书籍,欢迎加入我们的Linux内核源码交流群。前名加入的成员将获得免费的内核资料包,包含视频教程、电子书、实战项目及代码。加入时请使用真实信息,我们期待与您分享知识和经验。
学习Linux内核源码的路径包括:内核源码解析、内存调优、文件系统、进程管理、设备驱动、网络协议栈等。Linux性能优化之CPU使用率
CPU 使用率是衡量 CPU 工作负载的指标,通过百分比显示。主要命令用于查看此指标包括 top 和 ps。top 呈现所有 CPU 的平均使用率,输入数字1可查看每个核心的使用率。空白行后显示进程实时信息,每个进程的 %CPU 列表示总使用率,包括用户态和内核态。top 命令不细分。分析单进程使用率时,pidstat 工具适用。使用 pidstat 命令可间隔一秒查看进程的 CPU 使用率。
输出结果包含多个数据点及平均值。top、ps、pidstat 工具有助于定位 CPU 使用率高的进程。但需分析具体原因和代码。perf 工具适合此任务,它基于性能事件采样分析系统事件、内核性能及应用性能。使用 perf 分析 CPU 性能问题有 perf top 和 perf record & perf report 两种方法。perf top 实时显示 CPU 使用率最高的函数或指令,用于查找热点函数。使用界面显示采样数、事件类型和事件总数。采样数过少影响排序和百分比的参考价值。perf top 输出中,第一行包含采样数、事件类型和事件总数。采样数需注意,过少时排序和百分比无实际意义。perf top 输出从第二行开始,包含四列数据,代表不同的含义。perf record 用于保存数据,后续使用 perf report 解析。实际使用中,通常为 perf top 和 perf record 添加 -g 参数以跟踪调用关系。
Linux内核源码分析学习资源:访问 ke.qq.com/course/...
福利加入Linux内核源码分析交流群:点击加入。群内提供了一些个人推荐的优质学习资料,包括书籍和视频,供群成员自由查阅。
案例中,代码执行过程注入死循环,导致CPU使用率达到%。通过工具分析,找到引起CPU利用率升高的代码段。案例代码生成的可执行文件名为 main。在Ubuntu系统中,执行main程序后,使用top命令查看CPU使用率。CPU2的使用率高达%,同时main进程的CPU使用率也达到%,表明系统CPU使用率升高源于main进程。使用perf命令定位具体导致CPU使用率升高的函数。通过调用关系显示,发现问题在于注入死循环的函数func。使用perf工具分析CPU使用率升高原因,支持命令丰富,通过"perf help"查看所有命令,"perf help COMMAND"查看特定命令的用法。
生产工作中,可能遇到系统总体CPU使用率高但单个进程CPU使用率低的情况。分析这类问题时,可使用 pstree 和 execsnoop 工具。下文提供了安装pstree和execsnoop工具的步骤。内容转载自/s/EQdBqN3_sOHQafSUOe1k3g。
Linux 性能调优必备:perf 使用指南
perf 是 Linux 内核源码树内嵌的性能剖析工具。
它运用事件采样原理,以性能事件为核心,支持对处理器和操作系统性能指标的剖析。通常用于查找性能瓶颈和定位热点代码。
本文目录包括:
安装 perf
在大多数 Linux 发行版中,perf 工具包含在linux-tools 包中。使用包管理器安装,如 Debian 系统上的:
在 Red Hat/CentOS 系统上:
基本使用
列出所有可用的性能事件,包括硬件事件和软件事件。
使用perf record 记录目标程序的性能数据。
例如:-g 表示记录调用栈,-a 表示对所有 CPU 进行采样,-F 表示每秒采样 次,sleep 6 是要分析的程序。
这会生成 perf.data 文件,包含采集的性能数据。
可以指定要分析的事件类型,如 CPU 时钟周期、缓存命中等。
支持跟踪点,一种在内核中预定义的事件,用于跟踪系统调用等。
(常用的)可选参数
每个参数的使用取决于具体需求。例如,使用-a 参数对整个系统进行性能分析;使用-p 或 -t 分析特定进程或线程;-g 对理解程序的函数调用关系非常重要。
实际使用中,先使用perf record ./your_program 进行简单性能记录,再尝试添加不同参数。
分析性能数据
使用perf report 分析记录的数据。
可以用-i 指定要分析的性能数据。
这将展示一个交互式报告,可使用键盘导航查看不同视图。
使用示例
以下是一个简单的 C++ 程序示例,创建一个 std::vector 并使用 push_back 和 emplace_back 方法添加元素,以比较这两种方法在性能上的差异。
ComplexObject 类有一个构造函数,接受一个整数参数并存储它。构造函数和析构函数都会输出一条消息,以便看到对象的创建和销毁。创建 万个这样的对象,并比较 push_back 和 emplace_back 的性能。
要编译和运行这个程序,需要一个支持 C++ 或更高版本的编译器。使用以下命令:
这将编译程序并运行生成的 vector_test 可执行文件。
使用 perf 分析程序性能。
确保有权限运行 perf。
使用以下命令记录性能数据:
perf record ./vector_test
运行结束后,使用perf report 查看性能报告。
在报告中,可以看到不同函数的调用次数、执行时间等信息。
进入交互界面后,
其他功能
perf 提供了许多其他工具,如 perf stat(显示程序运行时的性能统计信息),perf top(实时显示性能热点),perf annotate(显示源代码级别的性能分析)等。
使用perf top 查看实时性能数据。
对特定函数或代码行进行性能分析。
统计特定事件(如缓存未命中)的发生次数。
高级用法注意事项可能遇到的问题
问题1
根据错误信息,系统上的 perf_event_paranoid 设置为 4,意味着除了具有特定 Linux 能力的进程外,所有用户都无法使用性能监控和可观察性操作。
要解决这个问题,有几个选项:
使用以下命令临时更改设置:
sudo sysctl -w kernel.perf_event_paranoid=-1
或者,如果你只想允许使用用户空间事件:
sudo sysctl -w kernel.perf_event_paranoid=0
请注意,降低 perf_event_paranoid 的值可能会增加系统安全风险。
问题2
错误信息表明,由于 /proc/sys/kernel/kptr_restrict 设置的值,内核符号(kallsyms)和模块的地址映射被限制了。
当你尝试使用perf record 收集性能数据时,如果无法解析内核样本,将无法得到有关内核函数和模块的详细信息。
为了解决这个问题,你可以采取以下步骤:
你可以临时更改 kptr_restrict 的值,以允许 perf 工具访问内核指针。
这将设置 kptr_restrict 为 0,允许所有用户访问内核指针。
如果你的系统上有 vmlinux 文件,perf 工具可以使用它来解析内核样本。
确保 vmlinux 文件与当前运行的内核版本相匹配。
如果 vmlinux 文件不存在或过时,你可能需要更新它。
降低 kptr_restrict 的值会降低系统的安全性。
OProfile、gprof是什么?
OProfile和gprof都是用于程序性能分析的工具,但它们在操作方式、使用场景和数据分析上有所不同。
OProfile是一个基于内核的性能分析工具,它提供了对CPU利用率、缓存命中率、分支预测错误等硬件相关性能指标的详细分析。OProfile通过插入内核模块来收集程序运行时的硬件事件信息,这些数据可以在程序运行结束后进行分析,帮助开发者找出性能瓶颈。OProfile适用于大型、复杂的程序,尤其是在需要深入分析硬件层面性能问题的场景中非常有用。
相比之下,gprof则是一个基于源代码的性能分析工具,它通过分析程序在运行时的函数调用关系和数据流动情况,来找出程序中耗费时间最多的函数或代码段。gprof通过在源代码中插入特定的计数代码来收集运行时信息,然后生成一个报告,报告中详细列出了每个函数的调用次数、总耗时以及每次调用的平均耗时。gprof适用于小型到中型程序,尤其是在程序结构相对清晰、需要快速定位性能问题的情况下非常适用。
举个例子,假设我们有一个大型的服务器程序,该程序在处理大量并发请求时出现了性能下降的问题。我们可以使用OProfile来分析这个问题。首先,我们需要在程序中插入OProfile的钩子代码,然后让程序运行一段时间以收集性能数据。收集完数据后,我们可以使用OProfile的分析工具来查看哪些函数或代码段占用了大量的CPU时间,从而找出性能瓶颈。
而在另一个场景中,假设我们有一个小型的命令行工具程序,该程序在执行某个特定任务时非常慢。在这种情况下,我们可以使用gprof来分析这个问题。我们只需要在编译程序时加上gprof的选项,然后让程序运行一次以收集性能数据。最后,gprof会生成一个报告,报告中列出了每个函数的调用次数和耗时情况,我们可以根据这些信息来快速定位性能问题所在。
总的来说,OProfile和gprof都是非常有用的性能分析工具,它们各自适用于不同的场景和需求。在实际开发中,我们可以根据具体情况选择使用哪个工具来进行分析和优化。