关于图数据库:Antlr4-社区重大贡献TuGraph-优化-C-Target-并发性能提升10倍

30次阅读

共计 2967 个字符,预计需要花费 8 分钟才能阅读完成。

(预计浏览工夫:6 分钟)

最近,TuGraph 团队发展了一项令人振奋的优化工作,胜利将 Antlr4 C++ target 的并发性能晋升超过 10 倍!这一优化计划已被 Antlr4 开源社区激情接收,将给寰球的 Antlr C++ 生态开发者带来更好的应用体验。PR 地址:

https://github.com/antlr/antlr4/pull/4237

图查问引擎是一种用于查问图数据库的工具,它应用特定的查询语言(如 Cypher 或 ISO GQL)来执行和操作图数据库。这些查询语言容许用户形容图模式并查问图数据,例如查找特定节点或查找节点之间的门路。

对于 Antlr4

Antlr4 是一款备受欢送的开源解析器生成器,可能依据语法规定疾速生成自定义解析器。其反对 LL(*)解析,领有更弱小的错误处理能力和更快的解析速度。不仅如此,Antlr4 还反对 Java、Python、C++、JavaScript、Go 等 10 种目标语言,广泛应用于多种开发语言生态中。简略易用的 API 和文档使得开发人员可能疾速上手。无论是编程语言、数据格式、编译器还是解释器等畛域,Antlr4 都施展着重要作用。

驰名的开源我的项目如 Apache Spark、Eclipse IDE 和 MongoDB 等都抉择了 Antlr4。对于语言工具开发者而言,Antlr4 是不可或缺的工具,能大幅提高开发效率和代码品质。

当 TuGraph 遇见 Antlr4

ISO GQL(ISO/IEC 39075)是一种标准化的图数据库查询语言,蚂蚁团体是其次要贡献者之一。因而,Antlr4 作为一种弱小的解析器生成器,成为了蚂蚁图数据库 TuGraph 生成 GQL 解释器的现实抉择。Antlr4 可能帮忙团队更快、更精确地构建图数据库的查询语言,从而进步产品性能和用户体验。

然而,当咱们从开发场景来到生产场景,超高的并发量带来一个重大问题:Antlr4 C++ target 的并发性能不足以反对所需的超高并发 GQL 申请。通过调研并与 Antlr 开源社区探讨,咱们发现 并发性能这个问题普遍存在,并且在过来 5 年中继续困扰着 C ++ 生态的开发者。咱们决定解决这个问题。

咱们做了哪些工作

在调研探讨的过程中咱们发现,多位开发者在论坛提出其耗时甚至多于 Java target 数倍之多,见文末参考【1,2,3,4】。因而,咱们决定从问题和开源代码登程,来定位、解决问题。

这是一个典型的并发程序优化问题,依据以往的程序优化教训,咱们分步推动该问题的解决:

(1)辨认问题

通过对程序运行时的性能数据进行收集和剖析,咱们找到了程序运行瓶颈所在,通过调用剖析,初步将问题定位为数据竞争导致的并发问题。

(2)深刻浏览 Antlr4 开源代码

接下来,咱们对 Antlr4 的源代码进行认真的浏览和了解,把握其外部的构造和外围逻辑,找出了外围的数据结构和要害的调用链路。为咱们破解性能难题和剖析批改的正确性做好了筹备。

(3)梳理数据竞争链路

根据上述剖析,咱们判断问题的症结极大概率是数据竞争造成的。造成数据竞争至多有两个条件:一是线程之间共享内存数据,二是至多存在两个线程去读写某个共享内存。

进一步地,咱们通过分析程序中的并发拜访状况,找到了可能引发数据竞争的所有代码段和共享变量(次要为 DFA、ATN 等构造),拼接出了数据竞争的残缺链路。

(4)破解数据竞争问题

数据竞争问题是多线程程序中常见而又简单的问题,能够思考通过破解多种竞争条件来解决。就本文问题来说,也存在多种破解计划抉择,如何制订最优的解决方案是一项极具挑战的工作,次要难点有两个:

(i)保障批改后程序的正确性 / 稳定性

(ii)保障计划的有效性(低成本)

重复推演后,咱们抉择了提交给社区的优化计划(PR 地址见参考【6】),即通过扭转要害数据的 ownership 接触对锁的依赖。针对上述两个难点的剖析如下:

通过源码剖析并与开源社区探讨,咱们确认要害数据结构的初始化构建是十分耗时的,但能够通过“只调用一次”(\`call_once\`)伎俩将老本均摊,而后续的增量构建绝对开销较低,并且也可均摊。因而该优化计划的低工夫老本是能够保障的。

对于程序正确性的保障,咱们通过双重验证来保障。首先在设计之初咱们曾经从源代码角度,推断出共享数据依然是平安的,其次咱们也设计了试验对此进行了验证,验证后果与咱们的剖析统一(见下图)。

奉献和成绩

优化的成果非常显著,32 线程的并发性能晋升超过 18 倍 ,如下图所示(16 外围 CPU 测试平台,性能测试代码仓库见【5】)。思考到理论生产服务器性能远高于测试机型,理论的性能晋升成果将比测试后果更高, 优化后 GQL 解析能力已能齐全满足企业业务的须要。

充斥播种的社区互动

提案的互动过程波折也充斥乐趣。当波及到多线程代码的批改时,官网开发团队会分外审慎,因为这波及到零碎的稳定性和性能。他们会进行认真的测试和评估,确保批改不会引入新的问题或升高零碎的性能。为此社区引入了多达 7 名评审专家(个别提案的评审人多为 1~2 人),长达 60 屡次的重复探讨不仅是评审专家了解提案的过程,也让咱们理解了很多 Antlr4 代码背地深层的设计理念,能够更好地利用它来构建高性能、可保护的语法分析器。

通过此项优化工作,咱们播种了更多与其余社区贡献者合作的教训,多位 Antlr4 社区成员也对 TuGraph 团队的工作表白了感激,Antlr4 负责人评估该提案为“一个重大的奉献”(a major contribution)。

参考文献

【1】antlr4 doesn’t scale on a computer with 8 or more cores, https://github.com/antlr/antlr4/issues/2454

【2】Parsing with C++ target 5x slower than Java, https://github.com/antlr/antlr4/issues/2584

【3】Performance Issues Running Cpp Runtime on Many Threads, https://github.com/antlr/antlr4/issues/3938

【4】Why the C++ target is 6X slower than the Java target, https://stackoverflow.com/questions/52528982/why-the-c-target-is-6x-slower-than-the-java-target

【5】The test repo: https://github.com/wangtao9/antlr4-perfopt-test

【6】Optimize the concurrent performance of Cpp target by more than 10 times, https://github.com/antlr/antlr4/pull/4237

欢送关注 TuGraph!

https://github.com/tugraph-family

https://tugraph.antgroup.com/

END

往期回顾

→ TuGraph 阿里云收费试用、技术注释,更有丰盛互动奖品

→ 蚂蚁图数据库再获 LDBC 权威测试世界第一

→ 蚂蚁团体开源图数据库 TuGraph,成立图计算开源委员会

▼ 关注蚂蚁图计算,理解最新资讯

正文完
 0