最近很多小夥伴想了解oprofile,今天小編專門整理了oprofile的相關內容分享給大家,讓我們一起看看吧。
本文目錄一覽:
OProfile可以幫助用戶識別諸如模塊的占用時間、循環的展開、高速緩存的使用率低、低效的類型轉換和冗餘操作、錯誤預測轉移等問題。它收集有關處理器事件的20449;息,其中包括TLB的故障、停機、存儲器訪問以及緩存命中和未命中的指令的攫取數量。
OProfile支持兩種采樣方式:基於事件的采樣(Event Based)和基於時間的采樣(Time Based)。基於事件的采樣是OProfile隻記錄特定事件(比如L2緩存未命中)的發生次數,當達到用戶設定的定值時Oprofile就記錄一下〈采一個樣)。這種方式需要CPU內部有性能計數器(Performace Counter)。基於時間的采樣是OProfile借助OS時鍾中斷的機製,在每個時鍾中斷,OProfile都會記錄一次(采一次樣)。引入它的目的在於,提供對沒有性能計數器的CPU的支持,其精度相對於基於事件的采樣要低,因為要借助OS時鍾中斷的支持,對於禁用中斷的代碼,OProfile不能對其進行分析。OProfile在Linux上分兩部分,一個是內核模塊(oprofile.ko),另一個是用戶空間的守護進程( oprofiled)。前者負責訪問性能計數器或者注冊基於時間采樣的函數,並將采樣值置於內核的緩衝區內。後者在後台運行,負責從內核空間收集數據,寫入文件。其運行步驟如下:1)初始化opcontrol--init 2)配置opcontrol--setup--event=... 3)啟動opcontrol--start 4)運行待分析的程序xxx 5)取出數據
下載的是linux-xlnx-xilinx-v14.7.tar.gz
解壓縮後,用以下命令調出Linux kernel的配置界麵:
export ARCH=arm
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
make xilinx_zynq_defconfig
make xconfig 或者make menuconfig
在配置界麵上將以下兩項勾上:
General setup ---
[*] Profiling support
* OProfile system profiling
然後make uImage即可生成新的uImage,用來替換Xilinx Linux pre-built 14.7中的Linux kernel image。同時我們也需要vmlinux來檢查profiling的結果。
Oprofile需要popt, bfd, liberty庫,要在嵌入式單板上使用這些庫,需要手工完成交叉編譯。
針對popt 1.7,用以下命令完成編譯:
./configure --prefix=/home/wave/xilinx/oprofileprj/rootfs --host=arm-xilinx-linux-gnueabi --with-kernel-support --disable-nls make make install
針對binutils 2.24,用以下命令完成編譯:
./configure --host=arm-xilinx-linux-gnueabi --prefix=/home/wave/xilinx/oprofileprj/rootfs --enable-install-libbfd --enable-install-libiberty --enable-shared make make install
不過--enable-install-libiberty沒有效果,所以需要手工把libiberty.a和libiberty.h拷貝到相應的位置。
針對oprofile 0.9.9,用以下命令完成編譯:
./configure --host=arm-xilinx-linux-gnueabi --prefix=/home/wave/xilinx/oprofileprj/rootfs --with-kernel-support --with-binutils=/home/wave/xilinx/oprofileprj/rootfs make make install
配置過程結束後可能會有以下提示,因為沒有打算用GUI和profile JITed code,所以直接忽視之。
config.status: executing libtool commands
Warning: QT version 3 was requested but not found. No GUI will be built.
Warning: The user account 'oprofile:oprofile' does not exist on the system.
To profile JITed code, this special user account must exist.
Please ask your system administrator to add the following user and group:
user name : 'oprofile'
group name: 'oprofile'
The 'oprofile' group must be the default group for the 'oprofile' user.
將編譯完成的uImage,vmlinux,oprofile binary,重新編譯的沒有-pg的libjpeg binary以及tool chain的libc打包放到SD卡中,準備在ZC706開發板上嚐試profile djpeg。
三. 運行Oprofile
正常啟動嵌入式Linux後,在開發板的console上一次輸入以下命令:
mount /dev/mmcblk0p1 /mnt
mkdir -p /home/root/work
cd /home/root/work
tar zxvf /mnt/jpeg-bin-nopg.tar.gz
cd jpeg-bin/bin
cp /mnt/park-2880x1800.jpg .
export LD_LIBRARY_PATH=/home/root/work/jpeg-bin/lib
cd /home/root/work
tar zxvf /mnt/rootfs.tar.gz
cd rootfs
chown root:root -R
*cp -R bin/* /usr/bin
cp -R lib/* /lib
cp /bin/which /usr/bin
cp /bin/dirname /usr/bin
mkdir -p /home/wave/xilinx/oprofileprj/rootfs/share
cp -R ./rootfs/* /home/wave/xilinx/oprofileprj/rootfs
cd /home/root/work
tar zxvf /mnt/libc.tar.gz
cp ./lib/libstdc*.* /lib
mkdir -p /home/wave/xilinx/libjpeg
cd /home/wave/xilinx/libjpeg
tar zxvf /mnt/jpeg-9.tar.gz
cp /mnt/vmlinux /home/root/work
cd /home/root/work/jpeg-bin/bin
opcontrol --init
opcontrol --vmlinux=/home/root/work/vmlinux
opcontrol --setup --event=CPU_CYCLES:100000::0:1 --session-dir=/home/root/
operf --vmlinux /home/root/work/vmlinux ./djpeg -bmp park-2880x1800.jpg result.bmp
opreport -l ./djpeg
完成這一步後,我們就可以看到profiling的結果了,在筆者的平台上看到的內容的主要部分如下:
root@zynq:~/work/jpeg-bin/bin# opreport -l ./djpeg
Using /home/root/work/jpeg-bin/bin/oprofile_data/samples/ for samples directory.
CPU: ARM Cortex-A9, speed 666667 MHz (estimated)
Counted CPU_CYCLES events (CPU cycle) with a unit mask of 0x00 (No unit mask) count 100000
samples % image name symbol name
15293 58.6253 libc-2.17.so /lib/libc-2.17.so
2044
有些時候,我們特別關注程序的性能,特別是底層軟件,比如驅動程序,OS等。為了更好的優化程序性能,我們必須找到性能瓶頸點,好鋼用在刀刃上才能取得好的效果,否則可能白做工作。為了找到關鍵路徑,我們可以使用profilng技術,在linux平台上,我們可以使用gprof和oprofile工具。gprof是GNU工具之一,它在編譯的時候在每個函數的出入口加入了profiling的代碼,運行時統計程序在用戶態的執行信息,可以得到每個函數的調用次數,執行時間,調用關係等信息,簡單易懂。適合於查找用戶級程序的性能瓶頸,對於很多時間都在內核態執行的程序,gprof不適合。oprofile也是一個開源的profiling工具,它使用硬件調試寄存器來統計信息,進行profiling的開銷比較小,而且可以對內核進行profiling。它統計的信息非常的多,可以得到cache的缺失率,memory的訪存信息,分支預測錯誤率等等,這些信息gprof是得不到的,但是對於函數調用次數,它是不能夠得到的。。簡單來說,gprof簡單,適合於查找用戶級程序的瓶頸,而oprofile稍顯複雜,但是得到的信息更多,更適合調試係統軟件。我們以編譯運行hello/doc/opreport/doc/opannotate/doc/opgprof/binutils/docs-2/使用 GNU profiler 來提高代碼運行速度www-128/developerworks/cn/linux/l-gnuprof/developerworks/cn/linux/l-pow-oprofile/摘自:txgc1009的專欄
以上就是oprofile的相關介紹,希望能對大家有所幫助。
本文到此結束,希望對大家有所幫助呢。
本文由貌是情非網oprofile(OProfile的具體意義?)貌是情非網的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“抖音抖店超時未發貨處罰及預防措施”