1. 简介
PostgreSQL 是一个高度先进的开源对象关系型数据库管理系统(ORDBMS)。它以其可靠性、健壮性、和性能而闻名,经常用于处理从小型应用到大规模、复杂的数据处理任务的各种数据。
作为一个 ORDBMS,PostgreSQL 不仅支持标准的 SQL 数据查询和数据类型,还提供了对复杂数据类型和对象导向数据库特性的支持,例如表继承、函数索引、规则系统等。这使得 PostgreSQL 特别适合处理多样化的数据,可以存储和查询包括文本、地理空间数据、JSON 和 XML 等在内的数据类型。此外,PostgreSQL 提供了强大的事务和并发控制,它的多版本并发控制(MVCC)提供了并发用户高度的隔离性,而不会牺牲读写性能。它还包括对 ACID(原子性、一致性、隔离性、持久性)事务的全面支持,以确保数据库操作的可靠性。
PostgreSQL 的扩展性也是其受欢迎的一个原因。它有一个动态的扩展框架,可以加载新的数据类型、函数、操作符或其他功能,而无需修改 PostgreSQL 核心代码。此外,它还有一个大型活跃的开发和支持社区,社区成员积极开发新功能、修复漏洞,并提供支持。
本文基于倚天ECS硬件平台,以自顶向下的方式从上层应用、到基础软件,再到底层芯片硬件,通过应用与芯片的硬件特性的亲和性分析,实现PostgreSQL与倚天芯片软硬协同的深度优化,充分使能倚天硬件性能,帮助开源PostgreSQL应用实现性能提升。
基于阿里巴巴第八代ECS实例和开源版本PostgreSQL应用,使用Sysbench对基于倚天的第八代实例g8y和基于Intel的第八代最新实例g8i做了对比测试,结果显示:在相同规格下,优化后的第八代倚天ECS实例,在典型性读写混合场景下,领先原生g8i ~31%,进一步对比优化后的g8i版本,倚天优化版本依然能够实现性能领先~7%。
2. 优化手段
平头哥倚天解决方案通用算力团队自底向上对PostgreSQL的性能指标和热点函数进行了详细抓取,并进行了对比分析,从硬件性能完成度指标出发,对开源PostgreSQL应用的特点进行了分析,从涉及应用性能瓶颈的Frontend Bound和Backend Bound指标出发对应用进行自顶向下的全栈优化。
具体包括应用层参数配置优化、OS层配置及内核优化、编译器层优化、微架构分析优化、硬件能力优化等。
- 应用层:
- 对PostgreSQL应用侧关键参数进行分析,结合当前的规格配置,针对倚天g8y实例进行适配优化,结合当前内存、cache等配置合适的shared buffer、wal buffer size、cacheline align size等激发硬件性能潜力。
- 针对数据库并发场景下最常见锁冲突瓶颈,PostgreSQL结合倚天芯片指令进行针对性的优化,通过重新设计spinlock的实现、优化指令操作等方式,有效降低了并发场景下的锁冲突问题。
- OS层:
- 基于PostgreSQL运行时系统特点,针对涉及脏页回收、TCP网络包处理以及调度等相关的系统参数进行优化,提升CPU利用率,最大程度发挥倚天性能优势。
- 配置OS 64K透明大页,以使能PostgreSQL的原子写,进一步降低IO写入代价。
- 通过开启代码段大页,将应用程序代码段 (.text) 通过file THP映射,减少TLB entry开销,显著降低iTLB miss,降低了整个系统中的资源竞争。
- 为了减少网络中断处理时由于频繁的上下文切换带来的性能损耗,通过“网卡中断聚合”的方式,针对SMP IRQ affinity和RPS做了相关调整,将多个网络队列绑定到一个核上,聚合处理能带来CPU iCache使用效率提升。
- 编译器层:
- 使用链接时优化(LTO)技术,扩展了编译器过程间分析的范围,全局优化数据库代码,降低iCache Miss。
- 对OS内核及PostgreSQL服务端应用进行PGO(Profile Guided Optimization)优化。通过更优的代码冷热重新布局,降低在典型场景运行时应用的Frontend Bound。
- 启用jemalloc优化,能够加速内存分配和回收,以减少PostgreSQL的内存管理成本,加速数据查询和写入速度。
- 微架构分析优化:
- 基于我们自主研发的Micro-Optimizer微架构分析优化工具,通过抓取运行时指令流,进行分支跳转分析,建立基于Basic Block的分析模型,可以获取更精确的代码冷热情况,可以在PGO的基础上进一步降低iCache Miss,减少应用的Frontend Bound。
- 基于倚天特有的SPE特性,结合我们的Micro-Optimizer微架构分析优化工具,能够实现对运行时指令流中的ldr/str等访存指令进行分析建模,捕获PostgreSQL在不同场景下的dCache Miss情况。通过分析热点并结合指令预取或缓存锁定等优化手段可针对特定数据进行缓存优化,从而降低应用的Backend Bound。
- 硬件能力优化:
- 通过合适的硬件预取策略配置,可以进一步发挥倚天的硬件能力。数据库的内存访问与常见workload不同,访问模式更加随机,不适合通用的数据预取策略。在数据库场景下,过于激进的数据预取可能无法提高缓存命中率,反而会增加内存带宽的使用,并且在缓存中填充无效的数据。调整预取策略,为缓存设置合理的指令预留,能给PostgreSQL带来显著的性能收益。
- 启用LSE指令扩展,使用原生的CAS 等指令实现数据库的原子操作,优化了加锁、解锁等操作的性能,极大提高了数据库高并发场景下的性能。
综上所述,从PostgreSQL应用本身出发,基于应用在倚天硬件平台上的top-down性能指标,通过软硬协同的手段,拉通应用-OS-基础软件-芯片硬件全面实现对应用性能的优化,实现Frontend Bound和Backend Bound的显著降低,充分使能和榨取硬件性能。其中有部分优化手段也适用于x86,我们在x86上也进行了同样的优化,也获取了一定的性能收益,但是综合来看在倚天上优化效果更佳,PostgreSQL性能也最终得以反超x86。
3. 性能测试
在性能测试中,我们选用数据库场景的典型8C32GB环境配置进行测试,服务端详细配置如下:
Terms |
g8y.2xlarge |
g8i.2xlarge |
CPUs |
8 |
8 |
Memory |
32GB |
32GB |
Disk |
100GB PL0 |
100GB PL0 |
OS |
Alibaba Cloud Linux release 3 (Soaring Falcon) |
Alibaba Cloud Linux release 3 (Soaring Falcon) |
Kernel |
5.10.134-15.al8.aarch64 |
5.10.134-15.al8.x86_64 |
GCC |
Alibaba 10.2.1-3.5 2.32 |
Alibaba 10.2.1-3.5 2.32 |
PostgresSQL |
REL_15_4 |
REL_15_4 |
CFLAGS |
default in pgsql |
default in pgsql |
基础配置为PostgreSQL默认参数配置,对于优化配置,我们已将PostgreSQL所有优化手段集成在ptg-accelerator中,可以在基于开源PostgreSQL进行一键调优。
为了能够准确客观的衡量数据库性能,我们使用sysbench作为负载生成器和性能基准测试工具。
在数据库领域中,Sysbench经常被用来测试各种数据库管理系统(如PostgreSQL、MySQL等)在不同负载下的性能表现。它可以模拟并发用户访问数据库,测量数据库的读写能力、事务处理性能和并发连接处理能力等指标。在我们的测试环境中,它被部署在一个32C机器作为客户端,最终的性能以Sysbench压测输出结果为准,性能指标为TPS(Transactions Per Second,数据库每秒执行的事务数)。
g8y.2xlarge |
g8i.2xlarge |
倚天优化收益 |
||||
Read Only |
Read Write |
Read Only |
Read Write |
Read Only |
Read Write |
|
基础性能 |
8318.68 |
5106.18 |
11365.09 |
6970.61 |
0% |
0% |
调优后性能 |
15348.05 |
9169.16 |
14003.04 |
8580.39 |
84.50% |
79.57% |
从上图可以看出,综合当前针对PostgreSQL的优化手段,能够在不同架构和平台下都实现一定的性能提升。但整体而言,基于倚天的硬件优势,多种优化手段能够在倚天上获得较为显著的性能提升,为应用在倚天平台的性能带来更大的性能优势:
- 不论是只读还是读写混合场景下,优化后g8y都能够保持对相同规格优化版本g8i的性能领先;
- 在只读场景下,能够实现g8y性能提升~84%,g8i性能提升~68%;
- 在读写混合场景下,能够实现g8y性能提升~79%,g8i性能提升~68%。
进一步地,通过当前对PostgreSQL的软硬协同优化,对前后端性能瓶颈带来显著缓解,对比倚天平台优化前后性能指标:
- Frontend Bound在iTLB、iCache、branch misses等指标方面显著下降,其中iTLB miss下降一个数量级,branch miss等指标下降接近20%,表明当前的优化有效弥补了PostgreSQL在处理器前端的劣势,能够充分发挥后端带来的处理性能。
- Backend Bound在L1/L2 cache miss方面下降均超过10%,表明当前的优化在硬件处理方面的效率进一步增强,在已有后端计算和处理单元的基础上,高效利用后端的pipeline实现性能提升。
4. 优化总结
基于当前PostgreSQL在硬件前后端应用特征分析,结合开源PostgreSQL应用,针对性地对前后端从应用-系统-编译器-硬件芯片使用多种手段综合的协同优化,显著降低应用在CPU前后端的性能瓶颈,提升应用的IPC,实现开源PostgreSQL在倚天平台上性能的显著提升,领先同代同规格x86硬件,进一步实现ECS第八代倚天实例性价比领先Intel实例超过25%,带来可观的成本优势,欢迎购买使用。