Difference between revisions of "Use perf to find hot spots in your code"

From odroid US
Jump to: navigation, search
(Created page with " This section is mostly a placeholder... === Introduction === perf is closely coupled to the kernel. It needs to be rebuilt for each kernel version. This may be related t...")
 
(Get pre-built perf)
Line 13: Line 13:
 
tar -xvzf perf-odroid-3.0.75-01.tgz  
 
tar -xvzf perf-odroid-3.0.75-01.tgz  
 
[/pre]
 
[/pre]
 +
 +
You can pick up ready-to-use kernel, uInitrd and a set of kernel modules in the same directory: http://odroid.us/odroid/users/osterluk/perf
  
 
=== Build an instrumented kernel ===
 
=== Build an instrumented kernel ===

Revision as of 23:21, 11 May 2013


This section is mostly a placeholder...

Introduction

perf is closely coupled to the kernel. It needs to be rebuilt for each kernel version. This may be related to versionmagic, or maybe it is just for safety...

Get pre-built perf

[pre] cd / wget http://odroid.us/odroid/users/osterluk/perf/perf-odroid-3.0.75-01.tgz tar -xvzf perf-odroid-3.0.75-01.tgz [/pre]

You can pick up ready-to-use kernel, uInitrd and a set of kernel modules in the same directory: http://odroid.us/odroid/users/osterluk/perf

Build an instrumented kernel

If you try to run on a kernel without performance counters enabled, you will see something like this:

root@odroidu2:~# perf top
The sys_perf_event_open() syscall returned with 38 (Function not implemented).  /bin/dmesg may provide additional information.
No CONFIG_PERF_EVENTS=y kernel support configured?
root@odroidu2:~# 

So you need to turn some perf-related configurations on (I don't know why some other configs changed)

--- arch/arm/configs/odroidu2_ubuntu_mali_defconfig	2013-05-10 19:56:22.315162350 -0700
+++ arch/arm/configs/odroidu2_ubuntu_mali_perf_defconfig	2013-05-11 20:15:17.764058945 -0700
@@ -1,6 +1,6 @@
 #
 # Automatically generated make config: don't edit
-# Linux/arm 3.0.62-odroidu2 Kernel Configuration
+# Linux/arm 3.0.75 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_HAVE_PWM=y
@@ -28,6 +28,7 @@
 CONFIG_ARM_PATCH_PHYS_VIRT=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 CONFIG_HAVE_IRQ_WORK=y
+CONFIG_IRQ_WORK=y
 
 #
 # General setup
@@ -93,6 +94,7 @@
 CONFIG_CGROUP_CPUACCT=y
 CONFIG_RESOURCE_COUNTERS=y
 # CONFIG_CGROUP_MEM_RES_CTLR is not set
+CONFIG_CGROUP_PERF=y
 CONFIG_CGROUP_SCHED=y
 CONFIG_FAIR_GROUP_SCHED=y
 CONFIG_RT_GROUP_SCHED=y
@@ -143,8 +145,9 @@
 #
 # Kernel Performance Events And Counters
 #
-# CONFIG_PERF_EVENTS is not set
+CONFIG_PERF_EVENTS=y
 # CONFIG_PERF_COUNTERS is not set
+# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
 CONFIG_VM_EVENT_COUNTERS=y
 # CONFIG_SLUB_DEBUG is not set
 CONFIG_COMPAT_BRK=y
@@ -162,6 +165,7 @@
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_CLK=y
 CONFIG_HAVE_DMA_API_DEBUG=y
+CONFIG_HAVE_HW_BREAKPOINT=y
 
 #
 # GCOV-based kernel profiling
@@ -298,11 +302,6 @@
 CONFIG_PLAT_SAMSUNG=y
 
 #
-# Base Address for SFR mapping
-#
-CONFIG_S3C_ADDR_BASE=0xFC000000
-
-#
 # Boot options
 #
 # CONFIG_S3C_BOOT_WATCHDOG is not set
@@ -366,8 +365,7 @@
 # CONFIG_ARCH_EXYNOS5 is not set
 CONFIG_CPU_EXYNOS4212=y
 CONFIG_CPU_EXYNOS4412=y
-# CONFIG_S5PV310_HI_ARMCLK_THAN_1_2GHZ is not set
-# CONFIG_EXYNOS_CONTENT_PATH_PROTECTION is not set
+# CONFIG_EXYNOS4_CONTENT_PATH_PROTECTION is not set
 CONFIG_EXYNOS4_PM=y
 CONFIG_EXYNOS4_CPUIDLE=y
 # CONFIG_EXYNOS4_LOWPWR_IDLE is not set
@@ -389,8 +387,8 @@
 CONFIG_EXYNOS4_SETUP_USB_PHY=y
 CONFIG_EXYNOS4_SETUP_FB_S5P=y
 CONFIG_EXYNOS4_SETUP_TVOUT=y
-CONFIG_EXYNOS4_SETUP_THERMAL=y
-# CONFIG_EXYNOS_SETUP_THERMAL is not set
+CONFIG_EXYNOS_DEV_TMU=y
+# CONFIG_EXYNOS_THERMAL is not set
 CONFIG_EXYNOS4_SETUP_JPEG=y
 CONFIG_EXYNOS4_ENABLE_CLOCK_DOWN=y
 CONFIG_EXYNOS4_CPUFREQ=y
@@ -400,7 +398,6 @@
 #
 CONFIG_EXYNOS_PM_HOTPLUG=y
 # CONFIG_STAND_ALONE_POLICY is not set
-# CONFIG_LEGACY_HOTPLUG_POLICY is not set
 # CONFIG_WITH_DVFS_POLICY is not set
 CONFIG_DVFS_NR_RUNNING_POLICY=y
 # CONFIG_NR_RUNNING_POLICY is not set
@@ -410,15 +407,6 @@
 #
 # CONFIG_BUSFREQ is not set
 # CONFIG_BUSFREQ_OPP is not set
-# CONFIG_DISPFREQ_OPP is not set
-# CONFIG_DEVFREQ_BUS is not set
-# CONFIG_BUSFREQ_DEBUG is not set
-# CONFIG_BUSFREQ_L2_160M is not set
-# CONFIG_SEC_THERMISTOR is not set
-# CONFIG_SEC_SUBTHERMISTOR is not set
-# CONFIG_EXYNOS_SYSREG_PM is not set
-# CONFIG_ANDROID_WIP is not set
-# CONFIG_COMPACTION_RETRY is not set
 
 #
 # EXYNOS4 Machines
@@ -428,10 +416,6 @@
 # CONFIG_MACH_ARMLEX4210 is not set
 # CONFIG_MACH_UNIVERSAL_C210 is not set
 # CONFIG_MACH_NURI is not set
-# CONFIG_MACH_U1_NA_SPR is not set
-# CONFIG_MACH_U1_NA_USCC is not set
-# CONFIG_MACH_U1 is not set
-# CONFIG_MACH_PX is not set
 # CONFIG_MACH_SMDK4X12 is not set
 CONFIG_MACH_ODROID_4X12=y
 # CONFIG_BOARD_ODROID_Q is not set
@@ -567,6 +551,7 @@
 CONFIG_ARCH_SKIP_SECONDARY_CALIBRATE=y
 CONFIG_HIGHMEM=y
 # CONFIG_HIGHPTE is not set
+CONFIG_HW_PERF_EVENTS=y
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
 CONFIG_FLATMEM=y
@@ -1995,14 +1980,11 @@
 CONFIG_VIDEO_FIMC_DMA_AUTO=y
 # CONFIG_VIDEO_FIMC_FIFO is not set
 # CONFIG_VIDEO_TVOUT is not set
-CONFIG_LSI_HDMI_AUDIO_CH_EVENT=y
 CONFIG_VIDEO_FIMG2D=y
 # CONFIG_VIDEO_FIMG2D_DEBUG is not set
 CONFIG_VIDEO_FIMG2D4X=y
 # CONFIG_VIDEO_FIMG2D4X_DEBUG is not set
 CONFIG_VIDEO_JPEG_V2X=y
-# CONFIG_JPEG_V2_1 is not set
-CONFIG_JPEG_V2_2=y
 
 #
 # Reserved memory configurations
@@ -2014,6 +1996,10 @@
 CONFIG_VIDEO_SAMSUNG_MEMSIZE_JPEG=40960
 # CONFIG_VIDEO_MALI_R2P4 is not set
 CONFIG_VIDEO_MALI_R3P2=y
+# CONFIG_MALI_OVERCLOCK_533 is not set
+# CONFIG_MALI_OVERCLOCK_640 is not set
+# CONFIG_MALI_OVERCLOCK_733 is not set
+# CONFIG_MALI_OVERCLOCK_800 is not set
 CONFIG_UMP=y
 CONFIG_UMP_DEBUG=y
 CONFIG_MALI400=y
@@ -2034,6 +2020,7 @@
 # CONFIG_VIDEO_EXYNOS_HDMI_CEC is not set
 CONFIG_VIDEO_SAMSUNG_MEMSIZE_TV=16200
 # CONFIG_VIDEO_EXYNOS_MIXER_DEBUG is not set
+# CONFIG_VIDEO_EXYNOS_24_FORCE is not set
 # CONFIG_VIDEO_EXYNOS_ROTATOR is not set
 # CONFIG_VIDEO_EXYNOS_FIMC_IS is not set
 CONFIG_MEDIA_EXYNOS=y
@@ -2961,7 +2948,7 @@
 # CONFIG_DEBUG_LL is not set
 # CONFIG_OC_ETM is not set
 CONFIG_DEBUG_S3C_UART=1
-# CONFIG_CACHE_PERF is not set
+CONFIG_CACHE_PERF=y
 
 #
 # Security options
@@ -3126,5 +3113,3 @@
 CONFIG_CPU_RMAP=y
 CONFIG_NLATTR=y
 CONFIG_AVERAGE=y
-CONFIG_EXYNOS_DEV_TMU=y
-# CONFIG_TMU_DEBUG is not set