Software Profiling Seminar (2016)
Summer Term 2013Dr. Peter Tröger, Frank Feinbube
Software profiling is an established technique for the dynamic analysis of running programs. It supports the software developer or product maintainer in understanding code execution paths, resource consumption behavior and communication patterns. Software profiling typically does not demand access to the source code of the application at measurement time, which makes it perfectly usable in production environments and distributed (cloud) systems.
Several use cases for software profiling are recently emerging in practice:
- Analysis of ILP mechanisms - Compilers have different ways of using ILP mechanisms in the processor, which can be influenced by the right choice of compiler flags. Any particular optimization such as branch prediction, VLIW combinations or hyperthreading must be analyzable for its effectiveness when the code is being executed on a particular platform.
- Analysis of parallelization strategies - Any parallelization strategy leads to new and non-deterministic behavior at runtime due to synchronization or locking issues. A software developer can only understand the new program behavior if she is supported by software profiling tools, which allow to identify relevant bottlenecks, lock contention and code hot spots.
- Analysis of resource management - High-level execution environments such as web servers or application servers have their own resource pooling and management mechanisms. The only way to understand sub-optimal application settings in those environments is the utilization of profiling mechanisms.
- New platforms - Any porting activity of existing code to a new execution environment demands the analysis of run-time behavior and resource consumption under the new conditions.
The goal of this seminar is the creation of a software profiling compendium, which covers, from hardware over operating system up to virtual runtime environment, different application layers and their profiling support. Based on the quality of the student reports, this compendium may be published as technical report of the HPI.
Seminar Rules
For each topic, a presentation + and according report must be created. The presentation should be a summary of the report content. The final grade is generated from the oral presentation grade (20%) and the grade for the report (80%). Feedback from the presentation must be considered in the final version of the written report. The participants will incrementally create a classification of profiling approaches and metrics, based on the discussion after the presentations.
The report should contain at least the following content:
- Description of the targeted hardware / software components - What can be profiled?
- Metric types that can be collected by this approach - What kind of data can be collected?
- Classification of the profiling approach - What is the technique?
- Available variations of the toolkit, target platforms
- Walk-through of the profiling toolkit with a non-trivial example
The majority of report and presentation (> 50%) must deal with the use case presentation of the profiling toolkit.
The report must be created as Latex document, based on the provided template file. Literature references should be added as separate BibTex file. Upload your final report as ZIP package (with the LaTex source file, all images and the BibTex file) to the submission system. The deadline is September 22nd.
Consultation meetings are possible every Thursday, 9:00 - 11:00 in C-1.6. I recommend a consultation meeting at least 7 days before the presentation.
Topics
Title | Presenter | ||
---|---|---|---|
Introduction | |||
May 6 | Statistics 101 | Peter Tröger (slides) | |
Operating System Profiling Support | |||
Perf (Linux) | |||
PAPI (Linux) | |||
May 6 | strace (Linux) / truss (Solaris, BSD) | Angelo Haller (slides) | |
OProfile (Linux) | |||
May 13 | DTrace (Solaris, Linux, Mac OS X, BSD) | Markus Dreseler (slides) | |
May 13 | LTTng (Linux) vs. SystemTap (Linux) | Fabian Bornhofen (slides) | |
May 27 | Event Tracing for Windows | Uwe Hartmann (slides) | |
Profiling Workbench | |||
May 27 | Visual Studio Profiling Tools | Pratama Wiradarma (slides) | |
May 27 | Intel VTune (student version) | Lena Herscheid (slides) | |
June 3 | Valgrind | Marcel Pursche | |
June 3 | Instruments (MacOS X) | Simon Völcker (slides) | |
Zoom | |||
GPU Profiling | |||
June 10 | NVIDIA Nsight, NVIDIA Visual Profiler | Johannes Henning (slides) | |
June 10 | AMD CodeXL, AMD GPU PerfStudio | Hannes Würfel (slides) | |
Script Profiling | |||
June 17 | Python Profiling, Guppy | Cornelia Rehbein | |
June 17 | Ruby on Rails Profiling | Kai Hoewelmeyer | |
June 24 | XDebug for PHP, PHP APD Debugger, XHProf | Cornelius Illi (slides) | |
June 24 | V8 Profiling | Lauritz Thamsen (slides) | |
Node.JS Profiling | |||
Java Profiling | |||
JVMTI Interface | |||
VisualVM | |||
BTrace | |||
Java Interactive Profiler | |||
July 1 | Eclipse Memory Analyzer | Jan Rehwaldt (slides) | |
NetBeans Profiler | |||
JProfiler | |||
JBoss Profiler | |||
MPI Profiling | |||
July 1 | Vampir | Henning Lohse | |
July 1 | Tau | Toni Mattis | |
Fancy stuff | |||
Profiling through AOP, DJProf | |||
July 8 | Android Profiling | Hubert Hesse | |
July 8 | Poor Man's Profiler | Maximilian Schneider | |
July 8 | Profiling with GCC | Andreas Grapentin |