Git插件性能提升是一个谷歌Code 2020夏季项目.它旨在提高git插件的性能,该插件提供了基本的git功能。

在内部,插件使用两个实现来提供这些功能:git命令行JGit(纯java实现)

git-intro

CLI git是插件的默认实现,用户可以在需要时切换到JGit

该项目分为两个平行阶段:

  • 阶段1:使用JMH(一个微型基准测试工具)创建基准测试,评估CLI git和JGit提供的git操作的执行时间。

  • 第二阶段:将从分析中获得的见解应用到插件中,以提高插件的整体性能。

该项目还旨在修复插件中现有的性能瓶颈。

基准

基准测试是使用JMH.它是在GSoC 2019项目詹金斯必威国际有限公司。

  • JMH是通过Jenkins Unit Test Harness POM依赖在插件中提供的。必威国际有限公司

  • 的JMH基准在git客户端插件中创建并运行

  • 在阶段1中,我们已经为两个操作创建了基准:“git fetch”和“git ls-remote”

结果和分析

git fetch的基准分析:

Git获取结果

git-fetch-results

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

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

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

  • 我们可以利用这一点来实现一个特性,在大型存储库中避免使用JGit。

请参考pr - 521以便对这些结果作详尽的解释

注意:库规模意味着du - h .

修复冗余读取问题

GIT插件在执行远程GIT存储库的新结账时执行两个获取操作而不是一个获取操作。

修复这个问题,我们必须安全地删除第二个取回,同时牢记多个用例。修复本身并不难编码,但是要在不破坏任何现有用例的情况下安全地完成修复是一项具有挑战性的任务。

进一步的计划

在第一阶段巩固基准策略后,下一步将是:

  • 为git插件提供功能,使其能够估计存储库的大小,而无需克隆它。

  • 扩大基准策略的范围

    • 考虑像分支数量、引用和提交历史这样的参数来寻找与git操作性能的关系

    • git插件依赖于其他插件,比如Credentials,这可能需要对插件本身以及这些外部依赖对插件性能的影响进行基准测试

  • 关注插件的其他用例

    • 对于第1阶段,我主要关注签出步骤和与之相关的操作

    • 下一阶段,重点将转移到其他领域,如多分支管道或组织文件夹

你能帮什么忙?

如果您已经读到这里,那么您可能会对这个项目感兴趣。

要想帮忙,你可以

关于作者
Rishabh Budhouliya

GSoC 2020学生Jenkins项目(Git Plu必威国际有限公司gin Performance improvement)。希望在软件开发方面做得更好,并更多地参与开源社区。