11月版 ドライバに変数を渡すのにうってつけの方法
上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2005/11/29
デバイスドライバの変数の設定はどうしたらよいか
「ユーザー空間からデバイスドライバにパラメータを渡す方法は何がよいのか」という議論がありました。この話題はそれなりに人を引き付けるようで、10月には2つ独立したスレッドがありました。「ioctlを使うのがよいのか、sysfsを使うのがよいのか」という疑問から、「実はそれよりもたくさん選択肢がある」という話題に展開していきました。
Kyle Moffettたちによると、以下のような選択肢があるとのことです。
- ioctl
古くから伝統的に使われている手法です。バイナリ構造体を直接書き込む方式のため、32/64bitが混在する場合は型変換が必要になってしまいます。例えば、x86_64環境で64bitカーネルと32bitのアプリケーションを実行する場合などに問題になります。もちろん欠点ばかりではありません。バイナリ構造体をカーネルに渡し、戻り値を同じ構造体の中に返してもらうということができるため、トランザクション処理には便利です。
- /dev/以下のファイルに対してread/write(例:/dev/dvb)
バイナリデータの読み書きが発生するため、ioctlと同様に型変換などの問題が発生します。
- /procファイルシステム
昔はよく利用されていたインターフェイスです。/procは今後、できるだけプロセス関連の情報に限定したいので、ハードウェアドライバ関連についてはsysfsを使いましょう。
- /sysfsファイルシステム
パラメータごとにファイルを作成し、設定や確認ができるようにします。便利な機能ですが、欠点もあります。例えば、複数のファイルにパラメータを分散した場合、atomicに同時に複数のパラメータを設定することができない(トランザクション処理ができない)という点が挙げられます。
- モジュール起動時のオプション
モジュールのパラメータを指定するには簡潔で良い方法ですが、一度起動したものに関しては変更できないという欠点があります。
これら以外にも、block-driverやnetlink、configfsを使うなどの案もありました。
Jeff Garzikはalsa-libやlibsdiなどの例を挙げて、「共有ライブラリをユーザー空間に提供して、ユーザープログラムに対しては複雑な内部構造を露呈しない仕組みを提供するのが一番良いのかもしれない」と提案しました。
好みの問題もあるでしょうし、各手法には一長一短あるため、開発者がドライバに値を渡す方法について悩む日々はまだまだ続きそうです。
2つの-stableリリース
10月にリリースされた安定版は次の2つです。なお、最近はChris Wright(ChrisW)がリリースしていたのですが、今月は久しぶりに2.6.13.4をGreg Kroah-Hartman(Greg K-H)がリリースしていました。
- 2.6.13.3(10月3日)
・TCP関連の修正
・skgeがbondingで動かなかったことに関する修正
・UMLのx86_64での修正
・IPVS(IP Virtual Server)の修正
・IPv6の修正
・de_threadでバグ状態を確認する処理自体にバグがあったのを修正
・yentaがoopsするのを修正 - 2.6.13.4(10月10日)
・IEEE1394/SBP2デバイスの接続解除時の処理の修正
・rinocoドライバのデータをパディングする
・TCPのBICのアルゴリズムが間違っていたことの修正
・sparc64(SPARC64)のFPUの扱いの修正
・CONFIG_AUDITSYSCALLの場合のメモリリーク修正
・drmデバッグがどのユーザーでも有効にできてしまっていたのを修正
・request_key_authのメモリリークの修正
参考リンク: | ||
2.6.13.yの gitリポジトリ (ChrisW) |
http://www.kernel.org/git/?p=linux/kernel/git/chrisw/linux-2.6.13.y.git;a=summary | |
2.6.13.yの gitリポジトリ (Greg K-H) |
http://www.kernel.org/git/?p=linux/kernel/git/gregkh/linux-2.6.13.y.git;a=summary |
メモリ空間のフラグメント化対応
サーバをしばらく運用していると、いろいろなサイズのメモリ確保や解放が繰り返され、メモリの物理空間はフラグメント化されていきます。そこで、まずはフラグメントの発生を低減するためのパッチをMel Gormanが「Fragmentation Avoidance V19」というタイトルでLKMLに投げました。それに応答して、実装をめぐる熱い議論が展開されました。
メモリホットプラグなどを実装するには、この機構が必要になるはずとのことです。また、長時間の運用にメモリのフラグメント化は付き物のなので、今後の展開が気になります。
ソースツリーってどうなってるの?
Paolo Ciarrocchiが、「Linuxのリリースが現在どのように取りまとめられているのか教えてほしい」と質問しました。これに対して、Jaspur Juhlが、「各リリースの情報についてドキュメントにまとめた。カーネルのソースツリーのDocumentation/applying-patches.txtに置いてある」と答えました。
このドキュメントで、2.6.x.y(-stable)、-rc、-git、-mmの各パッチの場所と、パッチをどのように適用したらよいのかが説明されています。また、それぞれのツリーが持つ意味についても簡単にまとめられています。
こうしたドキュメントが今後もメンテナンスされていくと便利ですね。
(以上、敬称略)
2/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」コマンドです。
|
|