从项目一开始,推动其进展的核心价值就是“通过减少总体执行时间来增强运行Jenkins作业的用户体验”。必威国际有限公司

为了实现这一目标,我们提出了一条道路:

  • 使用性能基准进行比较两个现有的Git实现i.e CligitaPiimpl和JGitaPiimpl

  • 使用结果来创建一个特性,这将提高git插件的整体性能

  • 此外,修复现有用户报告的性能问题

让我们乘坐旅程来了解我们如何建立新功能。如果您想跳过旅程部分,您可以直接进入[重大绩效改进]节和[次要性能部分]看看我们都做了些什么!

发布之旅

该项目始于决定选择Git操作,然后尝试使用使用的操作命令行git.然后用JGit

第1阶段:基准结果与Git获取

git-fetch-results

  • git获取的性能(平均执行时间/操作次数)与存储库的大小密切相关

  • 在存储库规模上存在一个拐点,拐点之后,存储库的性质JGit性能变化(开始下降)

  • 在运行多个基准测试之后,可以有把握地说,对于大型存储库来说是这样的命令行git.将是更好的实施选择。

  • 我们可以利用这种洞察力来实现一个避免的特性JGit大的存储库。

第2阶段:比较平台

该项目还担心操作系统之间可能存在重要的差异。例如,如果Windows上的命令行Git与Linux或FreeBSD上的命令行Git执行起来非常不同,那该怎么办?运行基准测试以比较几个平台上的获取性能。

对400mib大小的存储库执行git fetch操作:

  • AMD64微软络筒机

  • AMD64 FreeBSD

  • IBM PowerPC 64 Le Ubuntu 18

  • IBM系统390 Ubuntu 18

运行该实验的结果如下:

多个平台上的性能

在性能上的差异Git.JGit在所有平台上保持不变。

一个平台上的基准测试结果适用于所有平台。

第3阶段:Git获取和存储库结构的性能

git存储库图

包围每个参数的圆的面积表示git获取操作的性能和该参数之间的正相关性的强度。从图:

  • 聚合对象的大小为主导的玩家决定git取回的执行时间

  • 分支的数量和标记的数量起到了类似的作用,但是被存储库的大小所掩盖

  • 提交次数对运行git fetch的性能影响很小

在从第一阶段到第三阶段进行了这些实验之后,我们开发了一个解决方案,叫做GitToolChooser这在下一阶段解释

阶段4:使用Git工具选择器更快地签出

此功能负责从中选择最佳实现用户把它交给了插件.它根据存储库的大小决定是否推荐实现。下面是它的工作原理

git穿孔即兴表演

上面的图像描绘了我们在GSOC项目过程中执行的性能增强功能。这些改进使得结账步骤已完成在过去的一半之内在某些情况下早些时候。

让我们分两部分讨论性能改进。

重大绩效改进

主要性能增强

使用Jenkins管道构建Tensorflow (~ 800mib),完成一项必威国际有限公司工作的总时间减少了50%以上!结果是多个平台的一致性。

这种下降的原因是事实JGit当我们讨论大型存储库时,性能会下降。因为GitToolChooser知道这个事实,所以它选择推荐命令行git.而是将用户节省了一段时间。

小的性能改进

注意:在使用新的性能特性之前启用JGit,让GitToolChooser使用更多选项这是如何

git小穿孔

使用Jenkins管道构建git插件(~ 20 MiB),有一个必威国际有限公司第二在启用性能增强时,遍布所有平台。此外,消除了冗余获取可降低GIT服务器上不必要的负载。

造成这种变化的原因是JGit执行比命令行git.对于小型存储库(<50MiB),因为已经预热过的JVM更有利于本机Java实现。

发布

前方的路

  • 来自其他分支源插件的支持

    • 像GitHub分支源插件或GitLab分支源插件这样的插件需要扩展git插件提供的扩展点,以便于交换由特定git提供者托管的远程存储库的大小相关信息

  • 必威国际有限公司Jenkins-63519.: GitToolChooser预测错误的实现

  • 将此特性添加到GitSCMSource

  • 检测访问控制器上存在的缓存目录的锁相关延迟

    • 这个问题是由插件维护者Mark Waite报告的,有必要首先重现这个问题,然后找到一个可能的解决方案。

伸出援手

请随时联系我们关于项目的任何问题或反馈加特渠道或者必威国际有限公司Jenkins开发者邮件列表.在詹金斯报告一个问题必威国际有限公司贾拉

关于作者
Rishabh Budhouliya.

GSOC 2020年jenkins项目的学生(Git插件必威国际有限公司性能改进)。渴望在软件开发方面更好,并在开源社区参与更多。