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
|
|
||||
|
連載 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」コマンドです。
|
|