优秀的编程知识分享平台

网站首页 > 技术文章 正文

C、C++高性能编码指南(高质量c c++编程)

nanyue 2024-10-18 07:35:40 技术文章 7 ℃

热点查找-性能工具

一般服务器的操作系统选择Linux,本文针对Linux操作系统选择几款常用的性能工具简要介绍一下。

1 Gprof

Gprof是GUN编译器工具包提供的性能分析工具,gprof能够给出函数调用关系、调用次数、执行时间等信息。大多数Linux发行版默认都安装了gprof。

但是gprof在编译和链接阶段都需要添加-pg选项(pg表示产生的程序可以使用gprof分析),为GCC内嵌的功能,会自动在程序中插入一些代码以保存函数执行时的一些信息(执行时间、执行次数、调用关系等)。然后在正常运行时,程序会自动将获得的程序执行时信息输出到gmon.out文件中,再应用gprof命令处理程序和其输出的gmon.out文件,便会输出人工阅读的信息。

由于gprof需要添加编译选项,同时对于多线程支持不好。我在项目中没有使用gprof。

2 Intel VTune

VTune是Intel提供的用于分析和优化程序性能的工具,它能够帮助你确定程序的热点,帮助你找到导致性能不理想的原因,从而优化你的程序。

主要包括三个小工具:

(1)Performance Analyzer:性能分析,找到软件性能比较热的部分,一般也就是性能瓶颈的关键点。

(2)Intel Threading Checker:用于查找线程错误, 能够检测资源竞争、线程死锁等问题。

(3)Intel Threading Profiler:线程性能检测工具,多线程可能存在负载比平衡, 同步开销过大等线程相关的性能问题,该工具可以帮你发现每一个线程每一时刻的状态。

但是Intel VTune需要收费,这里推荐土豪可以使用。

3 Perf

perf是Linux内核 2.6.31之后支持的、用户空间的(Linux 内核分用户空间和内核空间,用户只能访问用户空间的数据、工具)、基于命令行的性能分析工具。perf 提供了一系列子命令。perf 能够统计剖分整个Linux系统。

perf 支持硬件和软件计数器,并且能够像 strace 一样跟踪内核调用。从 Linux 内核 3.14 开始,perf 还支持功耗剖分。

perf 支持下列子命令:

stat:此命令为常见性能事件提供整体数据,包括执行步骤和消耗所用的时间周期。

top:此命令执行与 top 工具相似的功能。它实时生成并显示性能计数器配置文件。

record:此命令将性能数据记录到随后可使用 perf report 分析的文件中。

report:此命令从文件中读取性能数据并分析记录数据

list:此命令列出特定机器上有效事件。这些事件因系统性能监控硬件和软件配置而异。


4 OProfile

OProfile 是一个全系统性能监控工具。它使用处理器的专业性能监控硬件来检索关于内核和系统可执行文件的信息,以便确定某些事件的频率,比如引用内存时,就接收第二级缓存请求数和硬件请求数。OProfile 也可用于确定处理器的使用率,并确定最常使用的应用程序和服务。
但 OProfile 有一些局限性:

性能监控样本可能不太准确。由于处理器可能无法执行指令,样本就会记录一个附近的指令,而不是记录触发中断的指令。

OProfile 希望程序多次启动和停止。这样的话多次运行得到的样本就可以累积,用户可能需要清除上一次运行的样本数据。

OProfile 集中识别 CPU 访问限制的进程问题。因此,对于等待锁定其他事件来识别睡眠状态的进程并无帮助。

Tags:

最近发表
标签列表