<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      perf性能分析工具

      一、介紹

      perf用法perf Examples
      程序示例
      火焰圖Linux C/C++性能優(yōu)化分析工具Perf使用教程-嗶哩嗶哩

      perf是一個(gè)性能分析工具。可以知道哪些函數(shù)調(diào)用次數(shù)多導(dǎo)致性能消耗大。

      二、安裝

      2.1 安裝

      perf工具跟內(nèi)核版本強(qiáng)相關(guān),需要安裝linux-tools-common。安裝步驟:

      apt-get update  
      apt-get install linux-tools-common  
      apt-get install linux-tools-generic linux-cloud-tools-generic  
      

      2.2 運(yùn)行可執(zhí)行文件

      可以直接使用安裝的路徑運(yùn)行

      # /usr/lib/linux-tools/5.15.0-152-generic/perf --version
      perf version 5.15.185
      

      也可以設(shè)置軟鏈接。不同內(nèi)核版本目錄5.15.0-152-generic會(huì)有所區(qū)別。

      ln -s /usr/lib/linux-tools/5.15.0-152-generic/perf /usr/bin/perf  
      

      注:如果/usr/bin/下本來(lái)就有perf文件則會(huì)報(bào)錯(cuò),說(shuō)明已經(jīng)安裝過。

      // 報(bào)錯(cuò)提示
      # perf --version
      WARNING: perf not found for kernel 5.15.0-60
      
        You may need to install the following packages for this specific kernel:
          linux-tools-5.15.0-60-generic
          linux-cloud-tools-5.15.0-60-generic
      
        You may also want to install one of the following packages to keep up to date:
          linux-tools-generic
          linux-cloud-tools-generic
      

      三、使用方法

      初學(xué)時(shí)可以找個(gè)簡(jiǎn)單的程序理解perf的用法。我用附錄中的演示程序?yàn)槔v解perf的使用方法。

      3.1 查詢需要監(jiān)控的進(jìn)程ID

      perf是監(jiān)控進(jìn)程號(hào)的,所以先用ps命令查詢得到進(jìn)程ID。

      # ps -ef | grep process_print
      root       14712    7403 99 14:54 ?        01:52:17 ./process_print
      

      3.2 perf監(jiān)控進(jìn)程

      perf record -p 14712 -g 
      

      收集一段時(shí)間可以Ctrl+C退出監(jiān)控。

      3.3 perf生成報(bào)告

      perf report -g
      
      # ls
      perf.data
      

      3.3.1 將perf數(shù)據(jù)生成生成文本

      方法2:轉(zhuǎn)成文本可以直接看函數(shù)的占比。

      // 生成perf數(shù)據(jù)txt 
      perf report -i perf.data > perf.txt
      
      # ls
      perf.data  perf.txt
      

      3.3.2 將perf數(shù)據(jù)生成生成火焰圖

      1. 火焰圖環(huán)境安裝
        生成火焰圖只需要一些腳本將數(shù)據(jù)繪圖。這些腳本下載
      git clone https://github.com/brendangregg/FlameGraph.git 
      
      # ls
      FlameGraph  perf.data
      
      1. 將perf數(shù)據(jù)繪制成火焰圖
      perf script -i perf.data > perf.unfold
      FlameGraph/stackcollapse-perf.pl perf.unfold > perf.folded
      FlameGraph/flamegraph.pl perf.folded > perf.svg
      
      # ls
      FlameGraph  perf.data  perf.folded  perf.svg  perf.unfold
      

      四、分析數(shù)據(jù)

      最終我們得到perf的火焰圖后我們可以對(duì)數(shù)據(jù)進(jìn)行分析。火焰圖中函數(shù)寬度就是耗時(shí),高度表示調(diào)用層級(jí)越多。

      perf.svg
      perf

      perf原理

      https://developer.aliyun.com/article/65255
      【Linux Perf 底層數(shù)據(jù)收集機(jī)制概述(碼題詩(shī)科技)-嗶哩嗶哩】

      perf工具指定跟蹤的進(jìn)程,看系統(tǒng)調(diào)用次數(shù)。

      附錄

      1 演示程序

      #include <stdio.h>
      #include <unistd.h>
      #include <sys/types.h>
      #include <sys/wait.h>
      
      void func1( void )
      {
          printf("process (PID:%d) printing...\n", getpid());
          return;
      }
      
      int main() {
          pid_t pid = fork();
      
          if (pid < 0) {
              perror("fork failed");
              return 1;
          } else {
              while(1) {
                  func1();
                  sleep(2);
              }
          }
          return 0;
      }
      

      編譯

      gcc process_print.c -o process_print  
      ./process_print
      

      2 perf.txt數(shù)據(jù)

      # To display the perf.data header info, please use --header/--header-only options.
      #
      #
      # Total Lost Samples: 0
      #
      # Samples: 2  of event 'cpu-clock:pppH'
      # Event count (approx.): 500000
      #
      # Children      Self  Command        Shared Object      Symbol                            
      # ........  ........  .............  .................  ..................................
      #
         100.00%   100.00%  process_print  [kernel.kallsyms]  [k] syscall_enter_from_user_mode
                  |          
                  |--50.00%--0x7fe87c38bd90
                  |          main
                  |          __getpid
                  |          entry_SYSCALL_64_after_hwframe
                  |          do_syscall_64
                  |          syscall_enter_from_user_mode
                  |          
                   --50.00%--0x3339313a44495028
                             write
                             entry_SYSCALL_64_after_hwframe
                             do_syscall_64
                             syscall_enter_from_user_mode
      
         100.00%     0.00%  process_print  [kernel.kallsyms]  [k] entry_SYSCALL_64_after_hwframe
                  |
                  ---entry_SYSCALL_64_after_hwframe
                     do_syscall_64
                     syscall_enter_from_user_mode
      
         100.00%     0.00%  process_print  [kernel.kallsyms]  [k] do_syscall_64
                  |
                  ---do_syscall_64
                     syscall_enter_from_user_mode
      
          50.00%     0.00%  process_print  libc.so.6          [.] 0x00007fe87c38bd90
                  |
                  ---0x7fe87c38bd90
                     main
                     __getpid
                     entry_SYSCALL_64_after_hwframe
                     do_syscall_64
                     syscall_enter_from_user_mode
      
          50.00%     0.00%  process_print  process_print      [.] main
                  |
                  ---main
                     __getpid
                     entry_SYSCALL_64_after_hwframe
                     do_syscall_64
                     syscall_enter_from_user_mode
      
          50.00%     0.00%  process_print  [unknown]          [k] 0x3339313a44495028
                  |
                  ---0x3339313a44495028
                     write
                     entry_SYSCALL_64_after_hwframe
                     do_syscall_64
                     syscall_enter_from_user_mode
      
          50.00%     0.00%  process_print  libc.so.6          [.] __getpid
                  |
                  ---__getpid
                     entry_SYSCALL_64_after_hwframe
                     do_syscall_64
                     syscall_enter_from_user_mode
      
          50.00%     0.00%  process_print  libc.so.6          [.] write
                  |
                  ---write
                     entry_SYSCALL_64_after_hwframe
                     do_syscall_64
                     syscall_enter_from_user_mode
      
      
      
      #
      # (Cannot load tips.txt file, please install perf!)
      #
      
      
      posted @ 2025-08-23 10:44  liqinglucky  閱讀(202)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 99在线精品视频观看免费| 毛片久久网站小视频| 精品欧美h无遮挡在线看中文 | 色呦呦九九七七国产精品| 欧美xxxxx高潮喷水| 高清美女视频一区二区三区| 中文字幕日韩精品人妻| 国产精品一码二码三码| 国产超碰无码最新上传| 少妇又爽又刺激视频| 欧洲精品码一区二区三区| 久久久亚洲欧洲日产国码aⅴ| 日本亚洲一区二区精品久久| 人妻系列中文字幕精品| 国产熟女一区二区五月婷| 日本高清视频网站www| 亚洲中文久久久精品无码| 开心激情站开心激情网六月婷婷| 亚洲产国偷v产偷v自拍色戒| 亚洲免费人成视频观看| 中文字幕人妻熟女人妻a片| 中文字幕人妻中出制服诱惑| 2021国产成人精品久久| 国产精品福利自产拍久久| 国产亚洲中文字幕久久网| 国产在线观看网址不卡一区| 丰满人妻被黑人猛烈进入| 四虎永久地址www成人| 国产精品视频中文字幕| 三上悠亚精品一区二区久久| 国产亚洲一二三区精品| 亚洲精品一区二区妖精| 久热这里有精品视频播放| 色综合网天天综合色中文| 午夜免费福利小电影| 奉化市| 人人做人人澡人人人爽| 无码人妻丝袜在线视频| 亚洲av无码乱码在线观看野外| 无码丰满人妻熟妇区| 精品无码黑人又粗又大又长|