1,700人を超えるさまざまな開発者からのリリースごとに14,000のチェンジセットがあるため、Linuxカーネルが迅速に移動し、多くの複雑さをもたらすことは明らかです。カーネルのバグは、小さな煩わしさから、システムのクラッシュやデータの損失などの大きな問題まで多岐にわたります。
継続的インテグレーション(CI)の必要性が高まるプロジェクトが増えるにつれ、継続的カーネル統合(CKI)チームは、バグがにマージされるのを防ぐという1つの使命を持って前進します。カーネル。
Linuxテストの問題
多くのLinuxディストリビューションは、必要に応じてLinuxカーネルをテストします。このテストは、リリースの前後、またはユーザーがバグを見つけたときによく行われます。
無関係な問題が発生することがあり、メンテナは、何万ものパッチでいっぱいのチェンジセット内のどのパッチが新しい無関係なバグを引き起こしたかを探すためにスクランブルをかけます。バグの診断には、特殊なハードウェア、一連のトリガー、およびカーネルのその部分に関する特殊な知識が必要になる場合があります。
CIおよびLinux
最新のソフトウェアリポジトリのほとんどには、リポジトリに入る前にコミットをテストする、ある種の自動CIテストがあります。この自動テストにより、メンテナはCIレポートを確認することで、ほとんどのバグとともにソフトウェア品質の問題を見つけることができます。 Pythonライブラリなどのより単純なプロジェクトには、このプロセスを容易にするための多数のツールが付属しています。
Linuxは、テストの前に構成およびコンパイルする必要があります。これを行うには、時間と計算リソースが必要です。さらに、そのカーネルは、テストのために仮想マシンまたはベアメタルマシンで起動する必要があります。特定のシステムアーキテクチャにアクセスするには、追加の費用または非常に遅いエミュレーションが必要です。そこから、誰かがバグをトリガーする一連のテストを特定するか、修正を検証する必要があります。
CKIチームの仕組み
Red HatのCKIチームは現在、いくつかの内部カーネル、および安定したカーネルツリーなどのアップストリームカーネルからの変更をフォローしています。各リポジトリで2つの重要なイベントを監視します:
-
メンテナがプルリクエストまたはパッチをマージし、結果としてリポジトリ内のコミットが変更される場合。
-
開発者がパッチワークまたは安定したパッチキューを介してマージするための変更を提案する場合。
これらのイベントが発生すると、自動化が開始され、GitLabCIパイプラインがテストプロセスを開始します。パイプラインがリンティングスクリプトを実行し、パッチをマージし、複数のアーキテクチャ用にカーネルをコンパイルすると、実際のテストが開始されます。 4つのアーキテクチャで6分以内にカーネルをコンパイルし、通常2時間以内に安定したメーリングリストにフィードバックを送信します。毎月100,000を超えるカーネルテストが実行され、11,000を超えるGitLabパイプラインが完了しています(2019年1月以降)。
各カーネルは、次のようなネイティブアーキテクチャで起動されます。
●aarch64:Cavium(現在はMarvell)ThunderXなどの64ビットARM。
●ppc64/ppc64le:ビッグエンディアンとリトルエンディアンのIBMPOWERシステム。
●s390x:IBMZseriesメインフレーム。
●x86_64:IntelおよびAMDワークステーション、ラップトップ、およびサーバー。
これらのカーネルで複数のテストが実行されます。これには、一般的なテストハーネスを使用した無数のテストが含まれるLinuxテストプロジェクト(LTP)が含まれます。私のCKIチームは、44を超えるテストをオープンソース化し、さらに多くのテストを行っています。
参加する
アップストリームのカーネルテストの取り組みは、日々増大しています。多くの企業が、Google、Intel、Linaro、Sonyなどのさまざまなカーネルのテスト出力を提供しています。それぞれの取り組みは、上流のカーネルと各企業の顧客ベースに価値をもたらすことに重点を置いています。
あなたまたはあなたの会社がこの取り組みに参加したい場合は、ポルトガルのリスボンで開催されるLinux PlumbersConference2019に参加してください。会議後2日間のカーネルCIハックフェストに参加して、迅速なカーネルテストの未来を推進してください。
詳細については、Texas LinuxFest2019の講演のスライドをご覧ください。