Freja's analysis focuses on the memory access behaviour of the application, and specifically on how the application's memory access patterns interact with the processor caches. Improving the application's interaction with the processor caches has two effects:
It decreases the cache miss ratio of the application. Cache misses introduce memory access latencies that cause stalls in the execution, and decreasing the cache miss ratio directly reduces the execution time of the application.
It decreases the memory bandwidth requirement of the application. When an application becomes memory bandwidth limited it is no longer the memory access latencies that limit the execution speed, but the bandwidth at which data can be transferred to and from memory. In a memory bandwidth limited application many performance optimizations aimed at reducing the impact of memory access latencies, for example, prefetching, become useless or even detrimental.
Decreasing the memory bandwidth requirement of applications becomes even more important with the introduction of multicore processors. More cores sharing the same memory bandwidth means the memory bandwidth is quickly exhausted. Memory bandwidth is the most important bottleneck for scaling application performance on multicore processors.
Freja uses a proprietary light-weight sampling technology when sampling the application, not hardware performance counters. The collected fingerprint is richer in information than what can be obtained from the hardware performance counters and allows metrics such as utilization of fetched cache lines to be calculated.
Since it is the behavior of the application and not the hardware that is sampled, the gathered data is independent of the hardware the sampling was done on. This allows the user to analyze how the application would behave on a processor with a different cache configuration, for example, to predict the performance on different processor models.
Freja is programming language independent. It only looks at the binary code of the application. It can generate a report without any source code, but to generate source code references it needs access to the source code and the application must be compiled with debug information in a standard format.