特集
» 2005年02月15日 00時00分 公開

組み込みLinux開発の最前線:CE Linux Forum Plenary Meeting 2005レポート (1/2)

サンノゼで開催されたCELF Plenary Meetingには、組み込みLinuxの最新動向が集約されていた。組み込みLinuxのいまと未来は?

[近藤 純司 富士通プライムソフトテクノロジ,@IT MONOist]

 1月25、26日の2日間にわたって、CE Linux Forum(CELF)Plenary Meeting 2005が米国サンノゼで開催された。筆者が参加したテクニカルセッションを中心に、同イベントのレポートをお届けする。

組み込み機器向けのカーネル改良

 今回のカンファレンスには、オープンソースコミュニティから著名な開発者が多数招かれた。ここではカーネル開発者のセッションを中心に紹介する。

uClinux開発動向

 Greg Ungerer氏がメンテナンスしているuClinux(http://www.uclinux.org/、“you-see-linux”と発音する)は、メモリ管理機構(MMU)を持たないCPU向けに開発されたLinuxカーネルで、カーネル2.6からはupstreamに統合された。

写真1 Greg Ungerer氏

 uCLinuxは、以下の点を除き、MMUを持つCPU向けの一般的なLinux(以下MMU Linux)と同様の動作をする。

  • プロセスごとに仮想空間を持つことができない
  • メモリ保護機能がなく、プロセス、カーネル、周辺機器でメモリ全域が参照できてしまう
  • forkシステムコールがなく、vforkシステムコールのみサポートされている
  • プロセスのスタックが自動的に伸長しない
  • sbrkシステムコールがない
  • 共有ライブラリは一部のCPU向けにしかサポートされていない

 上記の点に注意すれば、MMU Linuxで動作するさまざまなソフトウェアをuClinuxでも少ない修正で動作させることができる。

 今後の課題として、より多くのCPUサポートやカーネルメモリアロケータの改善、リアルタイム機能のサポートなどが挙げられた。最後に、Ungerer氏自身がCOLDFIRE(m5272 66MHz)を使ったデモを実演し、2.6.10-uc0カーネルが小気味よく動作することをアピールした。

編注:uClinuxについては、全貌を現したLinuxカーネル2.6[第2章]も参照。

uClinuxベースのビデオカメラ

Sumsungが、ARM/uClinuxベースのビデオカメラを展示していた。NOR型Flashメモリに格納したカーネルから起動し、0.8秒以下でアプリケーションの処理を開始する。カーネルおよびユーザーのスレッド間の優先度調整や独自のメッセージキューなど、さまざまな改良が行われている。成果はhttp://opensrc.sec.samsung.com/で公開されている。

Linux-tinyによるカーネルのコンパクト化

 Matt Mackall氏は、機能追加が繰り返されてどんどん肥大化するLinuxカーネルをコンパクトにするLinux-Tinyプロジェクト(http://www.selenic.com/tiny-about/)に取り組んでいる。このプロジェクトは、カーネル2.6向けのパッチ(150以上)を取りまとめて提供している。それぞれのパッチは、個別に適用できる。

 セッションでは、パッチを開発する際に問題個所を見つけて改善するのに用いた手法が紹介されたので、以下にまとめる。

  カーネルの静的サイズ削減
  sizeコマンドでカーネルにリンクされるオブジェクトファイル(*.o)のうち、テキスト、データ、BSS領域のサイズが大きなものを見つけて、削減対象とする
  nm --sizeコマンドで領域を消費しているシンボルを見つけ、削減できないか調査する
  Denis Vlasenko氏の“inline hunter”を使い、コンパイル時にinline展開される関数で領域を消費するものを見つけ、inline展開を取りやめる
     
  カーネルの動的サイズ削減
  /proc/kmallocを監視して、メモリを消費する関数を突き止める
     
  そのほか
  printk()、bug()、warn()、panic()の呼び出しを無効化し、コードサイズを削減する
  カーネル機能(sysfs、ptrace、aio、posix timer、uid16、vm86、ethtool、tcpdiag、igmp、rtnetlinkなど)を取り外す
  データ構造(lookup table、カーネルスタックなど)のスリム化
  メモリアロケータの置き換え(SLABからSLOBへ)
  最低限のコンソール機能(TinyVT)

 これらの手法を適用すると、カーネル2.6.5(i386)ではサイズが約1.9Mbytesだったカーネルイメージを約360kbytesに抑えられる。これは、10年前のカーネル(0.99-pl15)と比べても遜色ない小ささである。

カーネル2.6とリアルタイム機能

 CELFのリアルタイム・ワーキンググループの責任者であるManas Saksena氏から、CELFでの活動状況とカーネル2.6の動向が紹介された。

 Saksena氏によると、いままでにCELFで検討してきた課題は、カーネル2.6になってコミュニティ中心で検討が進んでいるという。以下に、主な活動を紹介する。

  • カーネル2.6に当初から導入されたプリエンプティブカーネル
  • カーネル2.6.11でマージされるBig Kernel Lock preemptibility
  • IRQ/SoftIRQ Threadを含むIngo Molnar氏のリアルタイム・パッチセット
  • OSDLによるRobust Mutex(http://developer.osdl.org/dev/robustmutexes/

 これに伴い、CELFでの活動は収束傾向にあり、新たなかかわり方が求められている。Saksena氏からは、コミュニティの一員としてテストや性能測定を手助けしたり、CE向けにより進んだリアルタイム機能を追求することなどが提案された。

 続くセッションでは、Ingo Molnar氏のリアルタイム・パッチセットが紹介された。この機能拡張は、すべてをスレッドのコンテキストで動作させて、システムをできる限りプリエンプティブ()にする戦略で設計されている。

注:プリエンプティブなシステムでは、現在走行しているスレッドよりも高い優先度のスレッドが走行可能になると、即座に走行権が切り替えられる。

 標準のカーネル2.6では、割り込みハンドラ(HardIRQ)、SoftIRQの処理は特別なコンテキストで実行されるため、この処理中はプリエンプティブではない。Molnar氏のパッチを適用すると、これらをスレッドのコンテキストで実行することが可能になり、プリエンプティブ化できる。また、スピンロックやBKL(Big Kernel Lock)で保護されたクリティカルな区間の処理中もプリエンプティブではないが、これらの区間すらプリエンプティブにするパッチも含まれる。カーネル内の各所にプリエンプティブ・ポイントを追加して、スケジューリングの遅延を低減するVoluntary Preemptionと呼ばれる機能も追加される。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.