如何使用oprofile对软件做profiling


排行榜 收藏 打印 发给朋友 举报发布者:jackzhang
热度112票  浏览1257次 【共0条评论】【我要评论】时间:2014年1月08日 11:04

关于Xilinx Zynq-7000带来的新的系统设计思路,以及Profiling的对象libjpeg,前文已经描述过了,再此不再赘述。

 

 

一. Oprofile简介

 

Profiling是对不同性能特征的数据的形式化总结或分析,它通常以图形和表的形式出现。它提供为特定的处理器事件收集的采样百分数或数量,比如cache miss rate、TLB miss rate等等。一般来说,主要目的是为了找出软件中的性能瓶颈,然后有针对性的优化以提升软件的整体性能。

 

Oprofile 是用于 Linux 的若干种评测和性能监控工具中的一种。它可以工作在不同的体系结构上,包括ARM, PowerPC, MIPS, IA32, IA64 和 AMD Athlon等等。它的开销很小,从Linux 2.6 版起,它被包含进了Linux内核中。

 

Oprofile可以收集有关处理器事件的信息,帮助用户识别诸如循环的展开、cache的使用率低、低效的类型转换和冗余操作、错误预测转移等问题。Oprofile是一种细粒度的工具,可以为指令集或者为函数、系统调用或中断处理例程收集采样。Oprofile 通过取样来工作。使用收集到的评测数据,用户可以很容易地找出性能问题。

 

通过监察CPU的hardware events,oprofile可以在运行状态下对整个Linux系统进行profiling。Profiling的对象可以是Linux kernel (包括modules和interrupt handlers), shared libraries或者应用程序。

 

从0.9.8版本开始,oprofile支持Perf_events profiling mode模式。应用程序operf被用来控制profiling过程;而在legacy mode下,是通过opcontrol脚本和oprofiled daemon来完成的。Operf不再象legacy mode那样需要OProfile kernel driver,它直接和Linux Kernel Performance Events Subsystem打交道。使用operf,就可以用普通用户的身份来profiling用户的应用程序了,当然如果需要对整个系统来profiling的时候还是需要root权限的。

 

如果硬件不支持OProfile使用performance counters,OProfile就只能工作在Timer Mode下了。Timer Mode只能在legacy profiling mode下使用,即只能通过opcontrol脚本来控制。

 

Oprofile的website为:http://oprofile.sourceforge.net/

可以支持的处理器的hardware event类型:http://oprofile.sourceforge.net/docs/

对于Zynq-7000来说,http://oprofile.sourceforge.net/docs/armv7-ca9-events.php 列出了ARM Cortex-A9内核PMU(Performance Monitor Unit)所支持的所有hardware event种类,可以看出oprofile可以支持很多深入处理器内部的分析。

 

http://oprofile.sourceforge.net/examples/ 提供了一些oprofile生成的结果,可以方便开发者在开始使用之前了解oprofile能够做到哪些事情。

 

Oprofile的详细使用文档:http://oprofile.sourceforge.net/doc/index.html

 

Oprofile的优势:

Ÿ   比较低的运行开销

Ÿ   对被profiling的对象影响很小

Ÿ   可以profiling中断服务程序(interrupt handlers)

Ÿ   可以profiling应用程序和shared libraries

Ÿ   可以profiling dynamically compiled (JIT) code

Ÿ   可以对整个系统做profiling

Ÿ   可以观察CPU内部的细节,例如cache miss rate

Ÿ   可以多源代码做annotation

Ÿ   可以支持instruction-level的profiling

Ÿ   可以生成call-graph profiles

 

不过OProfile也不是万能的,它也有自己的局限性:

Ÿ   只能在x86, ARM, 和PowerPC架构上生成call graph profiles

Ÿ   不支持100%精确的instruction-level profiling

Ÿ   对dynamically compiled (JIT) code profiling的支持还不完善。

 

无论如何,Oprofile的功能都比gprof要强很多,代价是配置起来会比较麻烦。

 

 

二. 编译Oprofile

 

首先最好在Linux kernel里面选中Oprofile driver,以获得全面的支持。

 

下载Linux kernel Source:从https://github.com/Xilinx/linux-xlnx 可以下载到Xilinx提供的验证好的内核。如果不方便使用Linux下的git工具,可以单击页面上的releases找到相应的版本下载tar ball。下载的时候最好选tar.gz格式的,而不是zip格式的,因为后者在处理symbol link的时候有可能会出问题。

 

因为笔者使用的是Xilinx Linux pre-built 14.7,所以这里下载的是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    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5种常见信用卡还款方式对比

信用卡还款&#xff0c;你经常使用哪种方式呢&#xff1f;下面我们来对比下常用几种信用卡还款方式的优劣。1、自动还款&#xff1a;自动还款就是开通自动还款功能&#xff0c;绑定本行的储蓄卡账号&#xff0c;还款日到期了自动扣款。优势&#xff1a;可以及时还款&#xff0c…

网上贷款,靠谱吗?

随着互联网技术的发展&#xff0c;通过网上贷款的人越来越多&#xff0c;但也有很多网友对网上贷款表示质疑&#xff0c;认为网上贷款不靠谱&#xff0c;那到底网上贷款靠不靠谱呢&#xff1f;首先我想说的&#xff0c;网上贷款有真实的&#xff0c;也有虚假的&#xff0c;靠不…

Julia与R/Python/MATLAB比较及Julia中的Text Analysis模块

http://site.douban.com/146782/widget/notes/15468638/note/356127615/ 上午等着R跑数&#xff0c;R是出了名的慢&#xff0c;特别是处理文本时。无聊中&#xff0c;刷了一遍微博&#xff0c;惊现R界的扫地僧&#xff08;谢益辉语&#xff09;宫雨放出了RJulia。GitHub地址在此…

根据RTL图编写Verilog程序

根据RTL图编写Verilog程序 题目描述 根据以下RTL图&#xff0c;使用 Verilog HDL语言编写代码&#xff0c;实现相同的功能&#xff0c;并编写testbench验证功能。 timescale 1ns/1nsmodule RTL(input clk,input rst_n,input data_in,output reg data_out);reg data_in_reg;a…

Chapter 5:Spectral-Subtractive Algorithms

作者&#xff1a;桂。 时间&#xff1a;2017-05-24 10:06:39 主要是《Speech enhancement: theory and practice》的读书笔记&#xff0c;全部内容可以点击这里。 书中代码&#xff1a;http://pan.baidu.com/s/1hsj4Wlu&#xff0c;提取密码&#xff1a;9dmi 一、谱减的基本原…

Chapter 7:Statistical-Model-Based Methods

作者&#xff1a;桂。 时间&#xff1a;2017-05-25 10:14:21 主要是《Speech enhancement: theory and practice》的读书笔记&#xff0c;全部内容可以点击这里。 书中代码&#xff1a;http://pan.baidu.com/s/1hsj4Wlu&#xff0c;提取密码&#xff1a;9dmi 前言 最近学习有一…

使用握手信号实现跨时钟域数据传输

使用握手信号实现跨时钟域数据传输 题目描述 分别编写一个数据发送模块和一个数据接收模块,模块的时钟信号分别为clk_a,clk_b。两个时钟的频率不相同。数据发送模块循环发送0-7,在每个数据传输完成之后,间隔5个时钟,发送下一个数据。请在两个模块之间添加必要的握手信号,…

如何学好C++

作者&#xff1a;陈皓 出处&#xff1a;http://goo.gl/43XkL 昨天写了一篇如何学好C语言&#xff0c;就有人回复问我如何学好C&#xff0c;所以&#xff0c;我把我个人的一些学习经验写在这里&#xff0c;希望对大家有用。首先&#xff0c;因为如何学好C语言中谈到了算法和系统…

单边谱 → 双边谱

今天群里朋友问到一个问题&#xff1a;这个处理是啥意思&#xff1f; 记录一下。 思路&#xff1a; x为原信号&#xff0c;y为处理后的信号。其中大写为频域信号&#xff0c;小写为时域信号。 考虑到余弦对应的傅里叶变换&#xff0c;以及正弦对应的傅里叶变换&#xff0c;可以…

音频变调技术

今天看到群里有人讨论这个问题&#xff0c;记录一下。 主要内容转自&#xff1a;http://www.cnblogs.com/welen/p/3782896.html 变调和变速原理 自然语音的产生可以简化为图2-1模型&#xff0c;激励源出来的声门波信号与声道模型进行卷积&#xff0c;最后通过嘴唇辐射模型产生语…

图像处理一些常用的网站

一、研究群体 http://www-2.cs.cmu.edu/~cil/vision.html 这是卡奈基梅隆大学的计算机视觉研究组的主页&#xff0c;上面提供很全的资料&#xff0c;从发表文章的下载到演示程序、测试图像、常用链接、相关软硬件&#xff0c;甚至还有一个搜索引擎。 http://www.cmis.csiro.au…

SystemVerilog笔记

SystemVerilog笔记 使用&#xff08;$isunknown&#xff09;操作符&#xff0c;可以在表达式的任意位出现X或Z时返回1。$size函数返回数组的宽度关联数组switch&#xff0c;以实现从字符串到数字的映射。函数exists()来检查元素是否存在。方法unique返回的是在数组中具有唯一值…

收入和贷款有什么关系?

说到贷款&#xff0c;收入是至关重要的一环&#xff0c;收入在贷款审核过程中有着举足轻重的作用。那么具体来说&#xff0c;贷款到底和收入有什么关系呢&#xff1f;贷款审核考察借款人的收入目的是为了核实借款人的偿还能力&#xff0c;因此贷款机构不仅要考核借款人的收入&a…

银行系普惠和小贷系普惠,哪个贷款更靠谱?

2017年5月26日银监会发布了《大中型商业银行设立普惠金融事业部实施方案》&#xff0c;《实施方案》明确了大中型商业银行设立普惠金融事业部的总体目标&#xff0c;通过建立适应普惠金融服务需要的事业部管理体制&#xff0c;构建科学的治理机制和组织架构&#xff0c;健全专业…

并串 转换

并串 转换 题目描述 设计一个模块进行并串转换,要求每四位d输为转到一位dout输出,输出valid_in表示此时的输入有效 输入描述: clk为时钟 rst为低电平复位 d 信号输入 输出描述: dout 信号输出 valid_in 表示输入有效 题目解读 串并转换操作是非常灵活的操作,核心思想就…

H.264码流解析 一个SPS的nalu及获取视频的分辨率

00 00 00 01 67 42 00 28 E9 00 A0 0B 77 FE 00 02 00 03 C4 80 00 00 03 00 80 00 00 1A 4D 88 10 94 00 00 00 01 00 00 00 01为NALu头&#xff0c;‍其余码流由十六进制转为二进制 67 0110 0111 42 0100 0010 00 0000 0000 28 0010 1000 E9 1110 1001 00 0000 0000 A…

小额贷款利息违法吗?

我们经常听到很多朋友说&#xff0c;小额贷款利息高&#xff0c;认为小额贷款的利息是高利贷&#xff0c;不合法。那到底小额贷款算不算高利贷呢&#xff0c;是不是合法的呢&#xff1f;在解释这个问题之前&#xff0c;我们先来看下国家法律对合法利息的定义。《最高人民法院关…

什么样的征信才算是好的?

有过贷款的朋友都知道征信报告对贷款有很大的影响&#xff0c;有时候贷款的前期工作都准备好了&#xff0c;突然发现征信有问题&#xff0c;结果贷款就黄了。可见征信报告对贷款的作用还是很大的&#xff0c;贷款机构之所以会看重征信记录&#xff0c;因为它是一个人过去信用的…

时钟 切换

时钟 切换 题目描述 存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频,现在要设计一个切换电路,sel选择时候进行切换,要求没有毛刺。 信号示意图 题目解读 通过在每个时钟源的选择路径中插入一个负边沿触发的D触发器,可以确保时钟在高电平时,输出保持不变。 通…

比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能

http://www.leexiang.com/the-performance-of-matrix-multiplication-among-openblas-intel-mkl-and-eigen 分布式机器学习 signa http://www.comp.nus.edu.sg/~dbsystem/singa/install/2015/01/20/install/