3月版 Linusの片腕、Andrewの夢は「結合テストを楽に」


上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2008/3/31

linux-kernelメーリングリスト(以下LKML)かいわいで起きるイベントを毎月お伝えする、Linux Kernel Watch。2008年2月のLKMLでどんなことが起きたのか見てみましょう。

diffstatが長過ぎる!

 Linusは2月もLinuxカーネルの開発を順調に進めていました。2月10日にリリースされた2.6.25-rc1は、特に大きなリリースでした。2.6.24のリリースとマージウィンドウの再開を待ち望んでいたパッチが大量にたまっていたためか、Linusによると、パッチの容量は11Mbytesに達したそうです。

 続く2.6.25-rc2のリリースで、Linusは変更概要のまとめ方に新しい方式を導入しました。これまではdiffstatの出力を使っていたのですが、gitに「dirstat」という機能を追加し、そちらを利用するようにしたのです。

関連記事:
リンク 2005年5月版 BitKeeperからgitへ、ソースコード管理ツール大変更
http://www.atmarkit.co.jp/flinux/rensai/watch2005/watch05a.html

 diffstatを使ってファイル単位で変更量を見ると、あまりに詳細過ぎ、全体としてどれが変わったのかを把握するのが困難になっていました。そもそもLinux Kernelのリリースごとのdiffstatが長過ぎるという問題もありました。

git diff --stat v2.6.25-rc1..v2.6.25-rc2|cat
Documentation/00-INDEX | 2 +
Documentation/DocBook/Makefile | 2 +-
Documentation/DocBook/filesystems.tmpl | 20 +
Documentation/DocBook/kernel-api.tmpl | 84 -
Documentation/DocBook/networking.tmpl | 106 +
Documentation/RCU/NMI-RCU.txt | 2 +-
Documentation/SubmitChecklist | 16 +-
Documentation/cpuidle/core.txt | 23 +
Documentation/cpuidle/driver.txt | 31 +
Documentation/cpuidle/governor.txt | 29 +
Documentation/cpuidle/sysfs.txt | 79 +
Documentation/kprobes.txt | 11 +-
Documentation/sched-rt-group.txt | 59 +
Documentation/sysctl/kernel.txt | 2 +-
MAINTAINERS | 11 +-
Makefile | 4 +-
arch/alpha/kernel/osf_sys.c | 4 +-
arch/alpha/kernel/time.c | 15 +-
arch/blackfin/kernel/time.c | 8 +-
arch/blackfin/kernel/traps.c | 12 +-
arch/cris/arch-v10/lib/memset.c | 397 ++--
arch/cris/arch-v32/lib/memset.c | 398 ++--
arch/frv/kernel/time.c | 6 +-
arch/frv/kernel/vmlinux.lds.S | 4 +-
arch/ia64/Kconfig | 7 +
arch/m68knommu/kernel/time.c | 12 +-
arch/m68knommu/platform/5206/Makefile | 4 +-
arch/m68knommu/platform/5206e/Makefile | 4 +-
arch/m68knommu/platform/520x/Makefile | 4 +-
arch/m68knommu/platform/523x/Makefile | 4 +-
arch/m68knommu/platform/5249/Makefile | 4 +-
arch/m68knommu/platform/5272/Makefile | 4 +-
arch/m68knommu/platform/527x/Makefile | 4 +-
arch/m68knommu/platform/528x/Makefile | 4 +-
arch/m68knommu/platform/5307/Makefile | 4 +-
arch/m68knommu/platform/532x/Makefile | 4 +-
git diff --stat v2.6.25-rc1..v2.6.25-rc2の出力

 これに対しdirstatは、ディレクトリごとにどれくらいの変更が行われたかをまとめて出すことで、大まかな変更履歴の把握を可能にします。dirstatは、Git 1.5.5の新機能としてマージされました。

2.1% Documentation/
3.7% arch/cris/
7.0% arch/sh/configs/
4.4% arch/sh/kernel/
4.9% arch/sh/mm/
17.8% arch/sh/
23.8% arch/
33.5% drivers/net/
6.0% drivers/scsi/lpfc/
7.1% drivers/scsi/
4.5% drivers/sh/maple/
49.5% drivers/
8.1% fs/
2.5% include/linux/
4.5% include/
7.2% kernel/
2.0% net/
509 files changed,
14470 insertions(+), 6986 deletions(-)
git diff --cumulative --dirstat=2 --shortstat v2.6.25-rc1..v2.6.25-rc2の出力

リリース管理を効率化する新しい動き:linux-next

 Linux Kernelのリリース管理体制にも新しい動きがありました。

 最近、Andrew Mortonの-mmツリーのリリース間隔が長くなってきました。この問題点と解決策を、Andrew Morton本人が「Andrew's Dream」として提示したところ、Stephen Rothwellがそれを実装すべく立候補したのです。

 Andrew Mortonは手動で-mmツリーを管理していましたが、ソースコードレベルで変更の衝突(コンフリクト)が多発しており、マージ作業に要する時間が長引くようになっていました。また、開発者たちが単体でのテストは行っても、相互にマージした結果までテストしなくなってきているという悩みもありました。最終的にLinusのツリーとしてリリースされるまで、変更の相互作用については十分テストされていなかったのです。

 現状を打開するため、「多くの部分を自動化し、より頻繁に、例えば毎日マージした結果をリリースし、その結果を自動テストなどの方法で継続的にテストするべきだ」というのがAndrew Mortonの提案でした。

 このプロセスでテストを通らないパッチについては、自動的にマージ対象外になるなどの措置を取り、さらに、一定期間マージ対象に入らなかったものは次のLinusのツリーのマージウィンドウでもマージされないという体制とすることで、品質やテスト状況を改善するインセンティブになることを狙っています。

 2月14日、バレンタインを祝うかのようにlinux-next Gitリポジトリが颯爽(さっそう)と登場しました。

 Stephen Rothwellによると、このGitリポジトリのstableブランチはLinusのツリーです。そして、このGitリポジトリのmasterブランチは、次のマージウィンドウに向けて開発が進んでいる、各メンテナのツリーの最新版を自動的にマージした結果ということです。マージ対象はGitやquiltで公開されているものを半自動的に取得しています。これまでのところコンフリクトもあまり起こらず、順調な滑り出しのようです。

 linux-next Gitリポジトリほぼ毎日リリースできており、最初の対象は6ツリーだけだったのが、3月20日現在で50のツリーをマージするまでになっています。

 自動コンパイルの仕組みも用意され、多くのアーキテクチャ用にクロスビルドできることが確認されています。マージウィンドウを経て初めてほかのパッチとの相互作用が確認されていたというそれまでの問題点も改善されたので、フィードバックのサイクルが短くなります。今後の開発に良い影響があるといいですね。

 なお、linux-next Gitリポジトリのmasterブランチは、Linusのツリーに対して頻繁にrebase()されているのでご注意を。

注:Git用語で、異なるリビジョンをベースにある変更を適用すること。この例では、毎回Linusの最新版がベースになり、それに対してマージしていることを指す。前回チェックアウトしたlinux-nextと次にチェックアウトしたlinux-nextとでは履歴がつながらないので注意

 それから、「このツリーはどうやって追跡したらよいのか」という質問が出たところ、Chris Wedgwoodが、LinusのGitツリーをチェックアウトした後でリモートブランチとして管理すればよいと小技を披露しました。

$ git remote add linux-next git://git.kernel.org/pub/scm/linux/kernel/git/sfr/linux-next.git
$ git fetch linux-next

 以上の操作で、このツリーをリモートブランチ「linux-next/master」として取得することができます。後は普通のリモートブランチとして操作すれば大丈夫です。

$ git log -p linux-next/master
      →ログを確認

$ git checkout linux-next/master
      →linux-nextの最新版をワーキングコピーとして
       チェックアウト
linux-nextに対してのgitの操作例

参考:
リンク linux-next Gitリポジトリ
git://git.kernel.org/pub/scm/linux/kernel/git/sfr/linux-next.git
リンク マージされているツリーの一覧
linux-nextツリーの「Next/Trees」ファイル
リンク linux-nextツリーのウェブページ
http://linux.f-seidel.de/linux-next/
リンク linux-nextツリーのビルドの結果サマリページ
http://kisskb.ellerman.id.au/kisskb/branch/9/

 

1/2

Index
Linux Kernel Watch 3月版
 Linusの片腕、Andrewの夢は「結合テストを楽に」
Page 1
 diffstatが長過ぎる!
 リリース管理を効率化する新しい動き:linux-next
  Page 2
 そろそろ来るか? ext4
 vmspliceのセキュリティホールで大騒ぎ
 -stableの進ちょく

連載 Linux Kernel Watch


 Linux Squareフォーラム Linuxカーネル関連記事
連載:Linux Kernel Watch(連載中)
Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします
連載:Linuxファイルシステム技術解説
ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する
特集:全貌を現したLinuxカーネル2.6[第1章]
エンタープライズ向けに刷新されたカーネル・コア
ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する
特集:/procによるLinuxチューニング[前編]
/procで理解するOSの状態

Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する
特集:仮想OS「User Mode Linux」活用法
Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説
Linuxのカーネルメンテナは柔軟なシステム
カーネルメンテナが語るコミュニティとIA-64 Linux
IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間