作者:石臻臻, CSDN博客之星Top5、Kafka Contributor 、nacos Contributor、华为云 MVP ,腾讯云TVP, 滴滴Kafka技术专家 、KnowStreaming PMC)。
KnowStreaming 是滴滴开源的Kafka运维管控平台, 有兴趣一起参与参与开发的同学,但是怕自己能力不够的同学,可以联系我,带你一起你参与开源!。
1任务背景
国际大环境就不用多说了。
对于数据库类的关键业务,全国产技术(国产CPU+国产数据库)和国外主流技术在性能上相比还有不小的差距,经常需要借助分布式技术使用数倍的硬件才能获得类似的效果。
国产编程语言SPL的问世,可以方便程序员写出(比SQL)更短小简单且计算量更低的代码(针对同样计算任务),能够对采用SQL的主流数据库形成明显的效率和性能优势。这样,在国产CPU上运行用SPL编写的数据库运算,就可能获得在国外CPU上运行SQL数据库的同样性能,甚至大幅超过。从而使数据库运算类的关键业务实现全国产技术替代。
本次测试设计了三个计算任务,涉及常规查询、复杂在线查询和离线跑批任务,分别在海光、龙芯、飞腾三款国产芯片上运行后看效果,并对比历史上在国外芯片上运行的情况。
2系统配置
海光 | 龙芯 | 飞腾 | |
CPU | 2颗 7285,共64核 | 4颗 3C5000,共64核 | 2颗 2500,共128核 |
RAM | 256G | 256G | 256G |
硬盘 | SSD | SSD | SSD |
OS | 麒麟 V10 | Loongnix | 麒麟 V10 |
SPL | 开源社区版202208 |
3测试一 常规查询,TPCH 100G
TPCH是国际标准,具体内容不再过多解释。
需要说明的是,TPCH虽然有22个题,但仍然不能全面反映出被测系统对实际业务的响应性能。主要原因如下两点:
1.TPCH中问题比较常规,没有涉及序运算,分步运算也较简单。而实际业务中有性能瓶颈的运算,其复杂度通常会远高于TPCH,会大量涉及序运算和分步计算;
2.测试问题已经被长期公开,有些数据库可能会专门做相应的优化;
当然,作为国际标准,也会有一定的参考价值。
TPCH各题的SPL写法可参考:从 TPCH 测试学习性能优化技巧
测试结果(单位:秒)
海光 | 龙芯 | 飞腾 | Intel+Oracle | |
Q1 | 25 | 40 | 33 | 131 |
Q2 | 2 | 4 | 3 | 27 |
Q3 | 8 | 19 | 15 | 222 |
Q4 | 4 | 12 | 9 | 207 |
Q5 | 15 | 20 | 27 | 225 |
Q6 | 3 | 7 | 8 | 135 |
Q7 | 11 | 18 | 21 | 184 |
Q8 | 13 | 20 | 28 | 192 |
Q9 | 31 | 63 | 58 | 234 |
Q10 | 10 | 19 | 16 | 215 |
Q11 | 2 | 5 | 4 | 33 |
Q12 | 7 | 19 | 13 | 184 |
Q13 | 97 | 195 | 152 | 37 |
Q14 | 6 | 22 | 20 | 157 |
Q15 | 12 | 22 | 24 | 155 |
Q16 | 9 | 19 | 15 | 13 |
Q17 | 9 | 13 | 25 | 165 |
Q18 | 7 | 21 | 14 | 344 |
Q19 | 9 | 16 | 16 | 154 |
Q20 | 7 | 12 | 16 | 175 |
Q21 | 19 | 24 | 24 | 326 |
Q22 | 23 | 37 | 33 | 48 |
AVG | 14.95 | 28.5 | 26.09 | 161.95 |
AVG-G | 9.68 | 19.22 | 18.36 | 125.56 |
1.海光、龙芯、飞腾均以32线程运算,初步的测试表明,大多数运算在这个并行数下最快。
2.AVG行是22个题的平均时间;AVG-G行是几何平均数,这样能反应出性能差距的倍数关系,规避某些题因为普遍都慢在简单平均时权重太大的问题。
3.最右边对比列,硬件环境:2颗Intel 3014 1.7G共12核,64G内存;Oracle运行12线程。因CPU主频及并行数不同,没有直接可比性,但仍有参考价值。
4.SPL的Q13的表现有点特殊,因为Q13在这个线程数时,会占用过大内存;而SPL用Java实现,内存不足时会导致大量的垃圾收集时间。本次测试目标不是调出每个题的最优性能,就没有刻意再优化它。
4测试二 离线数据准备,国家天文台聚类计算
这是国家天文台的实际业务,测试也采用了真实数据。
共11张照片,每张有500万天体,将位置(天文距离)邻近的天体聚合成一个计算属性。期望计算时间在数小时内,因为每天都会有新的照片拍摄出来,必须当天处理完。
本任务的数据量不大(<10G),但计算量非常大,和规模的平方成正比。
用某分布式数据库动用100个CPU,仅处理50万天体也需要3.8小时,处理500万目标规模预计需要15天,不具有实用性。
详情可参考:SPL 提速天体聚类任务 2000 倍
测试结果(单位:小时)
并行数 | 16 | 32 | 64 |
海光 | 3.91 | 2.39 | 2.21 |
龙芯 | 6.65 | 4.04 | 3.96 |
飞腾 | 9.27 | 5.33 | 3.64 |
更高并行没有表现出线性加速,主要是因为这个问题的特殊性,运算步骤之间有依赖关系,各个线程会有重复计算,无法做到线性提速。
三款芯片均可以在目标数据规模时达到任务要求的时间指标,性能都具有实用性。
5测试三 在线查询,电商漏斗计算
电商漏斗是典型的有序计算,需要统计在指定时间窗口按指定次序发生多次事件中前N个的用户数,以便计算用户流失率为营销动作提供依据。
这是用户行为分析中很常见的计算,也是传统数据库很难高速完成的计算。
漏斗计算的细节和SPL加速方法可参考:SQL 提速:漏斗转化分析
本题是美国一家电商企业的真实案例,漏斗共有5步,计算难度较高。使用该企业在某个分站点一个月的脱敏数据,规模接近4亿行。这个运算用SQL在美国著名云数据仓库Snowflake的Medium级服务器(相当于64核)上三分钟未跑出结果,用户期望不超过30秒。
测试结果(单位:秒)
并行数 | 32 | 16 | 8 | 4 |
海光 | 16 | 18 | 29 | 59 |
龙芯 | 32 | 41 | 59 | 101 |
飞腾 | 25 | 30 | 44 | 76 |
三款芯片在32线程时的运算性能可以达到或接近用户的期望值。
6补充说明
1.测试海光时还使用过CentOS,性能表现要比使用麒麟时有较明显的优势(天文台运算64线在1.5小时内完成);测试飞腾时仅使用了麒麟,有可能其性能被操作系统影响;龙芯的Loongnix看起来表现较出色。
2.在龙芯上还做过一个军方外围任务测试:在82亿行的脱敏海事数据中按时间段和经纬度范围查找经过船只,龙芯上SPL的执行性能大概相当于Intel3014的50%,仍比Intel8260上的MySQL快了数倍到上百倍(和时间段宽度有关)。
7初步结论
1.海光的性能表现明显在三者中最强,性能大约是龙芯和飞腾的两倍。龙芯总体较飞腾稍弱,但差距不是很大,在长时间小并行任务中还能胜出。
2.使用SPL编程时,这三款国产芯片都能胜任数据仓库类的复杂计算场景,能赶上甚至大幅超越国外芯片上国外数据库的性能,完全可应用于关键的数据计算任务。