Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here



Subscribe to updates I use IntelSEAPI

Statistics on IntelSEAPI

Number of watchers on Github 135
Number of open issues 7
Average time to close an issue 3 days
Main language C
Average time to merge a PR 2 days
Open pull requests 0+
Closed pull requests 0+
Last commit over 2 years ago
Repo Created over 4 years ago
Repo Last Updated over 2 years ago
Size 3.26 MB
Organization / Authorintel
Latest Release17.01.28
Page Updated
Do you use IntelSEAPI? Leave a review!
View open issues (7)
View IntelSEAPI activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating IntelSEAPI for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

Wellcome to Intel Single Event API (Intel SEAPI)!

Before reading further please visit wiki to see examples of visualization. https://github.com/01org/IntelSEAPI/wiki

Intel SEAPI is the translator of itt_notify calls into several OS specific and third party tracing formats. You can use it as memory/performance/whatever profiler.

itt_notify is open-source cross-platform plain C library for instrumentation of C/C++ code with tasks/markers/counters/etc... Some documentation can be found here: https://software.intel.com/en-us/node/544201 For usage examples please see https://github.com/01org/IntelSEAPI/blob/master/InstrumentationExample.cpp and https://github.com/01org/IntelSEAPI/blob/master/memory.cpp of Intel SEAPI package

After your code is instrumented with itt, to load up the library follow these steps: On Windows and Linux: Set environment variable INTEL_LIBITTNOTIFY32/INTEL_LIBITTNOTIFY64 to the full path to the IntelSEAPI[32/64].[dll/so] On OSX: Set environment variable DYLD_INSERT_LIBRARIES to the full path to the libIntelSEAPI.dylib On Android: Write path to libIntelSEAPI[32/64].so in one of these two files: System wide: /data/local/tmp/com.intel.itt.collector_lib_[32/64] Per package: /data/data//com.intel.itt.collector_lib_[32/64] Write save path to file: /data/local/tmp/com.intel.sea.save_to OR you can use sea_runtool.py, see examples in test_.

Bulding: Make sure you have cmake (https://cmake.org) in PATH All platforms except Android: >> python buildall.py -i this will produce installer on Windows requires Visual Studio 2013 and NSIS (http://nsis.sourceforge.net) installed for Yocto just run this script in the Yocto build environment Android: requires ANDROID_NDK to be set in environment to the Android NDK path >> python buildall.py -a this will produce .so to be put into your application folder manually on windows requires Ninja (https://github.com/ninja-build/ninja/releases) to be in PATH

Open Source Intel SEAPI currently supports these formats:

  • Windows Performance Analyzer - Windows (ETW): https://msdn.microsoft.com/en-us/library/windows/hardware/hh448170.aspx Cons: Only immediate tasks, markers and counters are supported (currently). Pros: correlation with all system metrics (more than 6 hundred providers) To enable: Use wprui.exe from 'Windows Kits\10\Windows Performance Toolkit' (if it's installed just: Win+R wprui). Where add this file as collector: IntelSEAPI\ETW\IntelSEAPI.wprp After collection it will propose to open with WPA Inside WPA apply IntelSEAPI profile using menu Profiles->Apply->Browse, select IntelSEAPI\ETW\IntelSEAPI.wpaProfile Kernel Mode Driver: Currenlty only static linkage is supported Include driver/sea_itt_driver.c from IntelSEAPI sources. Call __itt_event_start(0) in DriverEntry to init itt, AND __itt_event_end(0) in UnloadDriver to clean up everything.

  • Systrace - Android: http://developer.android.com/tools/help/systrace.html Cons: only immediate tasks and counters are supported (currently). Pros: corellation with all system metric systrace can collect on the phone. To enable: use systrace from AndroidStudio/Eclipse.

  • Json google trace format - All platforms: https://www.chromium.org/developers/how-tos/trace-event-profiling-tool Cons: no concerns, excellent viewer Pros: any platform; Corellation with ftrace (Android, Yocto, Linux), ETW (Windows). Supported: object state tracing, counters, tasks (sync and async) - immediate and with clock domains... To enable set environment variable INTEL_SEA_SAVE_TO=/ Use runtool to transform the SEA directory into json format with next command: python IntelSEAPI\bin\sea_runtool.py -o -f gt -i Use chrome://tracing/ to view trace .json

  • DTrace - for MAC OS X XCode Instruments: https://developer.apple.com/library/watchos/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html Cons: Only immediate tasks are supported (currently), no support of iOS. Pros: correlation with everything XCode Instruments can collect To enable set DYLD_INSERT_LIBRARIES in Instruments target settings

  • QT Creator Profiler - cross platform: http://doc.qt.io/qtcreator/creator-qml-performance-monitor.html Cons: Only tasks are supported Pros: Butterfly view, file&line navigation To enable set environment variable INTEL_SEA_SAVE_TO=/ Use runtool to transform the SEA directory into json format with next command: python IntelSEAPI\bin\sea_runtool.py -o -f gt -i In QT Creator open Analyze->QML Profiler Options->Load QML Trace

  • Trace Compass - cross platform: https://projects.eclipse.org/projects/tools.tracecompass Initial implementation, thanks for Adrian Negreanu contribution To enable set environment variable INTEL_SEA_SAVE_TO=/ Use runtool to transform the SEA directory into .btf format with next command: python IntelSEAPI\bin\sea_runtool.py -o -f btf -i

  • GraphViz - cross platform: http://www.graphviz.org Initial implementation To enable set environment variable INTEL_SEA_SAVE_TO=/ Use runtool to transform the SEA directory into .gv format with next command: python IntelSEAPI\bin\sea_runtool.py -o -f gv -i

Remote access (on Yocto example, from Windows): IntelSEAPI\bin\sea_runtool.py -f gv gt btf qt -b ..\build_yocto\bin -o c:\temp\remote --ssh user@W.X.Y.Z -p password ! /opt/SEA/TestIntelSEAPI64 Such call remotely runs /opt/SEA/TestIntelSEAPI64 application on Yocto device, copies result to c:\temp\remote folder and transforms it to GraphViz, chrome://tracing, BTF, QTCreator On Windows plink and pscp (from Putty package) are expected to be in PATH

Contribution is highly appreciated.

With respect, Alexander Raud. email: alexander.a.raud@intel.com

IntelSEAPI list of languages used
IntelSEAPI latest release notes
17.01.28 17.01.28

Android GPUs support is extended: +Adreno, +PowerVR For i915 - event set is extended

Linux: perf stacks collection OSX: dtrace stacks collection Tasks from samples reconstruction

JIT profiling support (nodejs) Android tracing from host

SteamVR support ARM support Importers API

16.06.18 16.06.18

OSX: Context Switches, GPU/CPU queues, AppleIntelHD5000Graphics, Metal. Linux: i915 with GPU Queue Catapult integration ETW: stacks support, VSyncs ITT: marker_ex support

16.04.09 16.04.09

Highlights: QNX, Windows GPU, automatic Python scripts tracing:

Initial support for QNX traceprinter output Automatic instrumentation and tracing of python code execution, see 'trace_execution' in sea.py Support of ring buffer mode -r Support of multiproc mode (follow child, launcher) -m Collectors support --collector ETW: GPU and system metrics collection for Windows Decoders conception support (now for ftrace only) with example on i915 driver - allows doing own visualizations for ftrace events Proper DGML schema joiner for several processes Relogging of ETW events for time and process correction (support for clock domains and tracks) Better ftrace time sync

Other projects in C