鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

热点函数分析

命令功能

通过ptrace对Python程序及Python和C/C++的混合程序进行采样,分析调用栈信息,获取Top20的热点函数并绘制火焰图。

  • 支持的Python版本为3.9.X。
  • 仅支持openEuler操作系统。
  • 仅支持PID模式采集分析。

命令格式

devkit py-perf hotspot [-h] [-l {0,1,2,3}] [-d <sec>] [-i <msec>] [-p {PID}] [-o <file>] [--native]

参数说明

表1 参数说明

参数

参数选项

说明

-h/--help

-

获取帮助信息。

-l/--log-level

0/1/2/3

设置日志级别,默认为1。
  • 0:日志级别为DEBUG。
  • 1:日志级别为INFO。
  • 2:日志级别为WARNING。
  • 3:日志级别为ERROR。

-d/--duration

-

设置采集时长,单位为秒,最小值为1秒,默认为一直采集,可使用Ctrl+\取消任务或Ctrl+C停止采集并进入分析。

-i/--interval

-

设置采集间隔,单位为毫秒,取值范围1至1000毫秒,默认为10毫秒。

-p/--pid

PID

指定采集的进程PID。

-o/--output

-

设置报告数据生成文件名;默认生成在当前所在目录,默认文件名格式为FlameGraph-YMD-HMS。

--native

-

设置是否采集Python和C的调用栈,使用此参数将采集Python和C的调用栈,否则仅采集Python调用栈。

使用示例

devkit py-perf hotspot -p 2082596 -d 5 -i 100 -o /home/demo/flamegraph --native
  • 参数-p 2082596表示采集进程号为2082596的进程数据,参数-d 5表示采集时长为5秒,参数-i 100表示采样间隔为100毫秒,参数-o /home/demo/flamegraph表示在/home/demo/下生成名为flamegraph.html火焰图文件。
  • 示例的返回信息中堆栈信息过多,为便于展示已省略大部分堆栈内容,请以实际使用为准。

返回信息如下:

Python Hotspot Top20 Summary Report                     Time:2024/08/13 15:07:16

================================================================================

─────────────────────────────────────────────────────────────────────  Function                                                                                                     Runtime(ms)     Runtime(%)
─────────────────────────────────────────────────────────────────────  pthread_condattr_setpshared                                                                                        4722          82.04
      pthread_condattr_setpshared
      clone

  blas_thread_server                                                                                                447           7.77 
      blas_thread_server
      pthread_condattr_setpshared
      clone
...
...
...

  scipy_dgebal_64_                                                                                                    9           0.16
      scipy_dgebal_64_
      scipy_dgeev_64_
      void eig_wrapper<f2c_doublecomplex, double>(char, char, char**, long const*, long const*) [clone .constprop.0]
      generic_wrapped_legacy_loop
      ufunc_generic_fastcall
      _PyEval_EvalFrameDefault
      _PyEval_EvalFrameDefault
      dispatcher_vectorcall
      _PyEval_EvalFrameDefault
      _PyEval_EvalFrameDefault
      _PyEval_EvalFrameDefault
      _PyEval_EvalFrameDefault
      _PyEval_EvalFrameDefault
      eig (/usr/local/lib64/python3.9/site-packages/numpy/linalg/_linalg.py:1702)
      compute_eigenvalues (/home/jjl/workspace/pyhotstpot_demo/ai-demo/numpy_test_1.py:10)
      run (/usr/lib64/python3.9/concurrent/futures/thread.py:58)
      _worker (/usr/lib64/python3.9/concurrent/futures/thread.py:83)
      run (/usr/lib64/python3.9/threading.py:910)
      _bootstrap_inner (/usr/lib64/python3.9/threading.py:973)
      _bootstrap (/usr/lib64/python3.9/threading.py:930)
      PyCodec_StreamReader
      _PyGC_CollectNoFail
      _Py_hashtable_destroy
      pthread_condattr_setpshared
      clone

  dgemm_nn                                                                                                           9            0.16
      dgemm_nn

─────────────────────────────────────────────────────────────────────The flamegraph html report: /home/demo/flamegraph.html

任务生成火焰图html文件可使用浏览器查看,因堆栈名称过长,鼠标悬停在对应堆栈块显示其信息,可单击对应堆栈块查看详情。

图1 火焰图