A framework for end-to-end simulation of high-performance computing systems