欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          linux perf是什么?怎么用?(使用總結(jié))

          下面由linux系統(tǒng)教程欄目給大家介紹總結(jié)關(guān)于linux perf的使用方法,希望對需要的朋友有所幫助!

          簡介

          perf是linux系統(tǒng)中提供的性能分析工具,它基于一個(gè)叫“Performance counters”的內(nèi)核子系統(tǒng)實(shí)現(xiàn),同時(shí)支持硬件(CPU、PMU(Performance Monitoring Unit))和軟件(軟件計(jì)數(shù)器、tracepoint)層面的性能分析。

          perf中的事件

          perf與其他性能調(diào)優(yōu)工具一樣,都是通過對監(jiān)測對象進(jìn)行采樣,根據(jù)采樣點(diǎn)的分布來推斷整個(gè)程序的行為。通過perf list命令我們可以看到perf支持很多的采樣事件,比如branch-misses、cpu-clock等等。perf中預(yù)定義的事件屬于不同的類型,比如硬件產(chǎn)生的事件(cache 命中/分支miss)和軟件產(chǎn)生的事件(context switch/page fault)等等。

          tracepoint

          tracepoint是linux內(nèi)核中定義的一些hook,如果被開啟,它們就會(huì)在執(zhí)行到特定邏輯時(shí)被觸發(fā),方便其他工具獲取系統(tǒng)內(nèi)部的運(yùn)行狀態(tài)等信息,perf就是利用了tracepoint,它會(huì)記錄和統(tǒng)計(jì)tracepoint的各個(gè)事件,生成分析報(bào)告。

          使用方式

          perf 工具的具體使用方式如下:

          perf [--version] [--help] COMMAND [ARGS]

          其中的COMMAND列表可以通過執(zhí)行perf –help查看,下面列舉幾個(gè)常用的command。

          perf stat

          perf stat的作用是執(zhí)行一個(gè)命令并收集其運(yùn)行過程中的各個(gè)數(shù)據(jù),它可以提供一個(gè)程序運(yùn)行情況的總體概覽。比如:

          user@localhost:~$ perf stat hostname localhost  Performance counter stats for 'hostname':           0.313464      task-clock (msec)         #    0.481 CPUs utilized                            2      context-switches          #    0.006 M/sec                                    0      cpu-migrations            #    0.000 K/sec                                  153      page-faults               #    0.488 M/sec                              896,723      cycles                    #    2.861 GHz                                620,709      instructions              #    0.69  insn per cycle                     121,143      branches                  #  386.465 M/sec                                6,247      branch-misses             #    5.16% of all branches                0.000651441 seconds time elapsed

          上面這個(gè)例子,通過perf stat運(yùn)行了hostname命令,并將其運(yùn)行過程中的一些指標(biāo)匯總顯示了出來,比如task-clock、context-switches等待。默認(rèn)情況下,perf stat 會(huì)輸出幾個(gè)常用的事件的統(tǒng)計(jì),比如:

          task-clock-msecs:cpu 使用率 context-switches:進(jìn)程切換次數(shù) page-faults:發(fā)生缺頁的次數(shù) cpu-migrations:表示進(jìn)程運(yùn)行過程中發(fā)生了多少次CPU遷移,即被調(diào)度器從一個(gè)CPU轉(zhuǎn)移到另外一個(gè)CPU上運(yùn)行 cycles:處理器時(shí)鐘,一條機(jī)器指令可能需要多個(gè)cycles instructions: 機(jī)器指令數(shù)目 branches:遇到的分支指令數(shù) branch-misses是預(yù)測錯(cuò)誤的分支指令數(shù)

          除此之外,我們可以使用-e參數(shù)來指定我們感興趣的事件,比如:

          user@localhost:~$ perf stat -e cache-misses hostname localhost  Performance counter stats for 'hostname':           682      cache-misses                                                        0.000646676 seconds time elapsed

          perf top

          perf top的作用是實(shí)時(shí)地顯示系統(tǒng)當(dāng)前的性能統(tǒng)計(jì)信息。前面的perf stat用于對一個(gè)特定的程序進(jìn)行分析,而某些時(shí)候我們可能并不知道是哪個(gè)程序影響了系統(tǒng)性能,這時(shí)候就可以用perf top來查找可疑的程序。比如:

          Samples: 775  of event 'cpu-clock', Event count (approx.): 92931021 Overhead  Shared Object       Symbol    8.93%  [kernel]            [k] vsnprintf    7.73%  perf                [.] rb_next    5.92%  [kernel]            [k] kallsyms_expand_symbol.clone.0    5.07%  [kernel]            [k] format_decode    4.59%  [kernel]            [k] number    3.40%  perf                [.] symbols__insert    3.03%  libslang.so.2.2.1   [.] SLtt_smart_puts

          上面的例子顯示perf統(tǒng)計(jì)了cpu-clock事件的數(shù)據(jù),根據(jù)比例進(jìn)行了排序。和perf stat一樣,我們可以通過-e參數(shù)指定統(tǒng)計(jì)其他的事件,比如perf top -e context-switches可以查看進(jìn)程切換最多的top N個(gè)進(jìn)程。

          perf record & perf report

          perf record的作用和perf stat類似,它可以運(yùn)行一個(gè)命令并生成統(tǒng)計(jì)信息,不過perf record不會(huì)將結(jié)果顯示出來,而是將結(jié)果輸出到文件中。perf record生成的文件可以用perf report來進(jìn)行解析。

          perf record還可以通過-g參數(shù),在分析時(shí)生成calling graph,幫助定位更上層的邏輯分布。

          其他

          通過例子我們可以發(fā)現(xiàn),perf的分析結(jié)果中的Symbol一列顯示的都是c語言函數(shù)的名字。對于java來說,jit編譯產(chǎn)生的函數(shù)就會(huì)直接顯示在symbol里,而不是java的函數(shù)名,這時(shí)要定位問題就不是那么容易了,我們需要通過額外的手段將symbol和java程序的符號(hào)表對應(yīng)起來,具體后續(xù)再討論了。

          推薦學(xué)習(xí):《linux視頻教程》

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)