自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于Perf和VTune的程序性能瓶頸分析

開發(fā) 開發(fā)工具
本文首先介紹了對應(yīng)用程序進行分析的3個指標,然后介紹了Linux系統(tǒng)工具、Perf以及Vtune工具的使用,尤其重點描述了如何利用Perf和VTune工具對程序進行剖析,尋找程序的性能瓶頸。

云能力中心創(chuàng)新中心 黃亞超

本文首先介紹了對應(yīng)用程序進行分析的3個指標,然后介紹了Linux系統(tǒng)工具、Perf以及Vtune工具的使用,尤其重點描述了如何利用Perf和VTune工具對程序進行剖析,尋找程序的性能瓶頸。利用好這些性能調(diào)優(yōu)工具,能夠快速定位程序的性能熱點以指導(dǎo)程序的性能瓶頸優(yōu)化。

1、引言

應(yīng)用程序的開發(fā)測試過程中,對程序性能進行分析和優(yōu)化是不可或缺的一部分。性能分析(performance analysis也稱為profiling),是以收集程序運行時信息為手段研究程序行為的分析方法,是一種動態(tài)程序分析的方法。性能分析的目的在于決定程序的哪個部分應(yīng)該被優(yōu)化,從而提高程序的速度或者內(nèi)存使用效率。根據(jù)帕累托法則(也叫二八定律),只有優(yōu)化處于性能瓶頸的那些少量代碼,才能用最小的成本獲得最大的收益。

本文首先介紹了衡量應(yīng)用程序性能的關(guān)鍵指標,隨后介紹如何使用perf和vtune進行性能分析,找到軟件性能的熱點部分。完成應(yīng)用程序的性能分析并找到性能瓶頸后,能夠快速精準的定位到需要修改的源碼,縮短性能調(diào)優(yōu)的時間。

2、程序性能分析指標

衡量應(yīng)用程序的性能高低,需要從多個方面進行性能指標的分析,主要包括業(yè)務(wù)指標、資源指標和可靠性指標。

2.1業(yè)務(wù)指標

(1) 響應(yīng)時間

響應(yīng)時間是指系統(tǒng)對請求作出響應(yīng)的時間,可以理解為是指用戶從客戶端發(fā)起一個請求開始,到客戶端接收到從服務(wù)器端返回的響應(yīng)結(jié)束的時間,這項指標直接影響用戶的感官體驗。在實時互動的場景下,一般要求毫秒級的響應(yīng)速度。

(2) 吞吐量

吞吐量是指單位時間內(nèi)處理的請求數(shù),常用QPS(Queries Per Second)和TPS(TransactionsPerSecond)進行衡量,是衡量多并發(fā)的應(yīng)用系統(tǒng)的重要指標。

(3) 并發(fā)數(shù)

并發(fā)數(shù)指系統(tǒng)可以同時承載的正常使用系統(tǒng)功能的用戶的數(shù)量。這個指標比較直觀但是不是很準確,因為用戶不同的使用模式會導(dǎo)致不同用戶在單位時間發(fā)出不同數(shù)量的請求。

2.2資源指標

(1) CPU使用率

CPU使用率指的是程序在運行期間實時占用的CPU百分比,這是對一個時間段內(nèi)CPU使用狀況的統(tǒng)計。通過這個指標可以看出在某一個時間段內(nèi)CPU被占用的情況。

(2) 內(nèi)存利用率

內(nèi)存是計算機中重要的部件之一,它是與CPU進行溝通的橋梁。計算機中所有程序的運行都是在內(nèi)存中進行的,因此內(nèi)存的性能對計算機的影響非常大,內(nèi)存利用率不宜過高,否則會影響系統(tǒng)性能。

(3) 磁盤吞吐量

磁盤指標主要有每秒讀寫多少兆,磁盤繁忙率,磁盤隊列數(shù),平均服務(wù)時間,平均等待時間,空間利用率。其中磁盤繁忙率是直接反映磁盤是否有瓶頸的的重要依據(jù)。

(4) 網(wǎng)絡(luò)吞吐量

網(wǎng)絡(luò)吞吐量是指在無網(wǎng)絡(luò)故障的情況下單位時間內(nèi)通過的網(wǎng)絡(luò)的數(shù)據(jù)數(shù)量,單位為Byte/s。網(wǎng)絡(luò)吞吐量指標用于衡量系統(tǒng)對于網(wǎng)絡(luò)設(shè)備或鏈路傳輸能力的需求。

2.3可靠性指標

可靠性指在使用條件和規(guī)定時間內(nèi),產(chǎn)品完成規(guī)定功能的能力。常用的可靠性指標包括:可靠度、失效概率、失效率、平均工作時間、平均維修時間、有效度等。

3、程序性能分析工具

3.1 Linux系統(tǒng)工具

Linux系統(tǒng)上自帶了許多的性能監(jiān)控工具

  • vmstat:實時動態(tài)監(jiān)視操作系統(tǒng)的虛擬內(nèi)存、進程、CPU活動。
  • iostat:動態(tài)監(jiān)視系統(tǒng)的磁盤操作活動。
  • top: 實時顯示系統(tǒng)中各個進程的資源占用狀況。
  • sar: Linux上最為全面的系統(tǒng)性能分析工具之一,可以從14個大方面對系統(tǒng)的活動進行報告。
  • top: 實時顯示系統(tǒng)中各個進程的資源占用狀況。

3.2 Perf

Perf是內(nèi)置于Linux 內(nèi)核源碼樹中的性能剖析(profiling)工具。它基于事件采樣原理,使用了許多Linux跟蹤特性,可用于行函數(shù)級與指令級的性能瓶頸的查找與熱點代碼的定位,。

(1)Perf top:實時顯示系統(tǒng)/進程的性能統(tǒng)計信息

常用參數(shù)

  • -e:指定性能事件
  • -a:顯示在所有CPU上的性能統(tǒng)計信息
  • -C:顯示在指定CPU上的性能統(tǒng)計信息
  • -p:指定進程PID
  • -t:指定線程TID
  • -K:隱藏內(nèi)核統(tǒng)計信息
  • -U:隱藏用戶空間的統(tǒng)計信息
  • -s:指定待解析的符號信息

(2) Perf stat:分析系統(tǒng)/進程的整體性能概況。

常用參數(shù):

  • -e:選擇性能事件
  • -i:禁止子任務(wù)繼承父任務(wù)的性能計數(shù)器。
  • -r:重復(fù)執(zhí)行 n 次目標程序,并給出性能指標在n 次執(zhí)行中的變化范圍。
  • -n:僅輸出目標程序的執(zhí)行時間,而不開啟任何性能計數(shù)器。
  • -a:指定全部cpu
  • -C:指定某個cpu
  • -A:將給出每個處理器上相應(yīng)的信息。
  • -p:指定待分析的進程id
  • -t:指定待分析的線程id

(3) Perf record: 記錄一段時間內(nèi)系統(tǒng)/進程的性能時間。

常用參數(shù):

  • -e:選擇性能事件
  • -p:待分析進程的id
  • -t:待分析線程的id
  • -a:分析整個系統(tǒng)的性能
  • -C:只采集指定CPU數(shù)據(jù)
  • -c:事件的采樣周期
  • -o:指定輸出文件,默認為perf.data
  • -A:以append的方式寫輸出文件
  • -f:以O(shè)verWrite的方式寫輸出文件
  • -g:記錄函數(shù)間的調(diào)用關(guān)系

(4) Perf Report: 讀取perf record生成的數(shù)據(jù)文件,并顯示分析數(shù)據(jù)。

常用參數(shù):

  • -i:輸入的數(shù)據(jù)文件
  • -v:顯示每個符號的地址
  • -d :只顯示指定dos的符號
  • -C:只顯示指定comm的信息(Comm. 觸發(fā)事件的進程名)
  • -S:只考慮指定符號
  • -U:只顯示已解析的符號
  • -g[type,min,order]:顯示調(diào)用關(guān)系,具體等同于perf top命令中的-g
  • -c:只顯示指定cpu采樣信息
  • -M:以指定匯編指令風(fēng)格顯示
  • –source:以匯編和source的形式進行顯示

使用perf對程序進行函數(shù)調(diào)用的關(guān)系分析后,統(tǒng)計函數(shù)的調(diào)用次數(shù),算出百分比,可以得到進程運行的可信數(shù)據(jù)(圖1)。

 

圖1 perf的函數(shù)調(diào)用分析結(jié)果

 

圖中第一列表示函數(shù)的子函數(shù)執(zhí)行占用的CPU比例,第二列表示函數(shù)執(zhí)行占用的CPU比例,第三列表示函數(shù)所在的DSO,第四列表示函數(shù)名。通過使用perf工具,可以方便地得到定位程序的熱點代碼,以指導(dǎo)程序性能瓶頸的優(yōu)化。

但是這種結(jié)果查看函數(shù)之間的調(diào)用關(guān)系十分不方便,可以使用一些腳本生成火焰圖(FlameGraph)來直觀地表示函數(shù)調(diào)用關(guān)系。

 

圖2 火焰圖

 

火焰圖使用SVG的圖像格式進行存儲,方便用戶與圖像進行交互?;鹧鎴D中的函數(shù)方塊的長度越長,那么表示執(zhí)行該函數(shù)的CPU時間越長?;鹧鎴D的底部為父函數(shù),上方為它的子函數(shù)。通過火焰圖的形式,函數(shù)調(diào)用的關(guān)系以及CPU占用比都更加直觀地呈現(xiàn)出來。

3.3 VTune

VTune是 Intel 公司開發(fā)的的一個功能十分強大的應(yīng)用程序性能分析軟件,包括尋找軟件性能熱點、線程性能檢測、CPU利用率、IO負載監(jiān)測等功能,還提供豐富的UI界面供用戶操作,簡單易上手。

VTune提供了本地連接、遠程連接、安卓設(shè)備連接等多種方式來對不同的應(yīng)用程序進行測試,還提供Performance Snapshot、Hotpots、Microarchitecture Exploration、Threading和IO等不同方面的性能分析模塊(圖3)。

 

圖3 VTune性能分析模塊

 

用戶使用VTune進行模塊分析后,可以通過Summary、Bottom-up、Caller/Callee、Top-down TreehePlatfom5個選項框查看性能分析結(jié)果(圖4)。

 

圖4 Hotspots分析結(jié)果

 

  • Summary:顯示有關(guān)整個應(yīng)用程序執(zhí)行的統(tǒng)計信息,以分析CPU時間和處理器利用率。
  • Bottom-up:在自下而上的樹中顯示熱點函數(shù),每個函數(shù)的CPU時間和CPU利用率。
  • Top-down Tree:顯示調(diào)用樹中的熱點函數(shù),僅函數(shù)的性能指標(不包括子函數(shù))以及函數(shù)及其子函數(shù)的總性能指標。
  • Caller/Callee:顯示所選函數(shù)的父函數(shù)和子函數(shù)。
  • Platform:提供有關(guān)CPU和GPU利用率,幀速率,內(nèi)存帶寬和用戶任務(wù)的詳細信息。

(1)Performance Snapshot

該功能模塊能夠?qū)?yīng)用程序進行總體的分析(圖4),包括IPC、GFLOPS、CPU頻率、CPU核心利用率、微架構(gòu)使用率、內(nèi)存使用率等指標等,但只能給出一個總體的數(shù)值,要分析各個函數(shù)對CPU的占用時間等詳細數(shù)值要進行更加詳細的分析,一般進行性能分析時,首先進行這個模塊的分析。

 

圖5 Performance Snapshot分析結(jié)果示意圖

 

(2)Hotpots

Hotspots分析可以了解應(yīng)用程序流程,并確定獲得大量執(zhí)行時間的代碼段(熱點),這是用戶進行算法分析的起點。熱點分析有兩種基于采樣的收集模式:用戶模式采樣會產(chǎn)生更高的開銷,但不需要采樣驅(qū)動程序即可進行收集;基于硬件事件的采樣,可以提供最小的收集開銷,但需要安裝采樣驅(qū)動程序或Perf。在用戶模式采樣中,收集器不會收集系統(tǒng)范圍內(nèi)的性能數(shù)據(jù),而是只關(guān)注您的應(yīng)用程序。硬件基于事件的采樣模式是基于硬件基于事件的采樣收集,分析當前系統(tǒng)上運行的所有進程,提供關(guān)于整個系統(tǒng)性能的CPU時間數(shù)據(jù)。

在進行Hotspots分析后,可以查看Bottom-up視圖下的熱點函數(shù),雙擊函數(shù)即可對源碼以及匯編代碼進行分析。


圖6 源碼和匯編代碼分析圖

 

(3)Threading

Threading分析可以用于探索CPU利用率低下的原因,相較于其他模塊,它顯示了全部的線程數(shù)量,以及各個線程的等待時間以及使用時間(圖7),使用戶能夠更好地把握各個線程之間的切換情況。通過這些信息,用戶可以清晰地觀察工作線程的實際執(zhí)行過程,了解程序的實際執(zhí)行邏輯,明確各個線程的工作狀態(tài)與預(yù)期是否有出入。

 


圖7 Summary視圖下的CPU利用率分析圖

 

(4)I/O

I/O模塊能夠分析設(shè)備的PCIe I/O帶寬消耗,Director I/O技術(shù)和內(nèi)存映射I/O流量、內(nèi)存帶寬消耗Intel®UPI帶寬消耗以及軟件數(shù)據(jù)平面利用率,以在硬件和軟件級別上定位I/ O密集型應(yīng)用程序的性能瓶頸。

4、結(jié)束語

隨著業(yè)務(wù)的日漸復(fù)雜,程序性能優(yōu)化儼然成為了每一位技術(shù)人的必修課,而程序的性能調(diào)優(yōu)工作又是一個十分復(fù)雜的工作。而掌握一些常用的系統(tǒng)性能調(diào)優(yōu)工具的使用,能更好地剖析程序,迅速而準確的找到性能熱點,以指導(dǎo)性能瓶頸問題的解決方案設(shè)計。

【本文為51CTO專欄作者“移動Labs”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:未麗燕 來源: 移動Labs
相關(guān)推薦

2024-12-09 09:50:00

JVM逃逸逃逸分析

2010-08-10 13:58:00

Flex性能測試

2010-06-11 10:19:22

systemd

2012-05-19 22:24:34

MVVM

2019-02-01 09:50:00

提升Python程序性能

2022-04-29 15:24:53

Redis存儲慢查詢

2019-10-31 11:50:19

MySQL數(shù)據(jù)庫Windows

2010-02-04 09:41:03

Android應(yīng)用程序

2018-07-06 16:26:11

編程語言Python程序性能

2010-11-15 16:20:33

Oracle系統(tǒng)優(yōu)化

2024-05-16 11:04:06

C#異步編程編程

2022-10-08 13:13:14

Python程序性能

2011-09-20 10:41:45

Web

2024-04-29 08:16:18

2010-07-28 09:25:41

jQueryJavaScript性

2015-09-24 09:17:55

應(yīng)用程序網(wǎng)絡(luò)存儲

2025-03-25 09:00:00

2009-07-01 18:24:59

JSP應(yīng)用程序JMeter

2018-11-20 10:50:00

Java性能優(yōu)化編程技巧

2013-12-17 17:05:20

iOS性能優(yōu)化
點贊
收藏

51CTO技術(shù)棧公眾號