The process of optimizing an application with Freja starts with sampling the application. The application is sampled to capture a fingerprint of its memory access behaviour and collect information about its structure. The user can sample an application from start to end, or attach to the application while it is running, sample it for a while and detach.
Once the sampling is done the captured data is analyzed to discover performance problems. A report is created, listing the performance problems found in the code and mapping them back to the source code. Each performance problem is classified and the programmer can find directions on how to fix each class of problems in the online documentation. The performance problems include issues such as:
Freja also calculates cache metrics, such as cache miss ratios, cache fetch ratios, cache line utilizations and hardware prefetch probabilities. These metrics further guide the developer in identifying and understanding the causes of memory related performance problems.
Performance issues are automatically ranked in order of severity in the report. Once the programmer has fixed the most severe problems, he can sample and analyze the improved application to verify the improvements and find other performance bottlenecks.