2.4 应用无感知的原生加速引擎:sysBoost
随着云原生架构和分布式架构的演进,操作系统的基础软件栈越来越厚重,越来越复杂,绝大部分应用开发者都缺乏全栈优化能力,他们开发的应用一般都无法发挥硬件的全部计算性能。因此,为操作系统提供软件全栈性能在线自动优化技术,已经成为提升操作系统核心竞争力的关键之一。
传统的基于特定业务模型的PGO(Profile-Guided Optimization)优化已经无法适应不同业务模型的变化,无法适应不同硬件拓扑结果的变化。由于普通应用开发者不熟悉CPU微架构技术,无法基于特定的CPU微架构对应用软件进行性能优化,因此大大增加了应用软件的开发成本,也严重影响了应用软件在不同CPU架构上的迁移和移植。
openEuler为此研发了sysBoost系统原生加速技术,其可以提供应用无感知、自适应CPU微架构的自动性能优化功能。sysBoost无须开发者参与,会基于二进制程序自动进行在线代码重排、代码优化、消除过程链接表(Procedure Linkage Table,PLT)跳转、代码段大页、代码段内存亲和等优化。
sysBoost的架构如图2-6所示,采用了4项关键技术对应用进行了优化。
(1)应用极速加载。通过内核exec单次加载全部代码段,避免多次系统调用。预先解析动态库符号,避免在应用启动阶段反复解析,影响加载速度。
(2)消除PLT跳转。应用程序要想调用动态库函数,需要先跳转到PLT(查找真实函数),然后才能跳转到真实函数。如果能消除PLT跳转,则能提升调用真实函数的性能。
(3)热点代码段在线重排。通过在线重排技术可以实现热点代码按代码粒度进行重排,即先将分散的动态库的代码段和数据段拼接聚合,然后利用大页内存提升TLB(Translation Lookaside Buffer,转译后备缓冲器)的命中率。
(4)exec原生大页。用户态大页机制需要应用修改配置和重编译,而exec原生大页机制可以直接在内核加载ELF文件阶段使用大页内存。
图2-6 sysBoost的架构
sysBoost的运行视图如图2-7所示。sysBoost守护进程根据配置文件描述,优化指定的应用程序及其依赖的动态库。管理员可以通过配置文件来指定业务类型,sysBoost根据管理员指定的业务类型找到预先部署在运行环境中的profile文件。之后,sysBoost根据应用程序的重定位信息和profile文件信息解析符号并生成最优的代码布局,将程序及其依赖的动态库的代码段和数据段进行合并,消除PLT跳转,各段按2MB大页对齐。在加载应用程序阶段,sysBoost会自动发现优化后的二进制程序,并将代码段和数据段加载到2MB大页内存上,从而提升程序的TLB命中率。
图2-7 sysBoost的运行视图