http://code.google.com/p/0xdroid/wiki/Oprofile Oprofile
how-to to oprofile 0xdroid
Profiling 0xdroidThis page describes how to do system-wide profiling via oprofile in 0xdroid. Original Android supports oprofile. However it only supports ARMv6. Our reference hardware is Beagleboard, which is powered by TI OMAP353x SoC (ARMv7 architecture). Therefore 0xlab developers did some hacks around the files inside directory external/oprofile and update new prebuilt 'oprofile' utilities in order to let oprofile support ARMv7. The prebuilt files change nothing but using the same architecture table in external/oprofile. Thus, you will need to use the prebuilt 'opreport' to analysis the logs. The following is a mini how-to of using it. Kernel setting0xdroid kernel does not enable oprofile flag by default, and you need to turn it on first. You can refer to wiki build Linux kernel from scratch and build the custom kernel. To enable OPROFILE, you will need to set the following flags: + CONFIG_OPROFILE_ARMV7=y + CONFIG_OPROFILE=y + CONFIG_PROFILING=y + CONFIG_HAVE_OPROFILE=y + CONFIG_TRACEPOINTS=y Run on Beagleboard. You can use 'opcontrol' to trigger start/stop profiling on Beagleboard. You can also choose logging kernel symbols or not. If you want to log kernel symbols, you need to put the vmlinux into beagleboard. To be easily deploy, using USB mass storage is a good idea. 0xdroid should be able to mount USB disk automatically on directory /sdcard. If not, do the following commands: /system/bin/mount -t vfat /dev/block/sda1 /sdcard setprop EXTERNAL_STORAGE_STATE mounted am broadcast -a android.intent.action.MEDIA_MOUNTED —ez read-only false -d file:///sdcard Before starting profiling, you need to setup the oprofile. Please refer to oprofile manual in advance. Here are the reference instructions to set up oprofile: opcontrol —setup —event=CPU_CYCLES:15000:::1:1 —vmlinux=/sdcard/vmlinux —kernel-range=0xc0008000,0xcfffffff echo 16 > /dev/oprofile/backtrace_depth opcontrol —start Then do activity you want to be profiled. After finish do the following command to stop profiling. opcontrol —stop AnalysisAfter profiling, you will need to move all the data to host to do analysis. Therefore you can choose use usb ethernet to do such task. Connecting beagleboard On device:
Using the script external/oprofile/opimport_pull to pull down samples and analysis them. cd {Where you put 0xdroid} . build/envsetup.sh setpaths export OPROFILE_EVENTS_DIR=${PWD}/prebuilt/linux-x86/oprofile/ cd external/oprofile ./opimport_pull /tmp/beagle-cupcake-oprofile Then the script will pull down samples from beagleboard and do the symbol analysis once for you. If you want to dig out more information, you can use: cp ${Where you build your kernel}/vmlinux ${OUT}/symbols ${OPROFILE_EVENTS_DIR}/bin/opreport —session-dir=/tmp/beagle-cupcake-oprofile -p ${OUT}/symbols -d Enjoy it! AppendixYou can check the script of opimport_pull and do whatever you want, even add graphvis supports. You can also move out the /data/oprofile to other SD card and so that you can not using opimport_pull. |