all programs allocate memory on the same bank, resulting in much increased memory latency compared to the average case. This dependency on run-time decisions by the memory allocator can be a significant potential source of unpredictability. Furthermore, since banks are interleaved, any core in the system can access any bank. If two applications running in parallel on different cores access two different rows in the same bank, they can force the memory controller to continuously pre-charge the row buffer and open a new row every time an access is performed. This loss of row locality can result in a much degraded row hit ratio and thus a corresponding latency increases for both applications. Software bank partitioning [@yun2014rtas; @liu2012software; @suzuki2013coordinated] can be used to avoid the problems of shared banks. The technique leverages the page-based virtual memory system of modern operating systems and allow us to allocate memory to specific DRAM banks. Each core, then, can be assigned to use its private DRAM banks, effectively eliminates bank sharing among cores without requiring any hardware modification. Similar techniques can also be applied to partitioning the shared LLC as explored in  [@zhang2009towards; @mancuso2013rtas; @ding2011srm; @ward2013rtas; @lin2008gaining]. It is shown that partitioning DRAM banks 