Managing Heterogeneous Memory Infrastructures