暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

倚天 710 助力 PolarDB-PG 降本增效

原创 内核开发者 2024-02-20
422

在信息时代下,数据无疑是企业的核心资产。作为承载核心数据的基础软件,数据库是企业 IT 系统中最重要的基石。随着数据库承载的业务体量越来越大,企业对数据库提出了更加严格的高性能、低成本需求。

PolarDB 是阿里云自研的云原生数据库,基于存算分离的架构,具备一写多读、多活容灾、全球部署、HTAP等特性。上线六周年多以来,PolarDB 已经广泛应用到了各行各业,有多篇论文发表在 SIGMOD、VLDB、FAST 等顶级会议上。

倚天 710 处理器作为平头哥半导体发布的首颗为云而生的 CPU 芯片,单芯片容纳高达600亿晶体管,基于 ARMv9 架构,内含 128 核 CPU,集成 DDR5、PCIe 5.0 等技术,能够适配云的不同应用场景。

云原生数据库 PolarDB PostgreSQL 版 100% 兼容 PostgreSQL,高度兼容 Oracle 语法。为用户提供快速弹性、高性能、海量存储、安全可靠的数据库服务,同时支持阿里云自研 Ganos 多维多模时空信息引擎及开源 PostGIS 地理信息引擎。

目前,云数据库 PolarDB PostgreSQL 版已经推出倚天 ARM 版本的标准版实例,以阿里云弹性计算服务的倚天 ECS 作为资源池,与 CIPU 等基础设施深度融合。客户业务无需针对倚天版的 PolarDB for PostgreSQL 数据库实例做任何适配,只需要将业务的数据库连接地址修改为倚天 ARM 版的实例即可,真正实现无缝迁移。在成本只有同规格 x86 架构标准版实例 30%~46% 的前提下,PolarDB PostgreSQL 版在倚天 710 处理器上进行了全链路的性能优化,使其性能能够大幅超过运行在 x86 或倚天 ECS 上相同规格的自建 PostgreSQL 数据库。

全栈性能优化

为充分发挥倚天 710 处理器所能够释放的硬件能力和性价比优势,PolarDB 数据库研发团队联合平头哥半导体的倚天团队和阿里云基础设施团队,从最底层的硬件开始直到最上层的数据库内核做了针对性的全栈优化,使 PolarDB PostgreSQL 版能够最大程度地释放倚天 710 的算力。

倚天 710 芯片优化

在性能方面,倚天 710 处理器相对于传统 CPU 具有三大优势:

  1. 倚天 710 内的 128 个核心为独享物理核,而传统 CPU 架构中则是两个 vCPU 共享一个物理核;独享物理核避免了超线程核的争抢而引发的性能波动问题
  2. 倚天 710 使用 ARM v9 指令集,相比于传统架构指令集更加精简,再加上先进的 5nm 制程工艺,使倚天的功耗只有传统 CPU 架构的 1/6。倚天的高规格实例可以实现线性性能增长,不存在传统 CPU 架构因为功耗过大、温度上升而导致降频的问题
  3. 倚天 710 的每个物理核独享 L1/L2 缓存,不存在传统 CPU 架构上两个 vCPU 共享 L1/L2 缓存所带来的争抢问题;此外,倚天 710 的 L3 缓存达到了 128MB,能够极大提升云场景下的访存性能

受益于倚天 710 处理器的主频从上线早期 2.75GHz 的限制提高到目前的 3.0GHz,PolarDB 得以进一步挖掘倚天 710 芯片的潜力。此外,由于数据库的内存访问模式较为随机,过于激进的硬件预取可能无法提高缓存命中率,反而会增加内存带宽的使用,因此数据库场景中不适合使用通用的硬件预取策略。我们在倚天 ECS 实例上按照数据库的访问模式为 PolarDB 调整了倚天 710 上的硬件预取策略,取得了显著的性能收益。

微架构优化

PolarDB 研发团队联合平头哥倚天团队对 PolarDB PostgreSQL 版的运行时负载进行了 top-down[1] 分析,从微架构的层面对 OLTP 场景下 PolarDB 在倚天 710 处理器前端和后端的瓶颈进行了针对性的优化。比如,对于一些热点的条件分支,我们将会通过调整汇编代码的布局,使分支预测正确的概率更高,从而降低 i-TLB、i-cache 的缺失率;对于发生 D-TLB 缺失、D-cache 缺失较高的热点代码,我们针对性地插入了部分软件预取指令,从而降低 PolarDB 在处理器后端的停顿。

操作系统优化

PolarDB 研发团队与阿里云操作系统团队合作,针对承载 PolarDB 的 Linux 发行版 Alibaba Cloud Linux [2] 进行了深度优化。借助负载反馈编译优化(Profile Guided Optimization, PGO)技术,我们使用 PolarDB 的压力负载数据影响操作系统的编译过程,使编译得到的操作系统内核能够在 PolarDB 的负载上取得更加优秀的性能;我们启用了透明大页和代码段大页特性,将 PolarDB 数据库的代码段通过透明大页映射,显著降低了 i-TLB 缺失率。

PolarDB 还使用了阿里云操作系统团队开源的 AI 算法与专家知识库双轮驱动的操作系统全栈式智能优化产品 KeenTune [3],对操作系统上影响性能的关键参数进行调优。比如通过设置多队列网卡相关的参数,尽量使用更多的 CPU 进行数据的接收和发送,同时通过调整网卡队列数尽量减少软中断打断 CPU 的频率;调整了 CFS 调度器参数,使系统能在高压力场景下合理调度数据库进程,保证处理器资源的充分利用。

编译器优化

PolarDB 研发团队与阿里云编译器团队协作,借助 Alibaba Cloud Compiler (ACC) 编译器,在 PolarDB PostgreSQL 版的编译链接流水线中做了大量优化。我们通过编译参数启用了 ARM v8.1 的扩展指令集 LSE,优化 ARM 架构上的原子操作,提升数据库中的锁性能。我们为 PolarDB PostgreSQL 版分别启用了编译期负载反馈优化(Profile Guided Optimization, PGO)、链接时优化(Link Time Optimization, LTO)、链接后二进制优化(BOLT),取得了明显的性能提升。PGO 能够借助 OLTP 的典型负载指导 ACC 编译器对代码的作出更好的优化;LTO 能够在多个目标文件之间寻找更多的编译优化机会,使优化不止局限于单个目标文件内;BOLT 能够使用通过 CoreSight [4] 采集到运行在倚天 710 上的精确 LBR 数据,在二进制层面对热点分支和函数的顺序进行重新排布,显著降低 PolarDB PostgreSQL 版在倚天 710 上运行运行期间的 i-cache 缺失率。

PolarDB PostgreSQL 版数据库优化

除了底层的硬件、操作系统和编译器,PolarDB 研发团队在 PolarDB PostgreSQL 版的源码层面针对倚天 710 的 ARM 架构做了较多优化。

平头哥倚天团队借助倚天 710 的架构优势,通过算法设计、向量化、指令优化等方式,重新实现了数据校验、原子操作、自旋锁、压缩算法、加密算法等常用库函数的优化版本,封装为高性能函数库。PolarDB 研发团队将数据库中常用的热点操作,如内存拷贝 memcpy、内存比较 memcmp、CRC32C 校验、原子操作、自旋锁等,替换为高性能函数库中的优化后版本,缩短了 SQL 处理的关键路径上消耗的时间。

PolarDB 研发团队还通过使用 ARM v8 的 NEON 和 ARM v9 的 SVE2 等 SIMD 指令,将源码中的紧凑循环进行了向量化替换。对于数据库中高并发负载下碰撞激烈的 WAL 日志插入锁、数据页面扩展锁、自旋锁、轻量级锁等,PolarDB 研发团队也在源码层面针对 ARM 架构进行了优化,提升了高并发负载下系统的扩展性。

测试结果

我们对运行在倚天 710 芯片上的 PolarDB for PostgreSQL 14 版本实例与运行在 x86 和倚天 710 芯片上的 PostgreSQL 14 数据库实例进行了性能对比。

  • 实例规格:8C32G,4T PL3 ESSD
  • 测试工具:sysbench
  • 测试场景:8 张表,每张表 32000000 行,约 64 G 数据
  • 测试场景:oltp_read_write,包含点查询、范围查询(带有聚合、排序、去重)等读负载,插入、删除、更新(带索引或不带索引)等写负载的混合场景,近似于绝大部分的 OLTP 典型负载

数据准备方法:

sysbench \
    --db-driver='pgsql' \
    --rand-type='uniform' --histogram='on' --percentile='95' \
    --events='0' --report-interval='1' \
    --tables='8' --table-size='32000000' \
    --threads='32' --time='500' \
    --pgsql-host='xxx' --pgsql-port='xxx' --pgsql-db=yourdb \
    --pgsql-user='xxx' --pgsql-password='xxx' \
    ./oltp_read_write.lua prepare

测试运行方法:

sysbench \
    --db-driver='pgsql' \
    --rand-type='uniform' --histogram='on' --percentile='95' \
    --events='0' --report-interval='1' \
    --tables='8' --table-size='32000000' \
    --threads='1~256' --time='500' \
    --pgsql-host='xxx' --pgsql-port='xxx' --pgsql-db=xxx \
    --pgsql-user='xxx' --pgsql-password='xxx' \
    ./oltp_read_write.lua run

测试结果:

经过测试,PolarDB for PostgreSQL 14 的性能远高于同类型的云上 PostgreSQL 14 数据库。oltp_read_only、oltp_write_only 等场景的测试结果类似,不再赘述。

总结

PolarDB 与倚天 710 的组合充分发挥了阿里云的技术优势,通过自底向上的全链路优化,实现了算力释放和降本增效,为用户的数据库选型提供了更具性价比的可选项。后续,PolarDB PostgreSQL 版将会继续在倚天 710 处理器上深度优化,比如数据页面压缩、临时文件压缩与针对倚天 710 优化后的压缩算法结合,为用户带来更低的存储成本;比如透明数据加密与针对倚天 710 优化后的密码算法(包括国密)结合,为用户提供可信安全且透明高效的解决方案;借助倚天 710 与阿里云 CIPU 的架构优势,通过 eRDMA 为用户提供更加低时延的数据库访问等。敬请期待。

关于 PolarDB PostgreSQL 版的更多定价信息与自研功能可参阅阿里云官网文档 [5]。

[1] A Top-Down method for performance analysis and counters architecture

[2] Alibaba Cloud Linux_aliyun linux_Linux操作系统_计算-阿里云

[3] KeenTune—智能化调优&容量评估-阿里云开发者社区 (aliyun.com)

[4] CoreSight - ARM Hardware Trace

[5] 云原生数据库 PolarDB PostgreSQL 版

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论