9月版 ユーザー空間でのデバイスドライバ作成に道開ける
上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2007/10/1
メモリアロケータに新たな選択肢
カーネル内部で必要となる細々としたメモリ領域を動的に確保するための仕組みである「SLABアロケータ」の実装として、新しく「SLUB The unqueued slab allocator」(以下SLUB)が導入されました。大規模システムでの話題でよく出てくるChristoph Lameterが提案したものです。2.6.22-rc1でマージされました。
2.6.22では、カーネルの設定によってSLABとSLUBが選択できるように変更されました。2.6.23-rc1からは、SLUBがデフォルトになるように変更されています。
既存のSLABコードには、メモリの確保・解放が繰り返される場合のフラグメント化対応やページの確保の方法、パフォーマンスへの考慮などの問題があったようです。また、SLABコードが複雑なことも課題で、結果としてSLABを書き直す形で新しいアロケータが登場することになったようです。
カーネル内部のインターフェイスとしては、以前と互換性を持った形で書き直したため、カーネル内部の利用者側としては特に変更は必要ないようです。面白い変更の例としては、SLABではSLABキャッシュをオブジェクトの種類ごとに分けていたのに対し、SLUBではサイズ特性ごとに分けるように変わったそうです。この結果、今までよりも効率よくメモリ空間を利用するようになっています。
SLABアロケータは現在、SLAB、SLUB、SLOBの3つの中から選べます。
注:SLOBは、組み込み(CONFIG_EMBEDDED)の場合にだけ選択できるシンプルで小さいアロケータ。 |
カーネル内部のメモリ確保の手法が、一般ユーザーに特に影響を及ぼすことはなさそうです。
それでも、メモリ関連のトラブルシューティングをしている際に/proc/slabinfoを眺めたことがある人も多数いることでしょう。状況を確認するツールには、slabtopというコマンドもあります。SLUBへの変更に伴い/proc/slabinfoがなくなり、アプリケーションは/sys/slabを確認するよう変更されるようです。この変更に伴い、slabtopコマンド自体に変更が必要となっています。
SLUBでSLABの諸問題が十分解決されたかどうかについては、これからの議論を待つことになると思います。SLUBはSLABと同じAPIですが、全く新しく書き直されています。今後のリリースに伴い、広く使われるようになってから問題が洗い出されていくでしょう。
参考: | ||
Documentation/vm/slub.txt | SLUBについてのドキュメント | |
Documentation/vm/slabinfo.c | SLUB 対応の slabinfo 実装例 |
メンテナンスの頻度は二極化? -stableの進捗
2.6.22と2.6.20については順調にメンテナンスされており、修正がタイムリーに反映されているようです。
一方、ほかのツリーについては更新が滞っているように見えます。2.6.22に適用されているパッチの数は非常に多く、8月だけでも100種類を超えています。リグレッション対応も多少ありますが、主にデバイスドライバの修正とセキュリティホールの対応など、細々とした修正がほとんどです。
-stableツリーを簡単に見てみましょう:
■2.6.16.y: Adrian Bunkの管理
- 2.6.16.53(7月25日)の16パッチ以来リリースなし
■2.6.20.y:
- 2.6.20.15(7月7日)
Greg K-Hが担当した最後のリリース
2.6.21.6と対応した内容で1パッチ
- 2.6.20.16(8月15日)
Willy Tarreauがこれ以降を担当
2.6.21.7と対応した内容で、26パッチ
- 2.6.20.17(8月26日)
・SUIDの場合のcurrent->pdeath_signalのセキュリティホール修正(CVE-2007-3848)
・ext4のext4_ext_put_in_cacheがu32を使っていたのをext4_fsblk_tにする修正
・pata_atiixpにSB700のPCI IDを追加する
など、57パッチ
- 2.6.20.18(8月27日)
・pata_atiixpにSB700のPCI IDを追加したのは間違いだったので戻す
・同様に"Keep rfcomm_dev on the list until it is freed"を適用したのは間違いだったので戻す
など、3パッチ
■2.6.21.y:Greg K-Hたちが管理していたツリー
- 2.6.21.7(8月5日)
・dm crypt関連の修正
・md のリペア関連の修正
・NTPのデッドロックの修正
など、26パッチ
■2.6.22.y:Greg K-Hたちが管理しているツリー
- 2.6.22.2(8月10日)
・drm/i915: i965のバッチバッファのセキュリティビットの修正(CVE-2007-3851)
・aacraidが管理者権限を確認していなかったのを修正
など、83パッチ
- 2.6.22.3(8月16日)
・乱数発生器のスタックオーバーフローの可能性の修正(CVE-2007-3105)
など、12パッチ
- 2.6.22.4(8月21日)
・SUIDの場合のcurrent->pdeath_signal のセキュリティホール修正(CVE-2007-3848)
以上、1パッチ
- 2.6.22.5(8月23日)
・x86のシリアルドライバをplatform deviceに変更するパッチの影響で動かなくなるものが出たので、元に戻す
など、20パッチ
- 2.6.22.6(8月31日)
・RX790、RD580、RS690でMSIをdisableにする
など、27パッチ
(以上、敬称略)
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」コマンドです。
|
|