GaussDB关键技术原理——高性能之多核处理器优化
GaussDB关键技术原理——高性能之多核处理器优化
鲲鹏ARM服务器多CPU-socket架构下跨NUMA内存访问延迟存在严重的不对称,远/近端内存访存时延有成倍数差异,同时相比x86内存访问时延高50%、并发控制原语代价高2-3倍,在数据库中会以进一步恶化OLTP瓶颈,尽管通常在架构下CPU物理核心数相比x86有了一定提升,但如果不合理设计和实现数据库内核关键数据结构、线程调度模型无法充分利用ARM多核的优势,如何优化NUMA带来的访问时延问题,如何充分利用众核CPU解决并发控制问题成为了鲲鹏上优化数据库OLTP负载性能的主要挑战。使用标准事务型负载TPMC benchmark测试结果96核x86 135w,128核ARM在NUMA优化前只有110w tpmC左右。
GaussDB Kernel根据ARM处理器的多核NUMA架构特点,进行针对性一系列NUMA架构相关优化,主要围绕三个方面进行:
(1)线程调度访存本地化:减少跨核内存访问的时延问题,让线程调度尽可能在单个NUMA节点内,同时针对高频热点数据结构通过适当的冗余保留在本地,减少跨NUMA远端内存访问。
(2)ARM多核算力优化:针对鲲鹏ARM体系下计算核心多的优势,对数据库查询处理、数据库缓冲区脏页处理、WAL日志等关键处理流程进行multi-thread多级流水线改造,将原有单线程处理流程下发给多个CPU-线程进行并行处理提升总体性能。
(3)ARM指令集优化:借助ARMv8.1引入的新的原子操作LSE,将大量的可转换为原子类型操作(plus、minus、CAS)的部分,替换为ARM硬件相关原语LSE指令集,从而提升多线程间同步性能,例如工作线程-WAL写入性能等。