linux性能調(diào)優(yōu)學(xué)習(xí)筆記_第1頁(yè)
linux性能調(diào)優(yōu)學(xué)習(xí)筆記_第2頁(yè)
linux性能調(diào)優(yōu)學(xué)習(xí)筆記_第3頁(yè)
linux性能調(diào)優(yōu)學(xué)習(xí)筆記_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Linux性能調(diào)優(yōu)Profiling幾種工具profiling包括幾種:cpuprofiling,即提到的性能分析。memoryprofiling,即分析程序性能。networkprofiling,即網(wǎng)絡(luò)流量的分析。另外,profiling又分兩種:1,sampling。即采樣方式。2,instruments,即插裝代碼技術(shù)。(包含:編譯期間,鏈接期間,運(yùn)行期間)。oprofile----屬于sampling方式,即不影響程序行為,也不需要重啟程序,它是對(duì)cpu進(jìn)行采樣分析。gprof

----屬于插裝技術(shù),需在編譯期間增加-pg選項(xiàng),屬于GNU部分,不需安裝,隨著gcc附帶。valgrind---屬于插裝技術(shù),需要在運(yùn)行期間增加valgrind選項(xiàng)。(其中massif工具用于內(nèi)存分析,callgrind用于性能分析)google-perftools----屬于插裝技術(shù),需要在鏈接期間增加-L/usr/lib-lprofiler選項(xiàng)。gprof分析linux程序性能瓶頸gcc-pg-otesttest.ctest運(yùn)行的時(shí)候會(huì)把搜集的信息保存在gmoun.out中fedora不能使用-lc_p選項(xiàng)的問(wèn)題

一般gprof只能查看用戶(hù)函數(shù)信息。如果想查看庫(kù)函數(shù)的信息,需要在編譯是再加入“-lc_p”編譯參數(shù)代替“-lc”編譯參數(shù),這樣程序會(huì)鏈接libc_p.a庫(kù),才可以產(chǎn)生庫(kù)函數(shù)的profiling信息。需要安裝glibc-profile,下載地址http://ftp.riken.jp/Linux/fedora/core/updates/2/i386/glibc-profile-2.3.3-27.1.i386.rp。gprofhellogmon.out-p得到每個(gè)函數(shù)占用的執(zhí)行時(shí)間gprofhellogmon.out-q得到callgraph,包含了每個(gè)函數(shù)的調(diào)用關(guān)系,調(diào)用次數(shù),執(zhí)行時(shí)間等信息。gprofhellogmon.out-A得到一個(gè)帶注釋的“源代碼清單”,它會(huì)注釋源碼,指出每個(gè)函數(shù)的執(zhí)行次數(shù)。這需要在編譯的時(shí)候增加-g選項(xiàng)。Oprofile性能調(diào)優(yōu)/news/要使用oprofile

首先得采用打開(kāi)oprofile支持的內(nèi)核啟動(dòng)。Oprofile需要重新編譯內(nèi)核,請(qǐng)確認(rèn):

.config文件中設(shè)置:

CONFIG_PROFILING=y

CONFIG_OPROFILE=y

另外,還要在Processortypeandfeatures菜單中啟用LocalAPIC和IO-APIC:

CONFIG_X86_LOCAL_APIC=y

CONFIG_X86_IO_APIC=y查看處理起本身沒(méi)有集成APICoprofile.ko內(nèi)核模塊已經(jīng)被集成到linux2.6內(nèi)核中,所以只需要安裝前端工具,可以從oprofile官方網(wǎng)站下載源碼來(lái)進(jìn)行安裝,當(dāng)前最新版本為0.9.4。其支持兩種采樣(sampling)方式:基于事件的采樣(event

based)和基于時(shí)間的采樣(time

based)。

基于事件的采樣是oprofile只記錄特定事件(比如L2

cache

miss)的發(fā)生次數(shù),當(dāng)達(dá)到用戶(hù)設(shè)定的

定值時(shí)oprofile

就記錄一下(采一個(gè)樣)。這種方式需要CPU

內(nèi)部有性能計(jì)數(shù)器(performace

counter)。

現(xiàn)代CPU內(nèi)部一般都有性能計(jì)數(shù)器,龍芯2E內(nèi)部亦內(nèi)置了2個(gè)性能計(jì)數(shù)器?;跁r(shí)間的采樣是oprofile

借助OS

時(shí)鐘中斷的機(jī)制,每個(gè)時(shí)鐘中斷

oprofile

都會(huì)記錄一次(采一次樣)。

引入的目的在于,提供對(duì)沒(méi)有性能計(jì)數(shù)器

CPU

的支持。其精度相對(duì)于基于事件的采樣要低。因?yàn)橐柚?/p>

OS

時(shí)鐘中斷的支持,對(duì)禁用中斷的代碼oprofile不能對(duì)其進(jìn)行分析。

oprofile

在Linux

上分兩部分,一個(gè)是內(nèi)核模塊(oprofile.ko),一個(gè)為用戶(hù)空間的守護(hù)進(jìn)程(oprofiled)。前者負(fù)責(zé)訪(fǎng)問(wèn)性能計(jì)數(shù)器或者注冊(cè)基于時(shí)間采樣的函數(shù)(使用register_timer_hook注冊(cè)之,使時(shí)鐘中斷處理程序最后執(zhí)行profile_tick

時(shí)可以訪(fǎng)問(wèn)之),并采樣置于內(nèi)核的緩沖區(qū)內(nèi)。后者在后臺(tái)運(yùn)行,負(fù)責(zé)從內(nèi)核空間收集數(shù)據(jù),寫(xiě)入文件。

oprofile使用初始化

opcontrol--init加載模塊,mout/dev/oprofile創(chuàng)建必需的文件和目錄配置

//opcontrol

--setup

--event=CYCLES:1000::0:1

opcontrol--no-vmlinux或者opcontrol--vmlinux=/boot/vmlinux-`uname-r`決定是否對(duì)kernel進(jìn)行profilingopcontrol--event=CPU_CLK_UNHALTED:5000opcontrol--separate=kernel--separate=lib分開(kāi)記錄每個(gè)程序的性能開(kāi)銷(xiāo)opcontrol--reset清楚當(dāng)前會(huì)話(huà)中的數(shù)據(jù)啟動(dòng)

opcontrol--start開(kāi)始profiling運(yùn)行待分析之程序

./hello運(yùn)行應(yīng)用程序,oprofile會(huì)對(duì)它進(jìn)行profiling取出數(shù)據(jù)

opcontrol--dump把收集到的數(shù)據(jù)寫(xiě)入文件opcontrol--stop停止profilingopcotrol-h關(guān)閉守護(hù)進(jìn)程oprofiledopcontrol--shutdown停止oprofiledopcontrol--deinit卸載模塊oprofile的功能非常強(qiáng)大,可以對(duì)每個(gè)線(xiàn)程進(jìn)行單獨(dú)采樣,也可以對(duì)每個(gè)CPU單獨(dú)采樣,這些都是通過(guò)opcontrol的--separate選項(xiàng)來(lái)完成的。opcontrol

--init

該命令會(huì)加載oprofile.ko模塊,mount

oprofilefs。成功后會(huì)在/dev/oprofile/目錄下導(dǎo)出一些文件和目錄如:

cpu_type,

dump,

enable,

pointer_size,

stats/配置

主要設(shè)置計(jì)數(shù)事件和樣本計(jì)數(shù),以及計(jì)數(shù)的CPU模式(用戶(hù)態(tài)、核心態(tài))

opcontrol

--setup

--event=CYCLES:1000::0:1

則是設(shè)置計(jì)數(shù)事件為CYCLES,即對(duì)處理器時(shí)鐘周期進(jìn)行計(jì)數(shù)

樣本計(jì)數(shù)為1000,即每1000個(gè)時(shí)鐘周期,oprofile

取樣一次。處理器運(yùn)行于核心態(tài)則不計(jì)數(shù)

運(yùn)行于用戶(hù)態(tài)則計(jì)數(shù)

--event=name:count:unitmask:kernel:user

name:

event

name,

e.g.

CYCLES

or

ICACHE_MISSES

count:

reset

counter

value

e.g.

100000

unitmask:

hardware

unit

mask

e.g.

0x0f

kernel:

whether

to

profile

kernel:

0

or

1user:

whether

to

profile

userspace:

0

or

1

注意:opreport在虛擬機(jī)下不能使用,物理機(jī)上都是沒(méi)問(wèn)題的。--vmlinux指定的內(nèi)核必須是沒(méi)有被壓縮過(guò)的原始的文件

--vmliunx指定的內(nèi)核必須是當(dāng)前系統(tǒng)運(yùn)行的內(nèi)核在要對(duì)kernel以及modules進(jìn)行測(cè)試時(shí),--vmlinux必須要指定內(nèi)核初始化如果出現(xiàn)timermode說(shuō)明出現(xiàn)沖突,應(yīng)該調(diào)用rm/root/.oprofile/daemonrc刪除該文件即可。對(duì)于每一次測(cè)試過(guò)程中,如果需要進(jìn)行事件的重新設(shè)置,就必須重啟daemon,它是一個(gè)守護(hù)進(jìn)程。也就是說(shuō),收集數(shù)據(jù)完成后,要用--shutdown命令來(lái)停止daemon,而不是--stop(此命令只是停止profiling),這樣再次進(jìn)行—start命令就可以使用新的事件設(shè)置;/usr/bin/oprofiled

守護(hù)進(jìn)程

/usr/bin/opcontrol

控制前端,負(fù)責(zé)控制與用戶(hù)交互,用得最多/usr/bin/opannotate

根據(jù)搜集到的數(shù)據(jù),在源碼或者匯編層面上注釋并呈現(xiàn)給用戶(hù)

/usr/bin/opreport

生成二進(jìn)制鏡像或符號(hào)的概覽

/usr/bin/ophelp

列出oprofile支持的事件/usr/bin/opgprof

生成gprof格式的剖析數(shù)據(jù)

opstack:

產(chǎn)生調(diào)用圖profile,但要求x86/2.6的平臺(tái),并且linux2.6安裝了call-graphpatchoparchive:將所有的原始數(shù)據(jù)文件收集打包,可以到另一臺(tái)機(jī)器上進(jìn)行分析。op_import:將采樣的數(shù)據(jù)庫(kù)文件從另一種abi轉(zhuǎn)化成本地格式。最常用的是opreport,這個(gè)可以給出image和symbols的信息,比如我想得到每個(gè)函數(shù)的執(zhí)行時(shí)間占用比例等信息,用來(lái)發(fā)現(xiàn)系統(tǒng)性能瓶頸。opannotate可以對(duì)源碼進(jìn)行注釋?zhuān)赋瞿膫€(gè)地方占用時(shí)間比較多。常用命令如下:opreport-l/bin/bash--exclude-depand--threshold1,用來(lái)發(fā)現(xiàn)系統(tǒng)瓶頸。opannotate--source--output-dir=annotated/usr/local/oprofile-pp/bin/oprofiledopannotate--source--base-dirs=/tmp/build/libfoo/--search-dirs=/home/user/libfoo/--output-dir=annotated//lib/libfoo.so交叉運(yùn)程注意問(wèn)題內(nèi)核的profile選項(xiàng)是都選擇上的,注意另外還需要將eabi選項(xiàng)也選上才行l(wèi)ibpopt.so.0需要拷貝下去/etc/目錄下創(chuàng)建mtab并添加“nodev/dev/oprofileoprofilefsrw00”交叉編譯oprofile/nanjianhui/article/details/6454812/yuyin86/article/details/66714921.首先要下載OProfile的相關(guān)軟件包,如下:oprofile-0.9.6.tar.gz:/download/popt-1.14.tar.gz:/projects/popt/binutils-2.20.tar.gz:/gnu/binutils/

注意:在下載oprofile-0.9.6.tar.gz的時(shí)候,建議通過(guò)git來(lái)下載,否則可能不能支持ARM-CortexA9.gitclonegit:///gitroot/oprofile/oprofile首先確認(rèn)標(biāo)板上運(yùn)行的Linux是否支持下面的選項(xiàng):ProfilingSupportOProfilesystemprofilingKernelperformanceeventsandcounters$makegoldfish_defconfig

$makemenuconfig

修改內(nèi)核配置如下

Generalsetup--->

[*]Profilingsupport(EXPERIMENTAL)

[]Activatemarkers

[*]OProfilesystemprofiling(EXPERIMENTAL)

這是把OProfile直接編進(jìn)內(nèi)核,也可以選擇[M]OProfil

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論