3月版 Greg K-H、デバイスドライバ無料開発宣言!?


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

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

ノートPCや組み込み機器に有効な新機能とは?

 2月4日にLinuxカーネル2.6.20がリリースされました。KVM(Kernel-based Virtual Machine)マージ後の初の公式リリースです。KVMは、その後の-rcリリースでABI(Application Binary Interface)変更を何度かしているので、現状ではまだ利用者泣かせの状態といえます。いまは最新版が動く組み合わせを追跡するだけでも大変なので、安定するまで待つ方が賢明かもしれませんね。

 さて、その後の-rcリリースに目を移してみましょう。

 2.6.21-rc1でマージされた面白い機能として、dyntick/NO_HZがあります。Linuxカーネルは、通常1秒間に100回(現在はCONFIG_HZとして250、300、1000、1024回などから選択できる)程度以上のタイマー割り込みが発生することを前提に設計されています。その割り込みが発生するタイミングで、jiffies(注)と呼ばれるカウンターが増えたり、タスクの切り替えなどが発生します。

注:Linuxのタイマー割り込みの周期ごとにインクリメントされる変数。

 しかし、割り込みが定期的に発生し続けるという状態が好ましくない場合もあります。例えば、何もアプリケーションが動いていない状態にもかかわらず、定期的に割り込みが発生し続けると、CPUに負荷が掛かり消費電力に影響を与えます。ノートPCや組み込み機器の場合には非常に重要な問題です。

 dyntick/NO_HZは、以前紹介したDynTick(注)がマージされたもので、割り込み処理を定期的に行うのではなく、必要なときにしか行わないようにするものです。カーネルのコンパイル時の設定オプションCONFIG_NO_HZを選択したシステムでは、タイマー割り込みベースでの処理が行われなくなります。

注:2005年5月版 BitKeeperからgitへ、ソースコード管理ツール大変更を参照。

 アイドル状態で割り込み処理を行わなくて済むようになれば、仮想化のゲストOSとしてLinuxカーネルを稼働させた場合にも、無駄なCPU負荷を減らせます。dyntick/NO_HZの安定度合いについては、今後判明してくると思いますが、ノートPCからサーバまで広く普及する予感がします。

非同期システムコール機構の登場!

 Zach Brownは、LinuxカーネルのAIO(非同期I/O)の実装のために「fibril」というライトウェイトのカーネルスレッドの仕組みを提案しました。それに触発されたIngo Molnarは「Syslets」を実装しました。

 Sysletsとは、汎用の非同期にシステムコールを発行する仕組みです。非同期I/Oでは、ユーザー空間から非同期にディスクアクセスをするスレッドを開始して、その結果をユーザー空間から取得する仕組みが必要でした。Sysletsは、それを一般化したものです。Sysletsは、ユーザー空間から渡される「atom」という言語のインタプリタとして稼働して、カーネルスレッドで順番にカーネル空間からシステムコールを発行します。

 カーネルモードとユーザーモードの切り替えには、オーバーヘッドが存在するため、可能な限り切り替わる回数を少なくするべきです。Sysletsは、カーネル空間で実行される一連のシステムコールをユーザー空間から定義できます。カーネルは、Syslets用のシステムコールを受けて、別スレッドで一連のシステムコールを実行し、結果を非同期に返します。パフォーマンスが重要な場合のAIOの実装以外にもいろいろと用途がありそうです。

 これは、Ingo Molnarが以前実装した「TUX webserver(注)」での経験を生かして作成した仕組みだそうです。非同期システムコールが、汎用可能な仕組みとなって活用されるとよいですね。

注:TUX webserverとは、カーネル空間でWebサーバを稼働させることで高速に静的なWebページを提供できる機構です。カーネルパッチとして提供されています。

関連リンク:
TUX webserverのパッチ
http://people.redhat.com/~mingo/TUX-patches/

ネットワークデバイスの変更をログに残すべきか?

 Paul Rollandは「ネットワークデバイスが、eth1とeth2しかないので困っている」というメールを投稿しました。これに対して、Benoit Boissinotが「/etc/iftabを見るように」と指摘したところ、存在しないMACアドレスにeth0がアサインされていることが分かりました。起動時にMACアドレスが一致しないためにeth0のネットワークデバイスがeth2にリネームされていたのです。

 Olaf Herringは「それはよくある問題だ」と説明しました。Linuxカーネルの起動メッセージを確認するために、dmesgを見るとeth0とeth1がそれぞれ認識されているように見えますが、途中でネットワークデバイスの名前が変更された場合、dmesgにはその変更が記録されません。そこで、Olaf Herringはネットワークデバイスの変更をログに残すパッチを提案しました。しかし、Dave Millerに「それは'kernel log clutter'(無駄なログを吐き出すだけだ)」と一蹴されてしまいました(netlink socketでデバイス名の変更イベントを取得できるため)。

 ささいな問題のように思えますが、いまもどこかで同じ問題に頭を抱えている方がいるかもしれませんね。

1/2

Index
Linux Kernel Watch 3月版
 Greg K-H、デバイスドライバ無料開発宣言!?
Page 1
 ノートPCや組み込み機器に有効な新機能とは?
 非同期システムコール機構の登場!
 ネットワークデバイスの変更をログに残すべきか?
  Page 2
 デバイスドライバのライセンスはGPLで
 ノートPCのサスペンドで悩む日々
 活発な-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 記事ランキング

本日 月間