如何使用oprofile对软件做profiling
你好!
商业软件就是指作为商业用途的软件(说白了就是你花钱买的)
一般来说,除了免费软件以外都是商业软件。
商业软件是指那些需要付费才能使用的软件。这其中又分为通用软件和专用软件。如Windows、WPS那样的软件属于通用软件,是供普通计算机用户使用的。通用软件在软件中的地位类似于小汽车在机器设备中的地位,小汽车虽然在整个机器设备的总产值中所占不多,但使用广泛、影响巨大。 专用软件是指专门为了完成某项工作而编写的软件,类似于那些专门的机器设备,比如为某银行编写的数据库软件,为某工厂编写的生产控制软件。专用软件是软件业的重要组成部分。 商业软件完全是软件版权保护的产物。如果没有软件的版权保护,就不会发展出我们今天所见到的庞大的软件业。
1。photoshop
制图的软件,个人觉得商业用途最好的就是摄影之类的。也就是说它在图片处理上是非常出色的!
2.3d max
之所以第二个说它,是因为它也是关于图片处理的。它和ps(photoshop简称ps)都具有图片处理的能力,都能绘图,但是2个软件侧重点不同。
ps在修改图片上要强,3dmax在绘图上要强
ps主要用于网页制作图片、摄影照相处理等用途
3dmax主要用于工程绘图等
3.flash
动画制作软件。主要是2维动画的制作。比如简单的mtv以及网页广告等
4.dw(Dreamweaver简称dw)
dw就是一款非常出色的网页制作软件,它对于初学者非常容易上手。
集成了静态动态网页、代码提示及css。html等多种语言的支持。
5。数据库
数据库说的有点笼统。就跟你问通信一样。通信可能是移动或者联通或者电信的一种,或者说是电话、远程会议、多媒体传输的通信、
数据库通俗的来讲就是好多数据的集合,一个数据的仓库容器。
数据库其实分类很多的。就跟手机分类有nokia啊,三星啊苹果。
数据库主要有sql server, my sql ,阿帕奇等等,小型的又access等
包括excl其实也能组成数据库
以上全部个人理解
一. 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 7.8356 libjpeg.so.9.0.0 ycc_rgb_convert
1964 7.5289 libjpeg.so.9.0.0 jpeg_idct_16x16
1918 7.3526 libjpeg.so.9.0.0 decode_mcu
1570 6.0186 libjpeg.so.9.0.0 jpeg_idct_islow
1567 6.0071 djpeg finish_output_bmp
528 2.0241 libjpeg.so.9.0.0 jpeg_fill_bit_buffer
397 1.5219 djpeg put_pixel_rows
73 0.2798 vmlinux __copy_from_user
70 0.2683 libjpeg.so.9.0.0 decompress_onepass
65 0.2492 libjpeg.so.9.0.0 jpeg_huff_decode
56 0.2147 vmlinux get_page_from_freelist
50 0.1917 vmlinux __memzero
45 0.1725 vmlinux __copy_to_user_std
41 0.1572 vmlinux _raw_spin_unlock_irqrestore
15 0.0575 vmlinux do_page_fault
14 0.0537 vmlinux __generic_file_aio_write
13 0.0498 vmlinux _raw_spin_unlock_irq
11 0.0422 vmlinux free_hot_cold_page
11 0.0422 vmlinux vector_swi
10 0.0383 vmlinux handle_pte_fault
从结果中我们可以看到libjpeg.so.9.0.0, djpeg和vmlinux中的symbol name已经可以被正确的解析出来了,和gprof的结果基本一致。相比gprof,oprofile可以在更大的范围内完成profiling。
我们还可以用以下命令观察源代码中特定行的执行时间,进一步缩小优化的范围,达到事半功倍的效果。
opannotate --source ./djpeg > opannotate.txt
四. 小结
通过实验,我们可以看到Oprofile可以提供更丰富的profiling结果,可以更好的帮助开发者找到瓶颈,通过有针对性的优化提升软件 性能;profiling的结果也可以帮助开发者将性能瓶颈代码通过Xilinx HLS工具用硬件加速器来实现,从而为进一步提升整个嵌入式系统的性能打开了大门。
safety i\/o带profisafe么
hort, thin man, well past middle age, appro
请教F系列模块
故障安全模块主要通过内部的双通道结构区别于标准ET200模块。两个集成处理器相互监控,并自动检测输入或输出线路。在发生故障时将F模块转换到安全状态。F-CPU与故障安全模块通过PROFIsafe安全现场总线进行通讯。故障安全电源模块用于电位组件的负载电压供电和标准输出模块负载电压的安全切断。故障安全数字输入模块...
勒夫的夫人是谁
Das Ehepaar Löw ist kinderlos und wohnt in Freiburg. „Ich bin mittlerweile seit mehr als zehn Jahren Trainer – und da ist die Situation klar. Das ist mein Beruf, den mache ich mit viel Begeisterung“, erklärte der Ex-Profi. „Mein Frau weiß...
度泪夏枯: 打开软件界面如图,选择P进行元器件的摆放.如何使用Proteus做单片机仿真 在这里可以通过元器件的名字进行检索.电容电阻等元器件只需要其相应的英文缩写即可.如何使用Proteus做单片机仿真89C52是单片机初学者的不错选择,在检索...
泸州市13058023404: 怎么用手机制作U盘启动? - ?
度泪夏枯: 1、首先需要一个oppo手机,然后百度搜索“DriveDroid软件”如下图. 2、找到搜索到的Drive Droid下载地址,并且点击,选择普通安装,如下图. 3、安装好,需要打开此应用,如下图. 4、用数据线连接手机与电脑,然后点击打开应...
泸州市13058023404: 如何写一个可选择操作的批处理! - ?
度泪夏枯: @echo offset /p num=请输入数字if %num% equ 1 reg add hkcu\software\microsoft\windows\currentversion\policies\system /v disableregistrytool...
泸州市13058023404: C写的程序如何调用P处理 - ?
度泪夏枯: 可以用system()函数操作系统命令,包括批处理指令,比如:system("c:\\a.bat");/*运行a.bat批处理文件*/ system()函数需要包含stdlib.h头文件
泸州市13058023404: 详解:如何用WinRAR的自解压功能制作安装、破解包 - ?
度泪夏枯: ·软件解密包——软件解密需要 将很多文件拷贝到安装目录覆盖原文件,烦琐的操作非常适合制作自动解密包 ·自动演示包——用 PowerPoint 打包功能会生成众多文件,做成自动演示包后,方便文稿的演示与文件的管理 一、准备文件 首先将...
泸州市13058023404: word怎么使用宏一键排版重复操作 - ?
度泪夏枯: 选择“工具”→宏→录制宏,输入名字,可以把定义的快捷键也输入,然后一步步执行你常做的操作,执行完后关闭宏.打开你的另一个文件,选择“工具”→宏→宏,选择你刚才存的宏(名字...
泸州市13058023404: 如何制作usb - cdrom启动盘 - ?
度泪夏枯: 重要说明:在操作前一定要详细阅读本文,否则可能导致制作失败,同时U盘报废(吓唬你的,本文有解决办法,但是仍然具有危险性,你需要为自己的操作及后果负责) 好处:1. 安全:处理后,U盘上的光盘所在区域完全不可写,分区、病毒...
泸州市13058023404: linux下如何查看某个软件 是否安装?安装路径在哪 - ?
度泪夏枯: 如果是桌面软件的话一般可以从全局菜单等一些菜单界面中找到相应的启动项 如果正常启动则表示安装 或者可以使用在命令行输入说软件的名称(有时可能软件名称与程序/命令名称并不相同) 如果可以执行则表示安装 或者使用相应发行版所提...
泸州市13058023404: matlab p文件怎么打开 或者 运行 - ?
度泪夏枯: 1、如下图所示,打开软件后点击File后,会出现文件编辑窗口2、在文件编辑窗口输入代码(以plot函数),如下图所示: 3、检查代码,确保没有错误后点击窗口中运行(Run)按钮,运行程序(如下图红色箭头所示按钮): 4、查看运行结果,由于利用plot函数绘制曲线,所以运行后出现如下红色箭头所指的二次曲线: