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

Index
Linux Kernel Watch 9月版
 ユーザー空間でのデバイスドライバ作成に道開ける
  Page 1
 Kernel Summitを経て2.6.23リリースへ進む
 UIO:ユーザー空間でデバイスドライバ作成が可能に
 公平なスケジュールって何?
Page 2
 メモリアロケータに新たな選択肢
 メンテナンスの頻度は二極化? -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 記事ランキング

本日 月間