c++ 性能优化资源
链接
类别
推荐理由
业务可用性
https://www.brendangregg.com/perf.html
性能分析工具
linux perf大佬brendangregg官方网站
⭐️⭐️⭐️⭐️⭐️ 强烈推荐
https://perfetto.dev/
性能分析工具
Android和Chrome内置性能分析平台
⭐️⭐️⭐️⭐️⭐️ 强烈推荐
https://github.com/google/benchmark
Benchmark
Googl...
c++ conan 配置以来
1. conan 的建议
https://docs.conan.io/1/cheatsheet.html
版本控制、修订记录和依赖解析应该在整个公司保持一致。
所有开发者的配置需要保持同步,尤其是软件包id计算模式。在CI/CD系统中,应该始终使用lock文件,以保证构建的可重现性。
2. conan的配置
设置settings
https://docs.conan.io/1/reference/conanfile/attributes.html
class HelloConan(ConanFile):
settings = {"os": ["Windows"],
"compiler": {"Visual Studio": {"version": [1...
利用gperftools 查找热点
编译运行
嵌入式端生成采样结果
.prof.x 文件
PC端分析采样结果
gperf tools
安装
sudo apt-get install perl graphviz ghostscript gv
生成函数调用关系图cpu.pdf
https://www.cnblogs.com/caosiyang/archive/2013/01/25/2876244.html
从函数调用关系图里面找到样本比例占用较高的函数
参考文献
https://zhuanlan.zhihu.com/p/343231398?utm_source=ZHShareTargetIDMore&utm_medium=social&utm_oi=1022619091906961408
htt...
性能优化工具
perf工具
火焰图分析
y轴:调用栈深度,火焰高度表示调用栈的深度。
x轴:函数采样数,宽度表示函数被采样到的次数,即消耗的资源多少。
常用的分析流程
检查线程采样点占比,火焰图最底层即为特定线程名的资源占比,让同名线程绘制到一起
检查火焰图的平顶
函数执行CPU消耗较高,如RLECompress函数,存在大量计算操作
函数执行次数较多,比如线程数量较多时,线程的频繁切换会导致schedule()消耗较高
常用的指令
抓取所有进程包含主进程的火焰图
抓取火焰图前执行 perf top -a 抓取全局火焰图
在线调试
监控全局CPU函数热点:./perf top -a -...
get post 有什么区别
GET 用于获取资源,请求参数附加在 URL 中,明文传输,有长度限制,可以被缓存和书签化。
POST 用于提交数据并请求处理,请求参数包含在请求体中,密文传输,没有长度限制,不会被缓存和书签化。
perf和火焰图
perf 环境
保证内核开启CONFIG_PERF_EVENTS
sysctl -a | grep -i "perf"命令查看perf是否开启
$ sysctl -a | grep -i "perf"
kernel.perf_cpu_time_max_percent = 25
kernel.perf_event_max_contexts_per_stack = 8
kernel.perf_event_max_sample_rate = 100000
kernel.perf_event_max_stack = 127
kernel.perf_event_mlock_kb = 516
kernel.perf_event_paranoid = 3
手动执行过程
采样进程的信息
使用...
perf 原理
引入
《性能之巅》作者 Brendan Gregg 发明的火焰图
示例代码
void loop() {
for (int i = 0; i < 10000000; i++) {
int j = i * i;
}
}
static const int ROWS = 2000; // 行数
static const int COLS = 4096; // 列数
static int arr[ROWS][COLS]; // 二维数组
void high_miss(void) {
int sum = 0;
for (int c = 0; c < COLS; c++) {
for (int r = 0; r < ROWS; ...
共计 90 篇文章,12 页。