目录:
1、任务调度带来任务切换的开销 | ||
---|---|---|
perf性能检测工具的安装 | 栈空间速度比堆空间快的原因 | 例:线程池 |
2、系统调用带来用户态和内核切换的开销 | ||
3、代码级别优化 | ||
热点函数,文件收集 | 性能优化工具 |
优化
1. 算法优化,选择优秀的数据结构和算法。
2. 代码优化,提高执行速度,减少内存占用。
系统级优化
更加有效地利用硬件和操作系统资源
- 上下文切换次数评估 —> 降低OS开销
- 缺页异常次数评估 —> 减少页面交换
- IPC 评估 —> 提高CPU利用率
如何做优化?
对症下药:系统性能瓶颈在哪里?
提高cpu使用效率。做更多计算任务
1、任务调度带来任务切换的开销
避免不必要的上下文切换
引起上下文切换的原因:
-
时间片用完,CPU正常调度下一个任务
-
被其他优先级更高的任务抢占
-
执行任务碰到IO阻塞,调度器挂起当前任务,切换执行下一个任务
-
用户代码主动挂起当前任务让出CPU时间( pthread_cond_wait )
-
多任务抢占资源,由于没有抢到被挂起(mutex )
(加锁的粒度要细化) -
硬件中断/软中断
perf性能检测工具
perf性能检测工具的安装
sudo apt install linux-tools-common
sudo apt install linuex-tools-4.15***-generic
sudo apt install linux-tools-generic
输入sudo perf stat ls,执行ls命令,收集特定进程的性能概况,
[yola2626@ubuntu ~]$sudo perf stat ls
//ls执行的打印...
Performance counter stats for 'ls':
// 任务真正占用的处理器时间,单位为 ms。
0.94 msec task-clock # 0.309 CPUs utilized //CPU 的占用率。
// 程序在运行过程中上下文的切换次数
21 context-switches # 0.022