倚天710规模化应用 - 性能优化 -自动反馈优化分析与实践

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
EMR Serverless Spark 免费试用,1000 CU*H 有效期3个月
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 编译器优化分成静态优化与动态优化,静态优化指传统编译器gcc/llvm时,增加的优化等级,如O1,O2,O3,Ofast,此时,编译器会依据编译优化等级增加一些优化算法,如函数inline、循环展开以及分支静态预测等等。一般情况下,优化等级越高,编译器做的优化越多,性能会更会好。在阿里生产环境中,单纯依赖于静态优化,并不能达到程序运行流畅目的,通过分析CPU硬件取指令、执行指令,往往会出现一些分支预测失败导致iCacheMiss率高的场景,限制了程序的性能进一步提升。基于此,业务引入了动态反馈优化工具,依据生产环境的实际运行数据,反哺指导编译器对程序代码进一步调整编译优化策略,提高分支预准确率

1.反馈优化概述

编译器优化分成静态优化与动态优化,静态优化指我们在使用编译器gcc/llvm时,增加的优化等级,如O1,O2,O3,Ofast,此时,编译器会依据编译优化等级增加一些优化算法,如函数inline、循环展开以及分支静态预测等等。一般情况下,优化等级越高,编译器做的优化越多,性能会更会好。在阿里生产环境中,单纯依赖于静态优化,并不能达到程序运行流畅目的,通过分析CPU硬件取指令、执行指令,往往会出现一些分支预测失败导致iCacheMiss率高的场景,限制了程序的性能进一步提升。基于此,业务引入了动态反馈优化工具,依据生产环境的实际运行数据,反哺指导编译器对程序代码进一步调整编译优化策略,提高分支预测准确率和指令Cache命中率,达到深度调优的目的。
业界反馈优化的方法,首先是Feedback-Driven Optimization,也称为PGO。主要原理是源代码里插桩指令,然后模拟生产环境内运行程序,以得到函数调用信息及跳转信息。进而指导编译器进行反馈优化。
其次,基于大部分处理器均已支持PMU基础上,通过LBR/BLBR/SPE等硬件设备按一定的频率采样程序运行数据,生成Profile数据,将数据进行转换应用于下一次二进制编译,以提高分支预测准确率和Cache命中率。
image.png

图1 基于Profile采样数据反馈优化图

如图1所示,Profile数据可应用于编译器的不同阶段,包含编译阶段(AutoFDO)、链接阶段(LIPO/HFSort)及POST-LINK阶段(Ispike/Bolt)。

1.1. PGO优化

目前,最常见的反馈优化是PGO(Profile Guided Optimization), 对程序的代码进行全部插桩,并根据运行时 profiling data 指导编译器优化的技术。由于PGO获取的Profile数据比较全面,所以通过PGO优化的性能可以提升10-15%,甚至超过30%。
PGO优化需要以下三步骤:

  1. 编译时,增加额外的编译选项(-fprofile-instr-generate),编译器会在生成二进制程序内插桩收集函数信息及跳转信息的指令,使发布程序变大;
  2. 在生产环境内或模拟生产环境运行,插桩后二进制会生成profile文件;
  3. 基于profile文件,重新编译二进制程序

此三步骤中,第一步编译的程序,由于额外生成采集指令,导致生成的程序,在实际生产环境中,性能较低,无法满足快速迭代、快速上线的目的。而此三步骤,在公司分布式部署发布的工程,会出现维护成本巨大,故PGO优化并不能适应主流的分布式场景。

1.2.AutoFDO

基于目前大多数处理器支持PMU(x86-64:LBR,aarch64:SPE)基础上,Google提出一个AutoFDO反馈优化工具,通过Perf工具采样生产环境上的硬件性能监视器事件,解析出编译器所需跳转数据,指导下一版本的编译与优化。而且基于Perf工具的采样,基本上不会损失额外的处理器性能,而且至少得到85%以上指令运行情况,甚至接近指令实际运行情况。

AutoFDO反馈优化优势:

  1. 直接采集生产环境的实际运行信息,相比PGO,无须模拟运行一次;
  2. 采集数据经过转换后,直接应用于下一次Release版本编译发布,无需额外的维护成本;
  3. 非常适用于分布式部署环境。

1.3. BOLT

目前业界上普遍认为,Profile数据应用于阶段越早,越能发挥Profile数据潜力,获得更大的收益,正基于此,Profile数据应用研究基本上在编译和链接阶段,对POST-LINK研究相对较少。
其实,Profile数据采集是机器码级别的采样数据,应用于编译阶段和链接阶段时,Profile数据与编译时的代码映射关系并不精准,从面导致了Profile数据并未发挥真正的作用。
基于上述问题,Facebook推出基于LLVM开源框架的二进制静态优化工具Bolt。Facebook基于Bolt技术,应用于其数据中心负载处理,即使数据中心已进行了PGO(AutoFDO)和LTO优化后,BOLT仍然能够提升其性能,最高达7%。未应用PGO与LTO优化二进制,Bolt可提升性能达到52.1%。
image.png

图2 BOLT内部流程图

BOLT框架大部分的优化收益来源于BasicBlock Reorder(Pass8)和Function reorder(Pass12)。Pass8基于function内部的BasicBlock的跳转信息,对BasicBlock进行重新排序,并且能够将冷的BasicBlock划分到新的section中。Pass12基于function之间的跳转信息,对function进行重新排序。Pass8和Pass12能够提高iCache和iTLB的利用率,从而提高性能。

2.应用反馈优化实践

结合倚天的硬件特性,通过SPE的采样分支跳转指令信息,研发自动化转换工具链,应用于公司核心业务场景,目前可一键式发布版本、自动化采集数据、自动化更新采样数据,业务无感知接入反馈优化系统。
目前在集团内核心业务,如即时通信系统、数据存储系统及数据库、地图导航等核心业务上,取得3-15%的性能提升,为集团节省上百万的成本。

相关文章
|
缓存 编译器
BOLT 二进制反馈优化技术
大型应用的代码往往达到数十甚至上百MB,这导致在程序执行时缓存机制无法充分利用,导致大量时间花费在CPU和内存链路上。通过对热点函数的布局进行优化,我们可以更好地利用CPU cache,从而获得较为可观的性能提升。针对这一问题,在编译技术上有PGO和Bolt两种解决办法,两者都是一种通过收集程序在运行时如跳转,调用关系,函数热度等执行信息,这些收集到的程序运行情况数据(profile data),可以更好地指导一些程序优化的策略,如是否对函数进行内联,以及对基本块和函数布局的排布来提高特定场景下的程序性能。
2332 2
BOLT 二进制反馈优化技术
|
数据采集 机器学习/深度学习 监控
Arm Coresight 介绍
Coresight 是 ARM 架构上的一款嵌入式系统监控和调试工具,能够为系统管理员和开发人员提供便捷的系统监控和调试功能。该平台可以实时追踪和分析处理器上的活动,以深入了解潜在的性能瓶颈和问题。本文将介绍Coresight的概念、优势及其安装、配置、故障排除和调试等方面的内容,并探讨其未来发展方向和重要性。
2052 1
|
Cloud Native 编译器 芯片
倚天平台业务访存及网络延时性能调优实践
本文主要内容是业务在倚天平台上的性能调优实践,重点基于芯片的 NUMA 特性和一些其他硬件特性,进行访存和网络延时方面的性能调优方法介绍。
|
缓存 算法 大数据
倚天710规模化应用 - 性能优化 - 软件预取分析与优化实践
软件预取技术是编程者结合数据结构和算法知识,将访问内存的指令提前插入到程序,以此获得内存访取的最佳性能。然而,为了获取性能收益,预取数据与load加载数据,比依据指令时延调用减小cachemiss的收益更大。
|
弹性计算 Linux 编译器
CoreBolt——在倚天上基于 Coresight 做 BOLT 优化
CoreBolt 是一种倚天平台的性能优化解决方案。CoreBolt 通过 Coresight 在程序运行时采集程序运行信息,对程序的热代码和冷代码进行区分,并通过 BOLT 对程序进行代码段重排,从而提升程序代码的局部性,减少程序运行过程中由 CPU iCache miss 和 iTLB miss 引发的性能下降,提升程序的整体性能。
1417 6
|
弹性计算 编解码 运维
飞天技术沙龙回顾:业务创新新选择,倚天Arm架构深入探讨
阿里云、平头哥与Arm联合举办的飞天技术沙龙在上海举行,聚焦Arm Neoverse核心优势和倚天710计算实例在大数据、视频领域的应用。活动中,专家解读了倚天710的性能提升和成本效益,强调了CIPU云原生基础设施处理器的角色,以及如何通过软件优化实现资源池化和稳定性平衡。实例展示在视频编码和大数据处理上的性能提升分别达到80%和70%的性价比优化。沙龙吸引众多企业代表参与,促进技术交流与实践解决方案的探讨。
飞天技术沙龙回顾:业务创新新选择,倚天Arm架构深入探讨
倚天产品介绍|阿里云核心产品—倚天710
阿里云最新产品手册——阿里云核心产品——倚天710自制脑图
倚天产品介绍|阿里云核心产品—倚天710
|
弹性计算 缓存 关系型数据库
开源MySQL在倚天ECS上的最佳优化实践
我们总结了在倚天上自建MySQL的基本优化手段,并在阿里云ECS G8y实例(基于Armv9的倚天710处理器)和G8i实例(x86)上做了开源8.0.34版本的MySQL的性能测试对比,优化后MySQL在G8y上的性能相对于未优化在G8i上的性能在只读场景有63%的性能优势,在读写混合场景有35%的性能优势;相对于优化后的G8i仍能保持只读场景20%的性能优势,读写混合场景5%的性能优势。
564 3
|
弹性计算 关系型数据库 数据库
开源PostgreSQL在倚天ECS上的最佳优化实践
本文基于倚天ECS硬件平台,以自顶向下的方式从上层应用、到基础软件,再到底层芯片硬件,通过应用与芯片的硬件特性的亲和性分析,实现PostgreSQL与倚天芯片软硬协同的深度优化,充分使能倚天硬件性能,帮助开源PostgreSQL应用实现性能提升。
|
编译器 数据中心 开发者
安谋科技(Arm China)别再平:Arm Neoverse 软件生态介绍
2023年8月15日,系列课程第二节《Arm Neoverse 软件生态介绍》正式上线,由安谋科技(Arm China)高级软件经理别再平主讲,内容涵盖:Arm Neoverse 介绍,Arm Neoverse 软件生态系统,Arm Neoverse 软件迁移。
安谋科技(Arm China)别再平:Arm Neoverse 软件生态介绍

热门文章

最新文章