perf ,比较好的一个程序性能测试工具
面对一个问题程序,最好采用自顶向下的策略。先整体看看该程序运行时各种统计事件的大概,再针对某些方向深入细节。而不要一下子扎进琐碎细节,会一叶障目的。
对于优化自己写的代码,cpu bound 型 和 IO bound 型是不一样的:
- cpu bound 型:所谓cpu bound型指的是程序大部分时间都在使用CPU。
- IO bound 型:由cpu bound型的定义就不难推出了。
perf stat 命令用于统计进程总体的信息
1 | /*******************************************************************************/ |
task-clock:CPU 利用率,该值高,说明程序的多数时间花费在 CPU 计算上而非 IO。
Context-switches:进程切换次数,记录了程序运行过程中发生了多少次进程切换,频繁的进程切换是应该避免的。
Cache-misses:程序运行过程中总体的 cache 利用情况,如果该值过高,说明程序的 cache 利用不好
CPU-migrations:表示进程 t1 运行过程中发生了多少次 CPU 迁移,即被调度器从一个 CPU 转移到另外一个 CPU 上运行。
Cycles:处理器时钟,一条机器指令可能需要多个 cycles
Instructions: 机器指令数目。
IPC:是 Instructions/Cycles 的比值,该值越大越好,说明程序充分利用了处理器的特性。
branches:待查
branch misses:待查
perf top 命令可查看系统的实时信息
例如系统中最耗时的内核函数或某个用户进程:
1 | /*******************************************************************************/ |
/**********************************************************************************/
# Events: 46 cpu-clock
#
# Overhead Command Shared Object Symbol
# ........ ........... ................. ......................
#
63.04% Joseph_ring [kernel.kallsyms] [k] 0xc10e7ef2
6.52% Joseph_ring libc-2.13.so [.] __GI_vfprintf
4.35% Joseph_ring libc-2.13.so [.] __printf
4.35% Joseph_ring libc-2.13.so [.] _IO_new_file_xsputn
2.17% Joseph_ring libc-2.13.so [.] _itoa_word
/**********************************************************************************/
1 |
|
/**********************************************************************************/
# Events: 47 cpu-clock
#
# Overhead Command Shared Object Symbol
# ........ ........... ................. ......................
#
72.34% Joseph_ring [kernel.kallsyms] [k] 0xc11017a7
|
--- 0xc150a125
|
|--33.33%-- 0xc105e3a7
| 0xc105e4f6
/**********************************************************************************/
```
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 三木的技术博客!
评论