Dynamic algorithms to construct huge pages can improve the performance of big-memory workloads but might introduce latencies during page construction. Some workloads may benefit from static algorithms that utilize offline profiling information to predetermine memory allocations. But while such algorithms are more predictable, they are: (1) unsuitable for setups with limited physical memory contiguity; (2) ineffective whenever program call sites allocating memory are invoked via different code paths; and (3) vulnerable to minor configuration and input changes.
We propose Salloc, a profile-guided static allocator that addresses these drawbacks by: (1) prioritizing huge page allocations that matter most; (2) defining allocation sites using their full call stack; and (3) cumulatively supporting multiple offline execution profiles. We show Salloc is effective across similar application datasets and different contiguity limitations. For example, it achieves up to 90% of the maximal speedup when backing only 5% of application memory with huge pages (rather than all application memory). Nevertheless, we find that static huge page allocation is inevitably ineffective if different program inputs trigger substantially different allocation policies within the application, because the offline profile might align with a different policy than the running program.