系统级性能优化通常包括两个阶段:性能分析和代码优化。
性能分析的目标是找出性能瓶颈,找出性能问题和热代码的原因。
代码优化的目标是针对特定的性能问题优化代码或编译选项,以提高软件性能。
在性能分析阶段,有必要使用现有的分析工具,如perf等。在代码优化阶段,经常需要利用开发人员的经验编写简洁高效的代码,甚至在汇编级合理使用各种指令,合理安排各种指令的执行顺序。
性能是一个Linux性能分析工具。Linux性能计数器是一个新的基于内核的子系统,它提供了一个性能分析框架,如硬件(CPU,性能监控单元)功能和软件(软件计数器,跟踪点)功能。
性能使应用程序能够在内核中使用PMU、跟踪点和计数器来进行性能统计。它不仅可以分析和制定应用程序(每个线程)的性能问题,还可以用来分析内核的性能问题。当然,同事也可以分析应用程序和内核,从而充分了解应用程序的性能瓶颈。
Perf可用于分析程序运行期间发生的硬件事件,如指令失效、处理器时钟周期等。您还可以分析软件时间,如页面错误和进程切换。
Perf是一个全面的分析工具,从系统全局性能到进程线程级别,甚至到功能和装配级别。
Perf提供18种武器,可以用大刀子卸下或用解剖刀仔细分析。
1.背景知识
1.1跟踪点
跟踪点是分散在内核源代码中的钩子,可以在执行特定代码时触发,可以由各种跟踪/调试工具使用。
Perf记录生成跟踪点的时间并生成报告。通过分析这些报告,人们可以了解程序运行过程中内核的各种细节,并对性能症状做出准确的诊断。
这些跟踪点的相应sysfs节点位于/sys/kernel/debug/tracing/events目录中。
1.2具有硬件功能的缓存
内存读写速度非常快,但仍无法与处理器指令的执行速度相比。为了从存储器中读取指令和数据,处理器需要等待,这对于处理器时间来说是非常长的。高速缓存是一种读写速度非常快的静态随机存取存储器,可以与处理器相匹配。因此,常用数据存储在缓存中,处理器不需要等待,从而提高了性能。缓存大小通常很小,充分利用缓存是软件调优的一个非常重要的部分。2.主要关注点
基于性能分析,可以进行算法优化(空间复杂度和时间复杂度的折衷)和代码优化(提高执行速度和减少内存占用)。
评估程序对硬件资源的使用,例如对每一级高速缓存的访问次数、每一级高速缓存未命中的次数、流水线停顿周期、前端总线访问等。
评估程序、系统调用、上下文切换和任务迁移对操作系统资源的使用情况。
事件可分为三种类型:
硬件事件由PMU单元生成,并检测在特定条件下是否发生以及发生了多少性能事件。例如,缓存命中。
软件事件是由内核生成并分布在各种功能模块中的事件,包括与操作系统相关的性能事件。例如,过程开关、刻度号等。
跟踪点事件是由内核中的静态跟踪点触发的事件。这些跟踪点用于判断程序运行期间内核的行为细节,例如分配给slab分配器的次数。
如果您有互联网问题,也可以咨询我,谢谢!如果你也想一起学习人工智能,欢迎留言交流。