Modern multicore processors offer a large number of processing cores. These large numbers of cores need an ample amount of main memory to perform useful work. Traditional memory consisting of DRAM is facing scaling limitations. Emerging phase-change memory (PCM) is more scalable than traditional DRAM, and also offers energy efficiency and non-volatility. Unfortunately, unlike DRAM, PCM wears out over time. Memory wear-out impacts its lifetime relative to the rest of the system.
Managed workloads such as those written in Java, require extensive tuning for optimal execution on traditional hardware. An increasing number of cores and new memory technologies complicates the optimization challenge even further. For example, for a given processor, how many mutator and garbage collection threads result in optimal performance for a single Java program? What is the (optimal) maximum heap size? How should the different heap regions be sized? Modern processors rarely execute a single program. Multi-programmed workloads are a reality that adds yet another layer of complication. How many co-running programs can the processor optimally support? What are the implications of setting the various Java-sepecific heuristics on memory wear-out?
To answer the above questions, in this project, we investigate how best to execute a managed workload consisting of several Java applications on multicore processors with hybrid memory consisting of DRAM and PCM. We care about two critical metrics: total system throughput and main memory lifetime. Due to the enormous space of possible executions on a large multicore with different types of memory, we would like to explore a machine learning approach.