Simple Science

最先端の科学をわかりやすく解説

# コンピューターサイエンス# ソフトウェア工学

Bazelを使って継続的インテグレーションを最適化する

Bazelを使ったCIビルドの高速化に関する研究。

― 1 分で読む


Bazel:Bazel:CIプロセスを速くするピードに与える影響が明らかになった。研究によると、BazelがCIビルドのス
目次

継続的インテグレーション(CI)は、ソフトウェア開発者がソフトウェアプロジェクトに変更を頻繁に統合するために使う方法だよ。このやり方は、早期にエラーを捕まえてコードの品質を維持するのに役立つ。ただ、CIのビルドが長時間かかると開発が遅くなるから、ビルド時間の最適化が必要なんだ。

多くの開発者は、自分のCIビルドが時間かかりすぎて困ってて、フィードバックを待ってからじゃないと次に進めないことが多いんだ。ビルド時間を改善するためのテクニックが提案されていて、スケジューリングをうまくしたりテストを賢く選んだりすることが含まれてる。Bazelみたいな新しい技術は、ビルドを速めるためにデザインされた機能を提供することで、こういった問題の解決を目指してる。Bazelは人気が出てきてるけど、特に長いビルド時間のプロジェクトにおいてどれほど効果的かはあまり理解されてないんだ。

研究概要

俺たちの研究では、Bazelをビルドツールとして使ってるGitHub上の383のオープンソースプロジェクトを調べたよ。開発者がCIサービスの中でBazelの並列ビルドや増分ビルドの高度な機能をどれくらい使ってるかを見たかったんだ。また、Mavenを使ってるプロジェクトと結果を比較することも目的だった。

パフォーマンスを分析するために、これらのBazelプロジェクトに対して何千ものテストを実行して、これらの機能を使うことでどれだけ時間を節約できるかを調べた。これは、ビルドログを調べたり、様々なプロジェクトの最新コミットを見たりして、BazelがCI環境内でどう機能しているかを評価することを含んでる。

ビルド速度の重要性

素早く効率的なCIビルドプロセスを持つことは、開発者にとって重要なんだ。ビルドに時間がかかればかかるほど、開発者が自分の変更についてフィードバックを待つ時間も長くなって、全体的な進捗が遅れるんだ。理想的には、CIビルドはすぐに終わるべきで、研究によると多くの開発者は10分以内のビルド時間を好むらしい。

でも、研究では多くのCIビルドがそれよりもずっと時間がかかることがわかってる。実際、約40%のビルドが30分以上かかるんだ。ソフトウェア開発が頻繁に行われ、継続的デリバリーのようなプラクティスに頼るようになると、遅いビルドの問題は悪化する可能性が高いんだ。

ビルド問題への従来の解決策

遅いCIビルドの問題に対処するために、いくつかの戦略が提案されてる:

  1. ビルド結果の予測:過去の結果に基づいて、フルビルドが不要なコミットを予測して、不要なビルドをスキップする技術だよ。

  2. コミットバッチ処理:いくつかのコミットをまとめて一緒にビルドすることで、時間を節約できるんだ。

  3. テストの最適化:実行するテストを選んで優先順位をつけることで、ビルド後に必要な総テスト時間を短縮できるよ。

  4. ソースコードの最適化:リファクタリングによって冗長な要素を排除すれば、ビルドが早くなることもあるんだ。

こんな戦略があるけど、従来のビルドシステムは正確性に苦しむこともある。ほとんどの既存ツールは、正確なビルド依存グラフを作成するのに必要な情報を持ってないから、並列ビルドや増分ビルドの際にエラーが起こる可能性があるんだ。

新しいビルド技術

最近、Bazelみたいなアーティファクトベースのビルドシステムが、精度を維持しつつビルドパフォーマンスを最適化する潜在能力で注目されてるよ。GoogleがオープンソースツールとしてリリースしたBazelは、開発者がビルドファイル内でアーティファクトとその依存関係を記述できるようにしてる。この方法は、信頼性の高い並列ビルドや増分ビルドに不可欠な正確な依存グラフを作成するのに役立つんだ。

Bazelは依存関係を効率的に処理できて、ビルド結果のキャッシングを行うから、次のビルドが速くなるんだ。この機能のおかげで、開発者は別のマシン間でビルド結果を共有できるから、パフォーマンスがさらに向上するよ。

研究の質問

この研究では、CIビルド内でのBazelの使用についていくつかの重要な質問に答えることを目指してる:

  1. 開発者は自分のプロジェクトでBazelの並列ビルドや増分ビルド機能をどう使ってるの?
  2. Bazelの並列ビルド機能は、全体のビルドパフォーマンスにどんな影響を与えてるの?
  3. Bazelの増分ビルド機能は、ビルド時間を短縮するのにどれくらい効果的なの?

これらの質問に答えることで、開発者がBazelをよりうまく活用できるようになる手助けをし、その潜在的な利点を理解する手助けができたらいいなと思ってる。

研究方法

これらの質問に答えるために、包括的な方法論を設定したよ:

  1. データ収集:GitHubの検索APIを使って、BazelとMavenプロジェクトのデータを集めたんだ。合計383のBazelプロジェクトと4,727のMavenプロジェクトを特定して、そのビルドプロセスを分析したよ。

  2. CI構成分析:BazelとMavenプロジェクトのCI構成を調べて、CIサービスがどう実装されているかを見たんだ。

  3. パフォーマンス実験:集めたプロジェクトに対して何千もの実験を行い、並列ビルドや増分ビルドがビルド時間に与える影響を測定したよ。

  4. 比較:研究全体を通して、Bazelプロジェクトの結果をMavenプロジェクトと比較して、パフォーマンスや機能の使い方の違いをより理解できるようにしたんだ。

結果

CIビルドにおけるBazelの使用

分析の結果、Bazelプロジェクトのかなりの割合がCIサービスを採用してるけど、Bazelの機能を十分には活用してなかったよ。実際、31.23%のBazelプロジェクトはCI構成内でBazelを使ってなかったんだ。Bazelを使ってるプロジェクトの中でも、多くはその運用を助けるために追加のツールに頼ってた。増分ビルドのためのBazelのキャッシングを利用してるプロジェクトはたったの44.08%だったよ。

並列ビルドの影響

並列ビルドから得られるパフォーマンス向上を見てみると、特に長いビルドにおいてビルド速度が大幅に改善されることがわかったんだ。例えば、速度向上は使用される並列度に応じて2.00倍から12.80倍まで変わったよ。ただ、短いビルドは低い並列度からあまり改善が見られず、最大の並列度でもいくつかのプロジェクトは並列実行から十分な恩恵を受けられなかった。

増分ビルドの利点

Bazelの増分ビルド機能も良い結果を示したよ。長いビルドでは、異なるキャッシング戦略を使ったときに中央値で4.22倍と4.71倍の速度向上が見られたんだ。ただ、短いビルド時間ではその利益があまりはっきりしなかったから、増分ビルドは大きなプロジェクトの方が価値があるってことだね。

結論

この研究は、継続的インテグレーション環境におけるBazelの可能性と課題の両方を強調してるよ。Bazelはビルド時間を短縮するための強力な機能を提供してるけど、多くの開発者は特にCIの設定ではその機能を十分に活用してないんだ。この研究を通じて、Bazelの現在の使用状況を明らかにするだけでなく、最新のビルド技術のもっと広い採用を促進できたらと思ってる。

開発者がCIプロセスを改善しようとしてる中で、Bazelのようなツールの効果を理解することは重要なんだ。開発者がBazelをより効果的に活用できる方法を示すことで、将来的にソフトウェアプロジェクト全体でのビルドパフォーマンスの改善を導く手助けができればと思ってる。

今後の研究

今後の研究では、Bazelの機能のさまざまな側面を、特に異なるプロジェクト環境で探求することができるかもしれないね。特定の機能の使用が限定的な理由を調べることも改善の機会を提供するだろう。また、異なる種類のプロジェクトがBazelの機能にどう反応するかを研究することで、開発コミュニティに貴重な洞察をもたらすことができるかもしれないんだ。

ソフトウェア開発プラクティスの進化において、Bazelのような強力なツールを理解して活用することは、ソフトウェアデリバリーの効率と品質を確保するための鍵なんだ。

オリジナルソース

タイトル: Does Using Bazel Help Speed Up Continuous Integration Builds?

概要: A long continuous integration (CI) build forces developers to wait for CI feedback before starting subsequent development activities, leading to time wasted. In addition to a variety of build scheduling and test selection heuristics studied in the past, new artifact-based build technologies like Bazel have built-in support for advanced performance optimizations such as parallel build and incremental build (caching of build results). However, little is known about the extent to which new build technologies like Bazel deliver on their promised benefits, especially for long-build duration projects. In this study, we collected 383 Bazel projects from GitHub, then studied their parallel and incremental build usage of Bazel in 4 popular CI services, and compared the results with Maven projects. We conducted 3,500 experiments on 383 Bazel projects and analyzed the build logs of a subset of 70 buildable projects to evaluate the performance impact of Bazel's parallel builds. Additionally, we performed 102,232 experiments on the 70 buildable projects' last 100 commits to evaluate Bazel's incremental build performance. Our results show that 31.23% of Bazel projects adopt a CI service but do not use Bazel in the CI service, while for those who do use Bazel in CI, 27.76% of them use other tools to facilitate Bazel's execution. Compared to sequential builds, the median speedups for long-build duration projects are 2.00x, 3.84x, 7.36x, and 12.80x, at parallelism degrees 2, 4, 8, and 16, respectively, even though, compared to a clean build, applying incremental build achieves a median speedup of 4.22x (with a build system tool-independent CI cache) and 4.71x (with a build system tool-specific cache) for long-build duration projects. Our results provide guidance for developers to improve the usage of Bazel in their projects.

著者: Shenyu Zheng, Bram Adams, Ahmed E. Hassan

最終更新: 2024-05-01 00:00:00

言語: English

ソースURL: https://arxiv.org/abs/2405.00796

ソースPDF: https://arxiv.org/pdf/2405.00796

ライセンス: https://creativecommons.org/licenses/by/4.0/

変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。

オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。

著者たちからもっと読む

類似の記事

暗号とセキュリティコンパートメンタリゼーションでモノリシックカーネルを守る

区画化は、一枚岩のオペレーティングシステムでセキュリティを強化する方法を提供する。

― 1 分で読む