SystemTap+FlameGraph(fg.stp)
SystemTap是监控和跟踪运行中的 Linux 内核的操作的动态方法,通过一个名为Kprobes 的应用编程接口(API)来实现该目的。SystemTap 用于检查运行的内核的两种方法是 Kprobes 和 返回探针。但是理解任何内核的最关键要素是内核的映射,它提供符号信息(比如函数、变量以及它们的地址)。有了内核映射之后,就可以解决任何符号的地址,以及更改探针的行为
SystemTap下载地址:https://sourceware.org/systemtap/ftp/releases/
SystemTap详细介绍:https://www.ibm.com/developerworks/cn/linux/l-systemtap/
使用systemtap收集数据,创建脚本,文件名以.stp结尾
FlameGraph(火焰图),是一个把采样所得到的堆栈跟踪可视化展示的工具。它是基于性能分析工具的结果,Flame graph本身并不具备性能检测的能力。
Flame Graph 下载地址https://github.com/brendangregg/FlameGraph
执行步骤:
1、 cat /proc/12345/maps|awk'{print $6}'|sort|uniq > log.txt
2、 stap -DSTP_NO_OVERLOAD -d/home/multi_GPU_3.4.0/run11/libs/libcudnn.so.5 -d /usr/local/cuda-8.0/targets/x86_64-linux/lib/libnvToolsExt.so.1.0.0 -v ../fg.stp > dec16_2.log
3、 FlameGraph-master/stackcollapse-stap.pldec_16.log | c++filt -n > dec_16.mid
4、 FlameGraph-master/flamegraph.pldec16.mid > dec16.svg
OPCM
http://www.correlsense.com/intel-performance-counter-monitor/
1、 PCM工具下载链接https://github.com/opcm/pcm/releases(下载最新版本即可)
2、 tar -xzvf pcm-201710.tar.gz
3、 cd pcm-201710/
4、 make
5、 echo 0 > /proc/sys/kernel/nmi_watchdog (必须root权限)
6、 ./pcm-memory.x (./pcm-memory.x/csv=mem.log可以保存到文件)
7、 有的会报错,需执行modprobe msr(此模块默认系统是不加载的,如果需要启动此功能,需要先加载模块)
NVPROF
首先保证使用nvcc编译器将源程序编译为可执行程序,执行:nvprof ./executablePro
profiling result中显示的是kernel执行的time情况
api calls则显示的是程序调用的api所耗费的time情况
对kernel进行分析时,看profiling result中的结果。还可以测试程序的其他性能参数:
achieved_occupancy:每个sm在每个cycle能够达到的最大activewarp 占总warp的比例。
nvprof --metricsachieved_occupancy ./executablePro
gld_throughput::global load throughput (查看memory 的throughput)
nvprof --metricsgld_throughput ./executablePro
gld_efficiency: global memory loadefficiency: device memory bandwidth的使用率
nvprof –metricsgld_efficiency ./ executablePro