{"id":13643533,"url":"https://github.com/msaroufim/awesome-profiling","last_synced_at":"2025-04-05T21:04:57.995Z","repository":{"id":37098161,"uuid":"461708704","full_name":"msaroufim/awesome-profiling","owner":"msaroufim","description":"Awesome utilities for performance profiling","archived":false,"fork":false,"pushed_at":"2025-03-05T19:13:52.000Z","size":103,"stargazers_count":169,"open_issues_count":0,"forks_count":6,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-01T23:40:11.008Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/msaroufim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-02-21T04:48:42.000Z","updated_at":"2025-03-24T05:39:00.000Z","dependencies_parsed_at":"2024-01-16T02:46:46.758Z","dependency_job_id":"ba74dcba-f2aa-4d65-abee-94fbdf1d36ed","html_url":"https://github.com/msaroufim/awesome-profiling","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msaroufim%2Fawesome-profiling","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msaroufim%2Fawesome-profiling/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msaroufim%2Fawesome-profiling/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msaroufim%2Fawesome-profiling/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/msaroufim","download_url":"https://codeload.github.com/msaroufim/awesome-profiling/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247399871,"owners_count":20932876,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T01:01:48.922Z","updated_at":"2025-04-05T21:04:57.973Z","avatar_url":"https://github.com/msaroufim.png","language":null,"funding_links":[],"categories":["Others","Optimization","Other Lists","Master-Level"],"sub_categories":["TeX Lists","Master Informatik/KI"],"readme":"# Awesome profiling\n\n## General utilites\n* [https://ebpf.io/](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\n* [Dtrace](https://www.oracle.com/solaris/technologies/dtrace-tutorial.html): 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`\n* [collectl](http://collectl.sourceforge.net/Tutorial.html): Full system level profiling including CPU, disk, memory and network\n* [perf](https://perf.wiki.kernel.org/index.php/Main_Page): CPU level performance counters\n* [gprof](https://sourceware.org/binutils/docs/gprof/): sampling and instrumentation aware profiling\n* [google perf tools](https://github.com/gperftools/gperftools)\n* [Heaptrack](https://github.com/KDE/heaptrack): a heap memory profiler for linux\n* [jemalloc](https://github.com/jemalloc/jemalloc): another heap memory profiler\n* [ETW](https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/event-tracing-for-windows--etw-): Event tracing for windows\n* [Mac OS instruments](https://knowledge.broadcom.com/external/article/180011/how-to-use-macintosh-xcodes-instruments.html): Mac OS instruments for profiling based on top of Dtrace\n* [Renderdoc](https://github.com/baldurk/renderdoc): Multi platform graphics debugger for OpenGL and Vulkan\n* [Windows Perf Analyzer](https://docs.microsoft.com/en-us/windows-hardware/test/wpt/windows-performance-analyzer): If `htop` could plot lines, windows only but recently added support for android\n* [htop](https://htop.dev/): Visualize utilization as bar charts or line charts, issue commands to processes\n* [Magic Trace](https://github.com/janestreet/magic-trace): High resolution programmable traces\n* [pprof](https://github.com/google/pprof): pprof is a tool for visualization and analysis of profiling data\n* [Samply](https://github.com/mstange/samply): a command line CPU profiler which uses the Firefox profiler as its UI. works on macOS, Linux, and Windows.\n\n## Continuous Profiling\n* [parca](https://github.com/parca-dev/parca): Continuous profiling for analysis of CPU and memory usage, down to the line number and throughout time. Saving infrastructure cost, improving performance, and increasing reliability\n* [parca-agent](https://github.com/parca-dev/parca-agent): eBPF-based always-on profiler auto-discovering targets in Kubernetes and systemd, zero code changes or restarts needed! Supports multiple languages: C/C++, Rust, Go, Python, Ruby, Java, etc.\n\n## Python specific\n* [viztracer](https://github.com/gaogaotiantian/viztracer)\n* [psutil](https://github.com/giampaolo/psutil): Like htop but from within your python code\n* [pyinstrument](https://github.com/joerick/pyinstrument):python call stack visualizer\n* [pycallgraph](https://github.com/gak/pycallgraph): Visualize call stack as a graph (Maintenance mode)\n* [py-spy](https://github.com/benfred/py-spy): Sampling profiler for Python\n* [line profiler](https://github.com/pyutils/line_profiler): Line by line profiling\n* [palanteer](https://github.com/dfeneyrou/palanteer): Fanciest UI, looks like something out of the matrix\n* [yappi](https://github.com/sumerc/yappi/): multi threaded profiling\n* [Pycharm profiler](https://www.jetbrains.com/help/pycharm/profiler.html): Built in profiler in Pycharm\n* [TAU](https://www.cs.uoregon.edu/research/tau/home.php)\n* [gprof2dot](https://github.com/jrfonseca/gprof2dot): Graphical call stack visualizer (Maintenance mode)\n* [snakeviz](https://jiffyclub.github.io/snakeviz/): Visualize python cprofile data\n* [scalene](https://github.com/plasma-umass/scalene): CPU and GPU based profiling with a web GUI\n* [pprofile](https://github.com/vpelletier/pprofile): Very low overhead line profile\n* [austin-python](https://github.com/P403n1x87/austin-python): Line-level very low overhead time \u0026 memory profiler with web \u0026 terminal UI\n* [py-perf](https://github.com/kakkoyun/py-perf) A low-overhead, sampling CPU profiler for Python implemented using eBPF.\n\n## Ruby specific\n* [rbspy](https://github.com/rbspy/rbspy): Sampling CPU profiler for Ruby\n* [rbperf](https://github.com/javierhonduco/rbperf): Low-overhead sampling profiler and tracer for Ruby implemented in BPF\n* [vernier](https://github.com/jhawthorn/vernier): Next generation CRuby profiler\n\n## Java specific\n* [JProfiler](https://www.ej-technologies.com/products/jprofiler/overview.html): Java profiler for cpu, multithreading, graphical call stack visualizer\n* [Java visual VM](https://visualvm.github.io/download.html): Bundled with JDK\n\n## Mobile specific\n* [iOS](https://developer.apple.com/library/archive/documentation/ToolsLanguages/Conceptual/Xcode_Overview/MeasuringPerformance.html): Instruments app in Xcode\n* [Android](https://developer.android.com/studio/profile/android-profiler): Android Profiler in Android Studio\n\n## C# specific\n* [Unity profiler](https://docs.unity3d.com/Manual/Profiler.html): profiling tools specific for game development\n\n## C++ specific\n* [Tracy](https://github.com/wolfpld/tracy): Windows only but very comprehensive and helpful for game development\n* [Callgrind](https://valgrind.org/docs/manual/cl-manual.html): Valgrind extension\n\n## Web specific\n* [Chrome profiler](https://developer.chrome.com/docs/devtools/evaluate-performance/): Support for throttling, emulating weak hardware,\n\n## PyTorch specific\n* [Pytorch profiler](https://pytorch.org/blog/introducing-pytorch-profiler-the-new-and-improved-performance-tool/): Visual profiles of computations and data loading for PyTorch models, requires changes to code\n* [PyTorch memory profiler](https://pytorch.org/blog/understanding-gpu-memory-1/): Can help debug OOMs and memory spikes\n\n## CPU specific\n* [ARM profiling](https://developer.arm.com/tools-and-software/server-and-hpc/debug-and-profile/arm-forge/arm-map/python-profiling): ARM specific profiling tools, heavyweight UI\n* [Intel Vtune](https://www.intel.com/content/www/us/en/develop/documentation/vtune-help/top/analyze-performance/code-profiling-scenarios/python-code-analysis.html)\n* [Intel GPA](https://www.intel.com/content/www/us/en/developer/tools/graphics-performance-analyzers/overview.html): Intel Graphics performance analyzer\n\n## GPU specific\n* [pynvml](https://github.com/gpuopenanalytics/pynvml): Like `nvidia-smi` for your code with deeper level instrumentation\n* [NVIDIA visual profiler](https://developer.nvidia.com/nvidia-visual-profiler)\n* [NVIDIA tools](https://developer.nvidia.com/tools-overview)\n* [GPU View](https://docs.microsoft.com/en-us/windows-hardware/drivers/display/using-gpuview#:~:text=GPUView%20(GPUView.exe)%20is,processing%20on%20the%20video%20hardware.): Windows specific GPU profiling\n* [ROC profiler](https://github.com/ROCm-Developer-Tools/rocprofiler): AMD ROCm profiler\n* [Omniperf](https://github.com/AMDResearch/omniperf): AMD profiler for MI100 and MI200 accelerators\n* [NVIDIA NCU](https://docs.nvidia.com/nsight-compute/NsightCompute/index.html): Infinitely more useful than NVIDIA's nsys, does a godbolt style view on PTX and gives actionable performance hints \n\n## Books\n* [System Performance Enterprise and the Cloud](https://www.amazon.com/Systems-Performance-Enterprise-Brendan-Gregg/dp/0133390098)\n* [BPF Performance tools](https://www.amazon.com/Performance-Tools-Addison-Wesley-Professional-Computing/dp/0136554822)\n\n## Blogs\n* [Flame Graphs](https://www.brendangregg.com/flamegraphs.html): flame graphs vs flame charts, off cpu profiling, icicle charts and more\n* [How to read icicle and flame graphs](https://www.polarsignals.com/blog/posts/2023/03/28/how-to-read-icicle-and-flame-graphs): Flame graphs and icicle graphs are a great way to visualize performance profiles. In this post, we will learn how to read and interpret them.\n* [Sampling vs Tracing](https://danluu.com/perf-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\n* [C++ performance tools](https://www.reddit.com/r/cpp/comments/7kurp6/comment/drhpyfh/?utm_source=share\u0026utm_medium=web2x\u0026context=3): reddit post with tons of links\n\n## Talks\n* [scalene talk](https://www.youtube.com/watch?v=5iEf-_7mM1k)\n* [Why performance matters](https://www.youtube.com/watch?v=r-TLSBdHe1A\u0026)\n* [Common performance anti-patterns](https://www.youtube.com/watch?v=YY7yJHo0M5I)\n\n## Understanding code structure\n* [pyreverse](https://www.redshiftzero.com/pyreverse-uml/): Get python classes and then visualize with `graphviz`\n* [pdb](https://stackoverflow.com/questions/4929251/how-to-step-through-python-code-to-help-debug-issues): Use step in functionality or line by line to understand how your code works\n* [IntelliJ UML Class diagrams](https://www.jetbrains.com/help/idea/class-diagram.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsaroufim%2Fawesome-profiling","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmsaroufim%2Fawesome-profiling","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsaroufim%2Fawesome-profiling/lists"}