5月版 「LSM不要論」に揺れるSELinux&AppArmor


上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2006/5/30

linux-kernelメーリングリスト(以下LKML)かいわいで起きるイベントを毎月お伝えする、Linux Kernel Watch。2006年4月はどのようなことが起きたのか、見てみましょう。

percpuの落とし穴発覚

 SMP環境において、複数のCPUが同じメモリ領域にアクセスするのはキャッシュラインの無効化を繰り返すことになるので、オーバーヘッドの大きな処理となります。そこで、例えば、各CPU用のメモリ領域をキャッシュラインの大きさだけ離して確保してやるとどうなるでしょう。お互いに影響し合うことなくメモリアクセスできるようになり、効率が向上します。percpuは、まさにこのための仕組みであり、Linuxカーネルにおいて各CPU用のメモリ領域を確保します。

 Serge Noiraudは、「-RTパッチを適用した場合、percpu領域が足りないためscsiモジュールをロードできない」という問題を報告しました。この問題は、include/linux/percpu.hにある「PERCPU_ENOUGH_ROOM」をデフォルトの32kbytesより大きな値に変更すれば、解決するようです。今回の例では、320kbytesに設定したら動作したようです。

 -RTパッチは、レイテンシヒストグラムの保存用に256kbytesのメモリを確保します。レイテンシヒストグラムはCPUごとに保持するので、percpu領域から確保しています。そのため、percpu領域を使い切ってしまいエラーが発生した、というわけです。

 percpu領域は、DEFINE_PER_CPUで定義された領域で必要な分を固定的に確保します。モジュールがpercpu領域を利用する場合は、モジュールのロード時に確保することになります。これは、PERCPU_ENOUGH_ROOMが適切に設定されていることに依存していました。

 Steven Rostedtは、percpu領域を動的に確保できるようにするパッチを出しました。Paul Mackerrasは「今後はpercpu領域の場所をユーザー空間のTLSのようにレジスタを1つ消費して確保するのがよいのではないか」と提案しました。パッチの詳細はこれから詰めていく必要があるようですが、今後percpu領域はより使いやすくなりそうです。

ヘッダファイルのメンテナンスが容易になる?

 glibcやLinuxカーネルが提供するサービスを直接利用するアプリケーションやライブラリは、カーネルソースのヘッダファイルを必要とします。しかし、ヘッダファイルはそのまま利用できるようにはなっておらず、現状では各ディストリビューションがカーネルのヘッダを手作業で加工して、glibcなどが利用しやすい形式で提供しています。

 昔は、/usr/include/linuxを/usr/src/linux以下へのシンボリックリンクにしたりしていました。しかし、カーネルの内部構成が変更されるたびにユーザー空間のアプリケーションに影響が及ぶことから、Linusはこの方法を好ましく思っていませんでした。「カーネル空間のヘッダファイルをユーザー空間のアプリケーションが直接利用しないように、カーネルインターフェイス用のライブラリなどを介してユーザー空間のアプリケーションに見せるようにしよう」という話題は、これまで何度も蒸し返されています。

 David Woodhouseは、必要なヘッダファイルだけをインストールしてくれるmakeheaders_installを提案しました。それは、カーネルソース内のヘッダファイルをユーザー空間用にそのまま露出するのではなく、

#ifdef __KERNEL__

となっている部分を取り除いたものをインストールしたり、ユーザー空間に必要なヘッダファイルだけをインストールするパッチなどです。

 Linusはこの一連のパッチを受けて、「カーネルのヘッダファイルを直接ユーザー空間のアプリケーションが利用するために提供するのは歓迎しないが、ライブラリやディストリビューションの開発者向けに提供するのであれば歓迎する」とコメントしました。

 手動でヘッダファイルをメンテナンスするのは非常に手間が掛かるので、一部でも自動化してくれる処理が実装され、カーネル関連のヘッダファイルのメンテナンス状況が改善されるといいですね。

関連リンク:
David Woodhouseのgitツリー
http://git.infradead.org/?p=users/dwmw2/headers-2.6.git;a=summary

1/2

Index
Linux Kernel Watch 5月版
 「LSM不要論」に揺れるSELinux&AppArmor
Page 1
 percpuの落とし穴発覚
 ヘッダファイルのメンテナンスが容易になる?
  Page 2
 LSMなんて要らない!?
 まだまだspliceの開発は続く
 -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 記事ランキング

本日 月間