Linux Kernel Watch

10月版 Reiser4と激怒するLinuxカーネル開発者たち

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

RCU導入でファイルアクセスにロックが不要に?

 Linusが発表した2.6.14-rc1でのもう1つの大きな変更は、read/writeのシステムコールを処理する際にロックを必要としなくなったことではないでしょうか。

 従来は、ファイルディスクリプタを利用する際に、毎回ロックが必要だったそうです。VFSの改良で、read/writeがspinlockを必要としなくなりました。この影響により、CPU数が多いシステムで複数のCPUを利用したプログラムが大量にファイルシステムI/Oを発行するような事態の改善が期待できるようです。

 RCU(Read-Copy Update)機構は、2.6系列でLinuxカーネルに新しく導入された機能です。従来spinlockを使っていたような場面で、メモリの参照処理が書き込み処理より大幅に多いような場合に、うまく連結リストとガベージコレクションの原理を利用してspinlockを不要にし、メモリ参照処理の速度を高速化するものです。

編注:RCUについては、「全貌を現したLinuxカーネル2.6[第1章]」も参照。

 RCUは、少しずついろいろな部分で採用が進んでいますが、単純にspinlockを利用する場合よりもメモリリークを含んだコードを書きやすいため、慎重なデバッグが必要です。

参考(カーネルツリー内):
ファイルのロック方法についてのドキュメント Documentation/filesystems/files.txt
RCUについてのドキュメント Documentation/RCU/以下

gitのコマンドの一部がリネームされる

 Linuxカーネルのソースコード管理ツールgitの開発は、相変わらず活発に続いています。gitのメンテナであるJunio C. Hamanoは、9月中旬にgitのコア部分の0.99.7をリリースしました。このリリースで、gitの一部のコマンドの名前がまた変更になりました。

 今回の発表の内容で特に気になるのは次の2つです。

用語を整理して用語集を作りました。いままでcacheと呼んでいたものは、今後indexと呼ぶことにします。一部のコマンドは-cacheという名前が付いていましたが、今後は-indexという名前にします(git-checkout-indexなど)。また、今後は-pullではなく-fetchと呼びます。

注:iノードばかりいじっているカーネル開発者にとって、ディレクトリのファイル一覧はキャッシュかもしれませんが、一般的なユーザーの感覚では、それは索引です。

また、一部のシェルスクリプトとして実装されているコマンドは-scriptという名前で終わっていましたが、今後は-scriptを付けない名前に変更します。

 相変わらずインターフェイスが安定しませんが、それに追い付くようにJeff Garzikが利用手順を丁寧にまとめています。彼がまとめてくれているおかげで、かろうじてみんなgitが使えるのではないでしょうか。

 ただ、git grepなどの便利そうなコマンドが追加されていたりもするので、たまには腰を据えてマニュアルページをじっくり読んでみるのもよいのかもしれませんね。

参考リンク:
Jeff Garzik
「カーネルハッカーのためのgit howto」
http://linux.yyz.us/git-howto.html

Serial Attached SCSI対応をめぐる攻防

 Luben Tuikovは、「I request inclusion of SAS Transport Layer and AIC-94xx into the kernel」というスレッドで、SAS(Serial Attached SCSI)の機構をカーネルにマージするように要求しました。既存のSCSIの「HCIL」(Host/Channel/ID/LUN)機構は時代遅れでSASを十分に表現できていない。だから書き直す必要があるだろう、と彼は主張しました。

 ただ、彼のパッチは「既存のSCSI coreの修正ではなく、SCSI coreを一部独自に実装するような内容になっている」と既存のSCSI coreのメンテナたちが反論しました。

 うまいことマージができる仲介役がいればうまく治まりそうなのですが、今後の動きに期待です。

-stableのアップデート

 今月も順調に-stableアップデートが出ていました。カーネル2.6.13で大幅に変更になったPCI関連のコード修正とセキュリティアップデートが主な内容だったようです。

  • 2.6.13.1(9月10日) 11パッチ
    • raw_sendmsg DoS、sendmsg()のセキュリティ、オーバーフローの修正とそのほかの簡単な修正
    • 2.6.13でlibpcapが動作せず、tcpdumpが動かなくなったことに関する修正
    • PCIの初期化関連の修正

  • 2.6.13.2(9月17日) 12パッチ
    • fputに関するセキュリティ修正
    • USBのftdi_sioのボーレートの修正
    • PCI初期化関連の修正
    • VMAの修正
    • JFS関連のoopsの修正
    • Masqueradeの変更によりDHCPが動作しなくなったことについての修正
    • ネットワークドライバの修正など
参考リンク:
2.6.13.yの
gitツリー
http://www.kernel.org/git/?p=linux/kernel/git/chrisw/linux-2.6.13.y.git;a=summary

DynTicksの続報

 先月お伝えしたDynTicksの開発はまだ続いているようです。Srivatsa Vaddagiriたちがx86用のパッチを改良して投稿しました。

 Russel Kingは、「各アーキテクチャで内容を同期した方が良い」と主張しました。Srivatsa Vaddagiriはそれに対して「現在、x86用、s390用、arm用の3つの実装が存在するがまだ見ていないし、内容を同期するのは少なくとも1つのアーキテクチャでそれなりにまともに動くところまで開発してからでよいのではないか」と答えました。

 しかし、どちらにしても調整は必要だろうということで、実装の比較などが始まりました。ただ、ARM用のSMP対応はまだRussel Kingの手元にあるだけで本流にマージされていないなどの状況もあり、簡単にはいかなかったようです。

 果たして、x86、ARM、S390を含む全アーキテクチャで同じように動くDynTicksのインターフェイスは作成できるのでしょうか?

devfs削除との戦い

 Greg Kroah-Hartman(以下Greg K-H)は、devfsを削除するための新しいパッチを投稿しました。

 2.6.13ではdevfsが利用できなくなっていました(編注)が、実はカーネルの設定を行うmake menuconfigなどで利用する制御ファイル(Kconfigファイル)から関連個所を削除しただけでした。これによりdevfsを有効化できなくしていただけで、ソースコード自体にはdevfs対応部分が残っていたのです。

編注:devfsの削除については、Linux Kernel Watchの
 「8月版 割り込み頻度変更で消費電力は低下するか?
も参照。

 ただ、2.6.13がそのような状態でリリースされたにもかかわらずあまり苦情は出なかったので、本格的にソースコードから削除する目的で登場したのがGreg K-Hの新しいパッチというわけです。devfsを利用しているユーザーから見ると、ndevfsは仕様が違い過ぎ、またudevは動作にユーザーランドを必要とするうえに動作負荷が高いといった問題があります。

 devfsの削除に不満を持っている人はたくさんいるようですが、「消さない方がよい」とGreg K-Hを納得させるまでには至っていません。今後もdevfs愛用者たちの苦難は続きそうです。

(以上、敬称略)

2/2

Index
Linux Kernel Watch 10月版
 Reiser4と激怒するLinuxカーネル開発者たち
  Page 1
 Reiser4のマージは前途多難
 ついにFUSEがLinusのツリーに
  Page 2
 RCU導入でファイルアクセスにロックが不要に?
 gitのコマンドの一部がリネームされる
 Serial Attached SCSI対応をめぐる攻防
 -stableのアップデート
 DynTicksの続報
 devfs削除との戦い

連載 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 記事ランキング

本日 月間