上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2005/4/19
sysfsを利用するにはGPLじゃないとダメ?
プロプライエタリなデバイスのためのプロプライエタリなデバイスドライバコードを書いているMark Fortescueが、「デバッグにsysfsを利用したいのに使えない」という苦情をLKMLに出しました。しかし、返答の多くは、バイナリのデバイスドライバモジュールを出していることに対する批判でした。
LinuxカーネルのライセンスはGPLであり、GPL互換でないモジュールはsysfsが利用できないという制約があります。sysfs関連の関数はEXPORT_SYMBOL_GPLでエクスポートされているため、モジュール側のMODULE_LICENSE文で宣言しているライセンスがGPL互換でないと利用できないのです。
sysfs関連のシンボルをEXPORT_SYMBOL_GPLに変更した理由は、sysfsの一貫性を保つため、sysfsを利用するドライバの改変をカーネル側の開発者が実施できるようにするという意図があったからです。この決定を覆すのは難しいでしょう。バイナリドライバは、カーネル開発者がカーネルの開発に追随して自由に変更していくことができないため、好まれていないからです。
しかし、この機構に対してDick Johnsonが苦言を呈しました。従来はGPL互換でないモジュールを利用しても、カーネルのdmesgログに“tainted”になったという警告が出るだけだったのです。しかし、sysfs関連のシンボルをEXPORT_SYMBOL_GPLに変更するとまったく動作しなくなるため、影響が大き過ぎるというのです。
議論はまだまだ続きそうです。
乱数生成の高速化は必要か
David McCulloughが、OCF-Linuxという乱数生成のためのインターフェイスを提案しました。ハードウェアベースの乱数生成器を活用するためのもので、OpenBSDやFreeBSDのインターフェイスの移植だそうです。
その提案に対して、Jeff Garzigが「類似な機能を実現するものはすでにある」と反論しました。彼は、ハードウェア乱数生成器のサポートはすでにLinuxカーネルに含まれており、ユーザー空間で動くrngdというデーモンを利用し、/dev/randomのエントロピー源としてハードウェア乱数発生器を利用できる、とコメントしました。
これに対してEvgeniy Polyakovは、rngdを利用するアプローチの不利な点として、
- ユーザー空間を経由しているため、パフォーマンス上不利
- ハードウェアで乱数を生成してくれるのにそれをエントロピー源としてのみ利用しているため、ソフトウェアで乱数を生成しておりパフォーマンスが出ない
の2つを指摘しました。
彼が、「ハードウェア乱数生成器は55Mbpsくらいの速度が出る」と主張したところ、Herbert Xuは「55Mbpsも乱数が必要な状況があるのかい?」と反論していました。
乱数生成の高速化の必要性について納得できる議論を展開しないと、OCF-Linuxが取り込まれることはなさそうです。
デバイス名の変更が引き起こす混乱
3月上旬に、Russel KingとGreg K-Hが、デバイスのbus_idを決定するルールを変更する“driver core: Separate platform device name from platform device number”というパッチを出しました。
その理由は、名前が数字で終わる「serial8250」というドライバが存在しており、そのbus_idをデバイス名とデバイスIDでそのまま命名すると「serial82500」という名前になってしまうからです。そこでルールを変更して、デバイス名とIDをピリオドで分離し、「serial8250.0」となるようにしようというわけです。
Paul Mundtはこのカーネル空間の変更に対して、この影響でユーザー空間のアプリも対応して変更する必要がある点を指摘しました。例えば、sysfsはbus_idの値を利用してファイル名を決めているため、sysfsを利用するユーザー空間のアプリケーションは、/sys/devices/platform/serial82500ではなく/sys/devices/platform/serial8250.0にアクセスするように変更する必要があります。
serial8250については数字が連続するため、この変更を加えることは理にかなっています。ただ、すべてのデバイスに影響が出てしまうのが困る、という意見でした。
また、ユーザー空間に限らず影響が出ているようです。カーネルの中でも対応が必要な部分があり、Mark Greerは“[PATCH] ppc32: Patch for changed dev->bus_id format”というパッチでbus_idの変更により動かなくなったものに対して修正を加えていました。
FUSEが本流デビューするのはいつの日か?
FUSE(Filesystem in Userspace)は、ファイルシステムの層をユーザー空間から提供できるようにする機能です。FUSEの機能を利用してさまざまなファイルシステムが提供されており、cvsfsやsshfsなどの珍しいファイルシステムが実装されています。
3月2日にMiklos Szerediが、「FUSEはLinusのツリーにそろそろ入ってもよいのではないか」と質問のメールを出したところ、「再来週くらいにはLinusに送ろうと思っていたよ」とAndrew Mortonが答えていました。それに対して、Christoph Hellwigが「ちょっと気になる部分があるので、ファイルシステムに詳しい人が確認するまで待ってくれ」とストップを掛けました。
また、FUSEはまだABIがリリースごとに変更しているので、「Linusのツリーに導入するのはまだ早いだろう」とDavid Gibsonがコメントしていました。
結果として3月中には導入できませんでしたが、何か動きが出てきそうですね。
参考リンク: | ||
![]() |
FUSE | http://fuse.sourceforge.net/ |
![]() |
FUSEベースの ファイルシステム |
http://fuse.sourceforge.net/filesystems.html |
(以上、敬称略)
![]() |
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」コマンドです。
![]() |
|
|
|
![]() |