Perf- Linux的性能監控和分析工具

在計算機性能方面,我們指的是資源與在一定時間內完成的任務之間的關係。

Perf- A Performance Monitoring and Analysis Tool for Linux

在公司之間激烈競爭的今天,我們要學會如何充分利用我們所擁有的資源。浪費硬件或軟件資源,或者不知道如何更有效地使用它們,將導致我們無法承受的損失,這對我們想要保持競爭力是不能接受的。

同時,我們必須小心,不要將我們的資源推向一個持續使用將導致無法彌補的損壞的極限。

在本文中,我們將向您介紹一種相對較新的性能分析工具,並提供一些監控Linux系統(包括硬件和應用程序)的技巧。這將幫助您確保它們運行良好,從而能夠產生所需的結果,而不浪費資源或自己的精力。

在Linux中介紹和安裝Perf

Linux提供了一個性能監控和分析工具,方便地稱為perf。那麼,perf與您已經熟悉的其他知名工具有何不同呢?

答案是perf可以訪問CPU中的性能監控單元,從而讓我們可以仔細觀察硬件及其相關事件的行為。

您可以监视软件事件,并根据收集的数据生成报告

您可以在基于RPM的发行版中安装perf,方法如下:

# yum update && yum install perf     [CentOS / RHEL / Fedora]
# dnf update && dnf install perf     [Fedora 23+ releases]

Debian及其衍生版本中:

# sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

如果上述命令中的uname -r返回除实际版本外的额外字符串(在我的情况下是3.2.0-23-generic),您可能需要键入linux-tools-3.2.0-23,而不是使用uname的输出。

还需注意,当在VirtualBoxVMWare的虚拟机中运行时,perf会产生不完整的结果,因为它们不允许访问硬件计数器,而其他虚拟化技术(如KVMXEN)可以。

此外,请记住,默认情况下某些perf命令可能受到root用户的限制,可以通过以下方式禁用(直到系统重新启动):

# echo 0 > /proc/sys/kernel/perf_event_paranoid

如果您需要永久禁用偏执模式,請更新/etc/sysctl.conf文件中的以下設置。

kernel.perf_event_paranoid = 0

子命令

安裝了perf之後,您可以參考它的手冊以獲取可用子命令的列表(您可以將子命令視為打開系統特定窗口的特殊選項)。為了獲得最佳和更完整的結果,請以root或通過sudo使用perf

Perf列表

perf list(不帶選項)返回所有符號事件類型(長列表)。如果您想查看特定類別中可用事件的列表,請使用perf list後跟類別名稱([hw|sw|cache|tracepoint|pmu|event_glob]),例如:

顯示Linux中預定義軟件事件的列表:

# perf list sw 
List Software Pre-defined Events in Linux

Perf stat

perf stat運行一個命令,並在執行該命令期間收集Linux性能統計。當我們運行dd時,系統上會發生什麼?

# perf stat dd if=/dev/zero of=test.iso bs=10M count=1
Collects Performance Statistics of Linux Command

上面顯示的統計數據表明,包括:

  1. 執行dd命令耗費了21.812281毫秒的CPU。如果我們將此數字除以下面的“經過的秒數”值(23.914596毫秒),則得到0.912(CPU利用率)。
  2. 當執行該指令時,15次上下文切換(也稱為進程切換)表示CPU從一個進程(或線程)切換到另一個進程15次。
  3. 2個CPU遷移是在2核CPU中工作負載均勻分佈在核心數量時的預期結果。
    在此期間(21.812281毫秒),消耗的CPU周期總數為62,025,623,除以0.021812281秒得到2.843 GHz。
  4. 如果將週期數除以總指令數,得到4.9個每指令週期,這意味著每條指令平均需要近5個CPU週期才能完成。這在一定程度上可以歸咎於分支和分支錯失的數量(見下文),這些都會浪費或誤用CPU週期。
  5. 當執行該指令時,共遇到3,552,630個分支。這是代碼中決策點和循環的CPU級表示。分支越多,性能越低。為彌補這一點,所有現代CPU都試圖預測代碼流程將採取的路徑。51,348個分支錯失表明預測功能錯誤率為1.45%

相同的原則適用於在應用程序運行時收集統計信息(或者換句話說,進行分析)。只需啟動所需的應用程序,在合理的時間內(由您決定)關閉它,perf將在屏幕上顯示統計信息。通過分析這些統計信息,您可以識別潛在問題。

Perf top

perf toptop命令類似,它顯示幾乎是實時的系統概要(也稱為實時分析)。

使用-a選項將顯示所有已知的事件類型,而-e選項將允許您選擇特定的事件類別(由perf list返回):

將顯示所有循環事件。

perf top -a 

將顯示所有與cpu時鐘相關的事件。

perf top -e cpu-clock 
Live Analysis of Linux Performance

上面輸出的第一列表示自運行開始以來採樣的百分比,按函數符號和共享對象分組。在man perf-top中有更多選項。

Perf record

perf record運行一個命令並將統計數據保存到名為perf.data的文件中,該文件位於當前工作目錄中。它運行方式類似於perf stat

輸入perf record,然後輸入一個命令:

# perf record dd if=/dev/null of=test.iso bs=10M count=1
Record Command Statistical Data

Perf report

perf report將上述perf.data中收集的數據格式化為性能報告:

# sudo perf report
Perf Linux Performance Report

上述子命令都有專用的man頁面,可以通過調用:

# man perf-subcommand

subcommand 可以是 list, stat, top, record, 或 report。這些是最常用的子命令;其他子命令列在文件中(請參考摘要部分的鏈接)。

摘要

在本指南中,我們向您介紹了 perf,這是一個用於 Linux 的性能監控和分析工具。我們強烈建議您熟悉其文檔,該文檔維護在 https://perf.wiki.kernel.org

如果您發現某些應用程序消耗了大量資源,您可以考慮修改源代碼,或使用其他替代方案。

如果您對本文有疑問或改進建議,我們樂意聽取。請隨時使用下面的評論表格與我們聯繫。

Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/