Emerging machines are becoming more massively parallel and exhibiting an increasing diversity of architectural features. Performance modeling becomes key to understanding how solvers perform on these machines, and where the opportunities are to improve performance. In this talk, we discuss our experiences with using performance modeling to drive improvements to algebraic multigrid (AMG). We use a performance model to guide a data redistribution algorithm that results in reduced communication and improved performance. We also use this model to inform the selection of thread/task mixtures on multicore nodes when using a hybrid programming model. In the future, we envision solvers like AMG making extensive use of performance models to ensure continued good performance and scalability.