从项目一开始,推动其进展的核心价值就是“通过减少总体执行时间来增强运行Jenkins作业的用户体验”。必威国际有限公司
为了实现这一目标,我们提出了一条道路:
使用性能基准进行比较两个现有的Git实现i.e CligitaPiimpl和JGitaPiimpl
使用结果来创建一个特性,这将提高git插件的整体性能
此外,修复现有用户报告的性能问题
发布之旅
该项目始于决定选择Git操作,然后尝试使用使用的操作命令行git.
然后用JGit
.
第1阶段:基准结果与Git获取
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 fetch的性能影响很小
在从第一阶段到第三阶段进行了这些实验之后,我们开发了一个解决方案,叫做GitToolChooser
这在下一阶段解释
阶段4:使用Git工具选择器更快地签出
此功能负责从中选择最佳实现用户把它交给了插件.它根据存储库的大小决定是否推荐实现。下面是它的工作原理.
上面的图像描绘了我们在GSOC项目过程中执行的性能增强功能。这些改进使得结账步骤已完成在过去的一半之内在某些情况下早些时候。
让我们分两部分讨论性能改进。
重大绩效改进
使用Jenkins管道构建Tensorflow (~ 800mib),完成一项必威国际有限公司工作的总时间减少了50%以上!结果是多个平台的一致性。
这种下降的原因是事实JGit
当我们讨论大型存储库时,性能会下降。因为GitToolChooser知道这个事实,所以它选择推荐命令行git.
而是将用户节省了一段时间。
小的性能改进
注意:在使用新的性能特性之前启用JGit,让GitToolChooser使用更多选项→这是如何
使用Jenkins管道构建git插件(~ 20 MiB),有一个必威国际有限公司第二在启用性能增强时,遍布所有平台。此外,消除了冗余获取可降低GIT服务器上不必要的负载。
造成这种变化的原因是JGit
执行比命令行git.
对于小型存储库(<50MiB),因为已经预热过的JVM更有利于本机Java实现。
前方的路
来自其他分支源插件的支持
像GitHub分支源插件或GitLab分支源插件这样的插件需要扩展git插件提供的扩展点,以便于交换由特定git提供者托管的远程存储库的大小相关信息
必威国际有限公司Jenkins-63519.: GitToolChooser预测错误的实现
将此特性添加到GitSCMSource
检测访问控制器上存在的缓存目录的锁相关延迟
这个问题是由插件维护者Mark Waite报告的,有必要首先重现这个问题,然后找到一个可能的解决方案。
伸出援手
请随时联系我们关于项目的任何问题或反馈加特渠道或者必威国际有限公司Jenkins开发者邮件列表.在詹金斯报告一个问题必威国际有限公司贾拉.