All modern architectures track memory accesses using page granularity metadata such as access and dirty bits, leading to fundamental tradeoffs for system software components that use this metadata. Larger page sizes reduce address translation overheads and page table footprints. However, coarse metadata bits for larger pages limit system software’s visibility into application-level memory usage, resulting in well-known memory bloat and performance pathologies. As DRAM capacity continues to expand, these tradeoffs will become untenable. As DRAM capacity continues to expand, we can expect system software to react by aggressively map with larger page sizes, making these tradeoffs increasingly untenable.
We study the relationship between memory metadata granularity and fidelity. Fidelity is the degree to which coarse grain metadata correctly approximates metadata maintained at a finer granularity. Fidelity loss is the percentage of bits incorrectly approximated. We focus on 2MB huge page support on x86-64 and GPU platforms, measuring fidelity loss across a wide range of standard benchmarks. Even within applications, high variance exists and significant fidelity is often lost at coarser granularity, suggesting a need for dynamic, application-level control over metadata granularity.
We propose PRISM, architectural support for variable granularity access and dirty bits, to recover fidelity of metadata for large pages. Evaluation of Linux/x86-64 and GPU PRISM prototypes show that the modest additional hardware reduces metadata fidelity loss by up to 65% and 55% at a performance cost of less than 1% and 2% on CPUs and GPUs respectively. We show that the recovered fidelity can eliminate performance pathologies and improve the performance of GPGPU application using demand paging by 29.8%.