当GaussDB遇上了毕昇编译器
摘要:当应用软件及硬件确定后,编译器对应用的自动优化将成为应用性能的关键。
从应用优化说起
一个应用的优化通常有架构级优化、模块级优化和函数级优化,高性能作为云数据库GaussDB主打特性之一,其在这几方面都进行了大量的优化,也有很强的性能表现。如何进一步提升性能,是否还有其他方面的切入点?
答案之一是编译器,编译器作为人机交流的桥梁,一方面正确地把高级语言翻译成机器语言,另一方通过各种优化变换方法生成更高效的等价语义,所以当应用软件及硬件确定后,编译器对应用的自动优化将成为应用性能的关键。
1.毕昇编译器是什么
毕昇编译器是华为编译器实验室针对通用处理器架构构建,支持C/C++/Fortran编程语言,增强和引入了多种编译优化技术,致力于打造高性能、高可信及易扩展的编译器工具链。毕昇编译器针对鲲鹏架构深度优化,SPEC CPU 2017性能较开源GCC提升30%。
- 高性能:编译深度优化,增强多核并行化,自动向量化等,大幅提升指令和数据呑吐量。
- 多算力支持:支持其他Arm架构国产芯片,如飞腾。支持x86、RISC-V、龙芯等架构。
- 高可信:商业+自研测试套,每日100万+测试用例,全面质量保障;开发态提供多种安全编码工具;社区CVE及时修复;车规级安全认证。
2. 相关编译器优化技术
2.1 函数内联(inline)
函数/过程是编程语言的重要组成部分,函数/过程之间的调用是有一定的开销,比如保存和恢复上下文、传递参数等操作开销。函数内联优化是一种常用的优化技术,它可以将函数调用处直接替换为函数体,从而减少函数调用的开销。下面是一个简单的示例,展示了如何在编译器中应用inline优化。
int square(int x) { return x * x; } int calculate(int a) { return square(a) + square(a + 1); }
编译器进行自动内联后,如下:
int calculate(int a) { return (a * a) + ((a + 1) * (a + 1)); }
在优化后的代码中,不再有调用square函数的开销,另外内联后可以帮助编译器发现更多的优化机会,比如本例中,可以进一步进行编译期间的计算。
这只是一个简单的例子,实际的编译器inline优化会更为复杂,涉及到更多的优化策略和技术。毕昇编译器进行了inline优化增强,如下是mataERP场景下inline的情况。
函数内联后对应用热补丁机制有一定影响,制作工作量会略有增加。
2.2 指令预取优化
指令预取(Instruction Prefetching)是一种计算机体系结构中的优化技术,用于提前获取未来可能需要执行的指令数据,并将其预加载到指令缓存中,以减少指令访问延迟和提高程序的执行效率。
在执行程序时,处理器需要从内存中获取指令数据并进行解码和执行。由于内存访问的延迟比处理器的执行速度慢,处理器可能需要等待指令数据的到达,导致指令执行的停滞。为了克服这种延迟,指令预取技术被引入。
指令预取的基本原理是根据程序的访存模式和分支预测信息,提前预测和获取未来可能需要执行的指令数据。这样,当处理器执行到需要这些指令的时候,它们已经被预先加载到指令缓存(例如指令高速缓存)中,避免了等待时间。
如下面这个来自GaussDB的函数:
毕昇编译器(右侧)插入了prfm预取指令,prfm是鲲鹏平台上定义的内存数据预取指令,执行指令预取优化。
2.3 自动向量化技术
自动向量化技术是编译器利用硬件架构提供的SIMD(single instruction multiple data)指令,如Arm的NEON/SVE指令,x86平台的SSE/AVX指令,一条指令可以处理多路数据,从而提升应用二进制的执行效率。毕昇编译器做了大量向量化新场景识别和算法增强,并结合鲲鹏SIMD指令特点进行深度优化。
如上图,如有两组四个整形数据相加运算,左侧需要四次操作,而右侧向量化后只需要1次操作。
2.4 链接时优化技术
链接时优化LTO(Link Time Optimization)是程序链接期优化,也叫链接期过程间优化。如下图,编译器在链接时将所有编译单元(过程)合并在一起,这样可以发掘不同过程间的优化机会,比如内联(inline)、函数特化(function specialization)、冗余代码消除、常量传播等等,通常可以获得更高的性能收益。当然同时也带来编译器时间加长的负面收益。
2.5 CFGO优化
对于控制流较多、对数据分段访问较多的应用(例如数据库类应用)非常适合编译器的反馈类优化技术,CFGO(Continuous FGO)通过收集程序运行时信息(profile)进行优化决策。编译器根据这些运行时信息指导各种编译优化技术进行更准确的优化决策,生成目标程序。
3. 性能收益
毕昇编译器协同GaussDB跨域创新,基于应用层优化、编译中端优化、算力优化等多种手段对GaussDB应用场景持续优化。
- 高性能:对插入、更新、删除等不同负载的业务,毕昇 for GuassDB优化实现 TPCC性能提升30%,TPCH性能提升13%,应用性能提升5%-10%。
- 高安全:毕昇编译器全面升级代码检测工具,保障安全可信代码开发,实现高质量、高安全的持续集成、交付与部署。
4. 总结与展望
数据库和编译器都是关键的基础软件,为关基行业提供软件根技术,后续将进行如下几方面的工作:
(1)完成GaussDB切换毕昇编译器,直接获取已有的性能收益;
(2)针对典型客户场景,技术能力联合创新和快速验证;
(3)突破编译器/虚拟机关键技术,支撑高斯PLSQL性能提升;
目前GaussDB已启动切换毕昇编译器进程,并在已经在银行、政务云等客户进行了POC验证,相信后续毕昇编译器可以为GaussDB提供更强大的竞争力,从而也为更多行业客户创造更多的商业价值。
另外,毕昇编译器作为通用编译器,也可涵盖金融领域其他应用场景,如优化haproxy应用,助力工行音视频交互服务获得收益;落地上交所CICD,通过协助检测内存安全、代码规范,保障高质量交付。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
京东购物车分页方案探索和落地 | 京东云技术团队
随着京东购物车应用场景的丰富化和加车渠道的多元化,京东购物车的商品容量从2015年至今一直在逐步增加。 2015年京东购物车由80件扩容到120件; 2018年由120件扩容到150件; 2020年由150件扩容到180件; 2021年京东PLUS会员扩容到了220件。 持续不断的扩容给我们的后端服务带来了巨大的负载压力,因为用户购物车中商品种类数量的增加对应到后端的计算资源也会线性增加,如何做到资源最大限度的节约又能保证业务和用户的体验不受影响,如何从技术和业务层面综合考量为逐步扩容的购物车诉求做好底层的支撑,一直以来都是摆在我们面前的一个痛点和挑战。 首先描述下京东购物车的特性: 用户在购物车操作完商品后会记录下用户当前的操作状态,比如勾选,反勾选,切换促销后的商品促销信息等,当用户再次进入购物车后会全量获取购物车中的所有商品,根据商品的勾选态,促销等实时计算商品的价格,展示给用户。每次刷新或者修改购物车商品都是全量数据下发。持续扩容势必会持续加大后端服务的压力,同时购物车页面的布局计算、渲染等操作不仅使用户等待页面刷新的时间变长,而且还会占用大量的内存资源,导致手机卡顿。 京东购...
- 下一篇
OceanBase 安全审计之身份鉴别
本文主要以 MySQL 和 OceanBase 对比的方式,来介绍 OceanBase(MySQL 模式)安全体系中关于身份鉴别的相关内容,包括身份鉴别机制、用户名组成、密码复杂度、密码过期策略等。 作者:金长龙 爱可生测试工程师,负责 DMP 产品的测试工作。 用户鉴权 OceanBase下的身份鉴别机制 OceanBase 数据库目前只支持密码验证方式,使用的是 MySQL Authentication Protocol(MAPI) 协议进行用户鉴权。该协议基于客户端机器上的 MySQL 客户端帐户完成身份验证,要求客户端具有正确的用户名和密码才能连接到 OceanBase 服务器。下面是身份鉴权的具体过程: 客户端发起连接请求到 OceanBase 服务器 OceanBase 服务器发送随机字符串 (Nonce) 给客户端 客户端使用发送来的随机字符串以及正确的用户名和密码,进行哈希加密计算 客户端将加密后的 Token 发送回 OceanBase 服务器 OceanBase 服务器验证客户端发送的解码结果是否正确 如果解码结果正确,OceanBase 服务器允许客户端连接服务器...
相关文章
文章评论
共有0条评论来说两句吧...