Skip to main content
  • Products
  • Evaluate our Software
  • Downloads
  • Free Utilities
  • Purchase
  • Support
  • About Us
  • Blog
  • Forum
  • Search
    • Contact Us
    • Forum
    • Wiki
    • Web Shop
    • Newsletter
    • RSS
  •   Jobs
  •   Videos
  •   Blog
  •   Sustainability
  • J-Trace streaming trace probes
  • Live Code Profiling
  • Technology
  • Accessories
  • Tools
  • Models
SEGGER - Category Icon Debug Tools

Live Code Profiling

With the J-Trace PRO streaming trace capabilities, trace data is analyzed in real time while the data is transferred from the target system to the host computer. The analyzed data contains information about which instructions have been executed on the target, whether conditional instructions have taken both paths, and how often each instruction has been executed. With the captured trace data, a debugger can analyze an application to construct a code profile and identify "hot spots" for potential optimization.

  1. 1.What is code profiling?
  2. 2.Code instrumentation
  3. 3.PC sampling
  4. 4.Code profiling with J-Trace PRO
  5. 5.Exporting the code profile information

What is code profiling?

Code profiling is a form of measuring the execution time and the execution count of functions, blocks or instructions. It can be used as a metric for the complexity of a system and can highlight where computing time is spent. This provides a great insight into the running system and is essential when identifying code that is executed frequently, potentially placing a high load onto a system. The code profiling information can help to easier optimize a system, as it accurately shows which blocks take the most time and are worth optimizing.

There are two methods to gather code profiling information: code instrumentation and instruction pointer (PC) sampling.

Code instrumentation

With code instrumentation the target application is modified by adding special recording functions at code locations which are of interest, such as on function call and return. The code profiler can then read and analyze the recorded data. SystemView is one of those instrumenting profilers, especially designed for embedded systems.

Instrumenting profilers can measure the time spent in each function and nested function calls with high accuracy. But any instrumentation impacts the runtime behavior of the target system, as additional code, so additional instructions, needs to be executed. Code instrumentation may not be suitable for systems with hard-real-time requirements.

PC sampling

PC sampling in contrast does not require any code modification. Even better, as the PC sampling facilities are part of the core, they can monitor it without any intrusive effect on its execution.

On Arm Cortex devices PC sampling can be done with either of two core modules: the DWT unit or the ETM.

With the DWT unit, the PC can be sampled at a configurable interval and its value can be sent to the debug probe on the SWO pin. PC sampling with the DWT unit can provide a rough overview on the system execution to show bottlenecks and high-load routines. But as the PC can only be sampled with a low frequency compared to the CPU speed, the execution count and timing information can only be approximated and short routines might go completely undetected.

With the ETM any step that the core does is detected. It records instruction execution, non-execution of conditional instructions and interrupts, and sends it out on the trace pins which the trace probe can connect to. With the instruction trace data a profiler or debugger application can exactly measure the execution time of functions and get a call graph of each function call, the same as code instrumentation.

Code profiling with J-Trace PRO

As J-Trace PRO connects to the trace pins on the debug interface, it gets the ETM instruction trace data. And with its streaming trace capability, this data is immediately sent to the host. Thus it is possible to get the most accurate code profiling information.

Code profiling with J-Trace PRO can be done without any source modification and is even possible on production code.

The analyzer, which is part of the J-Trace interface to a debugger, decodes the trace data and stores the execution count of each instruction of the system. A debugger such as Ozone can map the execution counts to the high-level source code and show the number of execution for each function, block, or source line. The code profiling data can be updated in real time, while the target system is running. This allows identifying time-consuming or frequently called routines which may help to selectively optimize the system.

CodeProfiling
Code Profiling Counters

Exporting the code profile information

With Ozone, the code profiling information can be exported into a text file to be stored with the system's documentation for QA reports or certification. Code profile reports can be generated for the whole application, for selected modules (source files), or for selected functions only. To create a report, right-click in the Code Profile Window and select export.

An example report from the J-Trace PRO Cortex-M example project is shown here:

Create Report
   

Ozone Code Profile Report

Project:       SEGGER_CortexM_Trace_Reference_Board.jdebug
Application:   SEGGER Cortex-M Trace Reference Board.elf


Code Profile Summary

Module/Function   |   Run Count   |   Load             
------------------+---------------+----------------
BSP.c             |               |                
  BSP_Init        |            1  |           230  
  BSP_SetLED      |            1  |            26  
  BSP_ToggleLED   |          944  |        40 119  
TraceDemo.c       |               |                
  _TestFunc0      |        9 450  |       151 196  
  _TestFunc0a     |        9 446  |       103 906  
  _TestFunc0b     |            4  |            36  
  _TestFunc1      |        9 450  |       151 188  
  _TestFunc2      |        9 450  |   850 583 858  
  main            |            1  |       195 593  
------------------+---------------+----------------
  Total           |       38 747  |   851 226 152  

More Information

Purchase

  • Pricing

Technology

  • Streaming trace
  • Live Code Profiling
  • Live Code Coverage
  • Setting up Trace
  • Tested Devices

Accessories

  • Adapters
  • Isolators
  • Trace Reference Boards

Tools

  • SystemView
  • Ozone

Models

  • Overview
  • J-Trace PRO Cortex
  • J-Trace PRO Cortex-M
  • J-Trace PRO RISC-V
  • Related products

About us

  • The Company
  • Partners
  • Job Offers
  • Media
  • Contact us

Support

  • Technical Support
  • Blog
  • Forum
  • Wiki

Downloads

  • Application Notes
  • Embedded Studio
  • embOS
  • emCompress
  • emCrypt
  • emFile
  • emLib
  • emLoad
  • emModbus
  • emNet
  • emPower
  • emSecure
  • emSSH
  • emSSL
  • emUSB-Device
  • emUSB-Host
  • emVNC
  • emWin
  • Flasher
  • Free Utilities
  • IoT
  • J-Link / J-Trace
  • Linux Studio
  • SystemView
  • CE / REACH

Social Media

Headquarters

SEGGER Microcontroller GmbH

Ecolab-Allee 5
40789 Monheim am Rhein, Germany
info@segger.com
Tel.: +49-2173-99312-0
Fax: +49-2173-99312-28

Locations

USA: SEGGER Microcontroller Systems LLC

Boston area
101 Suffolk Lane
Gardner, MA 01440, USA
us-east@segger.com
Tel.: +1-978-874-0299
Fax: +1-978-874-0599

Silicon Valley
Milpitas, CA 95035, USA
us-west@segger.com
Tel.: +1-408-767-4068

China: SEGGER Microcontroller China Co., Ltd.

Room 218, Block A, Dahongqiaoguoji
No. 133 Xiulian Road
Minhang District, Shanghai 201199, China
china@segger.com
Tel.: +86-133-619-907-60

ISO 9001 certified

ISO 9001

30+ years of experience

First-class embedded software tools since 1992
  • Imprint
  • Disclaimer
  • Privacy Policy

© 2023 SEGGER - All rights reserved.