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 |
|
||||
|
連載 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カーネルの開発体制などについて伺った |
|
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|