Function layout, also referred to as function reordering or function placement, is one of the most effective profile-guided compiler optimizations. By reordering functions in a binary, compilers are able to greatly improve the performance of large-scale applications or reduce the compressed size of mobile applications. Although the technique has been studied in the context of large-scale binaries, no recent study has investigated the impact of function layout on mobile applications. In this paper we develop the first principled solution for optimizing function layouts in the mobile space. To this end, we identify two important optimization goals, the compressed code size and the cold start-up time of a mobile application. Then we propose a formal model for the layout problem, whose objective closely matches the goals. Our novel algorithm to optimize the layout is inspired by the classic balanced graph partitioning problem. We carefully engineer and implement the algorithm in an open source compiler, LLVM. An extensive evaluation of the new method on large commercial mobile applications indicates up to 2% compressed size reduction and up to 3% start-up time improvement on top of the state-of-the-art approach.
翻译:函数布局, 也称为功能重排序或函数布局, 是最有效的配置引导编译器优化方法之一 。 通过在二进制中重新排序功能, 编译者能够大大改进大型应用程序的性能或缩小移动应用程序的压缩大小。 虽然在大型二进制中研究了该技术, 但最近没有研究功能布局对移动应用程序的影响。 在本文中, 我们为优化移动空间的功能布局开发了第一个原则性解决方案 。 为此, 我们确定了两个重要的优化目标, 压缩代码大小和移动应用程序的冷启动时间。 然后我们提出了一个正式的布局问题模式, 其目标与目标非常接近 。 我们优化布局的新的算法受到经典平衡图形分割问题的启发。 我们仔细地在开放源编译器LLLVM 中设计并实施算法。 对大型商业移动应用程序的新方法进行的广泛评估显示, 压缩大小将缩小2%, 并在最先进的方法上进行3% 的启动时间改进 。