  Superpages have long been used to mitigate address translation overhead in
big memory systems. However, superpages often preclude lightweight page
migration, which is crucial for performance and energy efficiency in hybrid
memory systems composed of DRAM and non-volatile memory (NVM). In this paper,
we propose a novel memory management mechanism called \textit{Rainbow} to
bridge this fundamental conflict between superpages and lightweight page
migration. \textit{Rainbow} manages NVM at the superpage granularity, and uses
DRAM to cache frequently-accessed (hot) small pages in each superpage.
Correspondingly, \textit{Rainbow} utilizes split TLBs to support different page
sizes. By introducing an efficient hot page identification mechanism and a
novel NVM-to-DRAM address remapping mechanism, \textit{Rainbow} supports
lightweight page migration while without splintering superpages. Experimental
results show that Rainbow can significantly reduce applications' TLB misses by
99.8\%, and improve application performance (IPC) by up to 2.9X (43.0\% on
average) when compared to a state-of-the-art memory migration policy without
superpage support.
