awesome-profiling icon indicating copy to clipboard operation
awesome-profiling copied to clipboard

Awesome utilities for performance profiling

Awesome profiling

General utilites

  • https://ebpf.io/: Revolutionary sandboxed kernel profiling technology that makes it easier to build various profiling utilities. Tons of options here in Python https://github.com/iovisor/bcc
  • Dtrace: Available on Solaris (includes Mac but not Ubuntu) with notable highlights prstat and mpstat. prstat is not available on Ubuntu but can be replicated with htop and ps
  • collectl: Full system level profiling including CPU, disk, memory and network
  • perf: CPU level performance counters
  • gprof: sampling and instrumentation aware profiling
  • google perf tools
  • Heaptrack: a heap memory profiler for linux
  • jemalloc: another heap memory profiler
  • ETW: Event tracing for windows
  • Mac OS instruments: Mac OS instruments for profiling based on top of Dtrace
  • Renderdoc: Multi platform graphics debugger for OpenGL and Vulkan
  • Windows Perf Analyzer: If htop could plot lines, windows only but recently added support for android
  • htop: Visualize utilization as bar charts or line charts, issue commands to processes
  • Magic Trace: High resolution programmable traces

Python specific

  • viztracer
  • psutil: Like htop but from within your python code
  • pyinstrument:python call stack visualizer
  • pycallgraph: Visualize call stack as a graph (Maintenance mode)
  • py-spy: Sampling profiler for Python
  • line profiler: Line by line profiling
  • palanteer: Fanciest UI, looks like something out of the matrix
  • yappi: multi threaded profiling
  • Pycharm profiler: Built in profiler in Pycharm
  • TAU
  • gprof2dot: Graphical call stack visualizer (Maintenance mode)
  • snakeviz: Visualize python cprofile data
  • scalene: CPU and GPU based profiling with a web GUI
  • pprofile: Very low overhead line profile
  • austin-python: Line-level very low overhead time & memory profiler with web & terminal UI

Java specific

  • JProfiler: Java profiler for cpu, multithreading, graphical call stack visualizer
  • Java visual VM: Bundled with JDK

Mobile specific

  • iOS: Instruments app in Xcode
  • Android: Android Profiler in Android Studio

C# specific

C++ specific

  • Tracy: Windows only but very comprehensive and helpful for game development
  • Callgrind: Valgrind extension

Web specific

Machine Learning specific

  • Pytorch profiler: Visual profiles of computations and data loading for PyTorch models, requires changes to code

CPU specific

GPU specific

Books

Blogs

  • Flame Graphs: flame graphs vs flame charts, off cpu profiling, icicle charts and more
  • Sampling vs Tracing: sampling based profilers are easier to use since they don't require any code change while instrumentation based profilers require code changes but are generally more informative
  • C++ performance tools: reddit post with tons of links

Talks

Understanding code structure