7月版 ファームウェアの置き場所を巡ってフレームウォー


小崎資広
2008/7/31

linux-kernelメーリングリストかいわいで起きるイベントを毎月お伝えする、Linux Kernel Watch。OLS(*注)が近いこともあり、急に活動が活発になる人もいれば、逆に発表準備で忙しく、まったくパッチを投稿しなくなる人も出てきて千差万別です。では、2008年7月のカーネル関係の状況について見てみましょう。

注:Ottawa Linux Symposium、http://www.linuxsymposium.org/2008/

Linux 2.6.26リリース

 7月13日にLinux 2.6.26がリリースされました。2.6.25からだいたい3カ月後のリリースであり、時期については大方の予想通りといえるでしょう。Linusはリリースノートにおいて「通常のリリースサイクルよりちょっと長いかな」なんて書いてますが、改善するつもりはあんまりないようです。

 さて、以下は今回の新機能のピックアップです。

■リードオンリー・バインドマウント

 「バインドマウント」というのは、ファイル階層の一部を、どこか別の場所に再マウントすることができる機能です(man mountを参照)。

 Solarisでは、似たような機能である「lofs」を使って、Solaris Container用のプライベートなファイル階層を構築しています。しかし残念ながら、Linuxのバインドマウントでは読み取り専用マウントがサポートされていなかったため、仮想化コミュニティにとって非常に使いづらいものでした(/bin、/usrなどがゲストOSから書き換え可能な状態では、危なくて公開できません)。

 リードオンリーマウントの実装により、バインドマウントの利用が進むと見られています。もちろん通常のchrootにも応用可能なので、Webサーバ管理者にとってもうれしい改善といえそうです。

■Per-process securebits

 securebitsは簡単にいうと、「rootになったときでも、特権を得られないようにする」機能です。なぜ頭にわざわざ「Per-process」と付いているかというと、いままでもシステム全体に作用するsecurebitsは存在したからです(もちろん、全ユーザーがroot特権を得られないとなると、まるで運用にならないので、誰も使っていませんでした)。

 これに対してPer-process securebitsでは、文字通りプロセス単位でこれを制御します。例えば、ルート特権を必要としないデーモンにこのsecurebitを立てておくことにより、システムの堅牢性を高めることができます。

 このパッチでcapability関連の変更は一段落したので、次はディストリビューションがユーザー空間の整合性に四苦八苦する番、という印象です。

■KGDB

 コードが大きく複雑なため、長年「絶対カーネルにはマージされない」といわれ続けていたKGDB(linux kernel source level debugger)ですが、2.6.26でとうとうマージされました。KGDBは、慣れ親しんだGDBインターフェイスでカーネルをデバッグできるため、組み込み系開発者やドライバ開発者を中心に根強い人気がありました。

 現在x86とSPARCのみがサポートされていますが、サポート対象は順次、ほかのアーキテクチャにも拡大していくと思われます。

関連記事:
リンク 5月版 マージウィンドウなんか1週間に縮めちゃえ?
http://www.atmarkit.co.jp/flinux/rensai/watch2008/watch05b.html

■cgroupによるデバイスホワイトリスト

 これも仮想化関連の機能です。現在のシステムでは、chrootでファイル階層を切り離しても、一度rootになってしまいさえすれば、mknodを使って好きなディレクトリにデバイスが作成できてしまいます。悪用すれば、ディスクをフォーマットしてしまうなど、かなり広範囲な悪事を働くことが可能でした。

 デバイスホワイトリストは、それをcgroup単位で制御し、デバイスのメジャー番号/マイナー番号に基づいて許可/不許可を設定できるようにする機能です。

■Memtest

 メモリチェッカーがカーネルにマージされました。本家memtestには機能的に劣りますが、実用上は十分です。

 いまどきのパソコンは、フロッピーディスクドライブのような外部ブートデバイスをまったく持っていないことも珍しくありません。このため、いざメモリの問題と思しき現象に遭遇したときに、メモリテストプログラムが実行可能な環境を構築するのは簡単ではありませんでした。

 ところがLKMLにはメモリ化けが原因としか思えないクラッシュレポートが定期的に投稿されており、このようなときに簡単にメモリテストを行えないと、開発者に大きなストレスが溜まってしまいます。

 この機能によって簡単にメモリテストができるようになれば、こういった不要な負担が減るのではないかと予想されています。

■その他

内容
futex FUTEX_FDの削除
sysrq 全CPUのバックトレースを表示する機能の追加
vmalloc /proc/vmallocinfoにサイズ・アドレスや呼び出し元情報などを表示
proc /proc/[pid]/smapsにファイルごとのスワップアウト量の情報を追加
PCI PCI ExpressのASPM(Active State Power Management)を実装
x86 カーネルのダイレクトマッピング領域を1GBページに置くことにより高速化(x86_64のみ)
x86 prctlによりユーザープロセスがTSCを取得するのを拒否できるように
x86 NexGenサポートコードの削除
x86 OLPC(One Laptop Per Child)アーキテクチャのサポート
EXT3 fdatasyncの速度向上

ドライバ用ファームウェアの置き場所はどこ?

 7月3日の2.6.26-rc8-mm1リリースとともに、何人かの開発者から、ネットワークカードのドライバメンテナに対し「ブート時にエラーメッセージが出てネットワークが使えないよ」というバグがほぼ同時に報告されました。これがフレームウォーの始まりでした。

 実はこの問題は、ネットワーク関係の開発者ではなく、ファームウェア管理コードの開発者がドライバを変えてしまったことによって引き起こされていました。

 最近の拡張カードの中には、汎用的なCPUとメモリが搭載されており、OS起動後にカードに制御ソフト(ファームウェア)を転送することで動作させるものが多々あります。一部では、そのファームウェアのコードをカーネル内に埋め込んでおくのは、GPLのライセンス上問題があるといわれていました。しかし、特殊なハードウェア専用のファームウェアのソースコードを読めたところで誰もうれしくないので、いままでは利便性が優先され、その部分は放置されていました。

 ですが、ユーザー空間からファームウェアをロードする基盤コードの実装から5年が経ち、また無線LANなどの使用経験からノウハウも溜まってきたとの判断から、David Woodhouseにより、対象ドライバが大幅に拡大されたのです。

 しかしこの変更により、カーネルビルド時の手順が変わるにもかかわらず、事前にアナウンスはまったくありませんでした。この結果、多くのユーザーがトラブルに見舞われることになりました。また、いくつかのディストリビューションでは、mkinitrd/mkinitramfsに問題があり、簡単に移行できないことも分かりました。

 ネットワークドライバ開発者側から見ると、自分が作った問題じゃないのにバグ報告が山ほど飛んでくる上、一部の原理主義的なライセンス解釈をしている人々以外にとっては、ファームウェアを分離できても何のメリットもありません。そのため、一部の原理主義者によるトラブルに無理やり巻き込まれているように感じたらしく、このスレッドはフレームウォーになってしまいました。

 結局、この問題はデフォルト値を従来と同じ動作に変更することで話がまとまりました。しかし今後は、ライセンス的なポリシーから、ファームウェアを分離したカーネルを採用するディストリビューションも増えてくると思われます。

 ちなみに、Linusは議論が収まってから「なんで5年も前に実装した機能についていまさら議論してんの?」と暢気にコメント。相変わらずLinusは、人のメールを読んでいません。

6月版へ
1/2

Index
Linux Kernel Watch 7月版
 ファームウェアの置き場所を巡ってフレームウォー
Page 1
 Linux 2.6.26リリース
 ドライバ用ファームウェアの置き場所はどこ?
  Page 2
  今年のカーネルサミットの議題は
 CGroupに2つの拡張提案
 「AVXをどう使えばいいの?」「使うべきじゃない」
 -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 記事ランキング

本日 月間