上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2005/9/27
linux-kernelメーリングリスト(以下LKML)かいわいで起きるイベントを毎月お伝えする、Linux Kernel Watch。8月のLinuxカーネル関連の状況について、見てみましょう。
XenとVMwareに最適なLinuxを目指して
複数のLinuxカーネルなどを同一CPUで同時に動かす環境が最近流行しているようです。メモリやCPUなどを仮想化し、同時に複数のOSを1つのコンピュータ上で動作させるためのソフトウェアを「Hypervisor」と呼びます。複数のOSインスタンスを同時に立ち上げて別のサービスを独立して提供したり、まったく別のOSを同時に動かしたりできるため、重宝されているようです。
ただ、そもそもOSはCPUなどハードウェアの機能を直接利用するように設計されているため、ひずみが出ます。例えば、メモリ空間管理のためにCPUの特権命令を多用するのは、OSとしては普通のことです。しかし、複数のOSが特権命令を利用してメモリを同時に管理しようとすると衝突が発生するため、Hypervisorがうまくトラップして調整し、同時に複数のOSを動作させるわけです。
仮想化の問題点は、OSが生のCPUを制御しているつもりで発行する特権命令にHypervisorが割り込み、仮想化して管理するという段階を踏むことになるので、オーバーヘッドが生じることです。そこで、「Linuxカーネルの側が、Hypervisorにとって親切なメモリ管理をしたらよいだろう」という発想が生まれます。この発想を基に、Xen(編注)の上でLinuxを動かす場合のパッチをMartin J. BlighがLKMLに投げました。同じような時期に、Zachary AmsdenはVMware上でLinuxを動かす場合のメモリ管理のパッチを投げました。Andrew Mortonはそれらのパッチについて、「VMwareとXenの両方で動作するようにAPIを調整する必要があるだろう」とコメントしていました。
編注:Xenについては、「仮想化技術の大本命「Xen」を使ってみよう」も参照。 |
まだ若い分野であり、これから成長していくようですが、今後Linuxカーネルがより仮想化に適したOSになっていくのに期待です。
参考リンク: | ||
Xen | http://www.cl.cam.ac.uk/Research/SRG/netos/xen/ | |
VMware | http://www.vmware.com/jp/ |
時間管理機構の統一は難航中
内部で処理のタイミングを決めたり現在時刻の変化を把握するため、Linuxカーネルは時間の管理処理機構を持っています。その部分は従来、CPUアーキテクチャやチップセットごとに独自の方法を取っており、いろいろな部分にコードの重複が見られました。例えば、NTPでの時間管理や、タイマーを利用して短期間のスリープを実現するコードなどがあります。同じコードが重複していると、修正しにくく、見通しが悪くなります。
こうした現状を良しとしないJohn Stultzは、「現在のバラバラなコードを1つに統一してきれいにしよう」という意気込みを持ってLKMLに乗り込みました。彼が実装しようとしている「new timeofday core」というサブシステムは、いままでアーキテクチャごとに独立していたタイマー関連のコードを1つに統一する試みです。
しかし、時間管理機構は各ハードウェアアーキテクチャの深い部分にかかわっています。そのため、残念ながら現在まともに実装できているのはx86アーキテクチャだけです。また、再実装によりオーバーヘッドが大きくなり、gettimeofday関数の実行速度が20%遅くなった、という問題があります。
タイマー処理の部分からNTP関連の処理を分離して1カ所に集めることなど、有用と思われる部分もあるので、反論にめげずに頑張ってほしいところです。
DynTicksによる低消費電力の試み
同じタイマー関連のサブシステムにかかわる開発で、Con Kolivasの投稿したDynTicksパッチが話題になりました。Tony LindgrenとTuukka Tikkanenの作成したパッチを修正したもので、システムがアイドル状態のときはタイマー割り込み処理を無視し、電力消費を節約することを目的としています。
Russel Kingは、「ARM版のDynTicksパッチはLinuxカーネルのメインラインにすでにマージされているが、おかげでARMのirq.cは悲惨な状況になっている。x86ではもっときれいに実装しよう」と提案しました。以前から存在していたパッチですが、ちょうどよいタイミングだったらしく議論が盛り上がりました。
Daniel Petriniは、「導入したDynTicksパッチが本当に動いているのか否かを確認するには、割り込みの回数を数えればよい」と説明しました。割り込みの計測ツールとしては、vmstatで大まかな回数が分かります。より正確に計測するなら、pmstatsやtimertopユーティリティを利用するとよいとのことでした。
先月紹介したように、タイマー割り込みを処理する頻度を減らすことで電力消費を節約することが可能です。ノートPCやPDAには便利な機能になりそうです。これからどう磨かれていくのか、楽しみです。
参考リンク: | ||
pmstats | http://www.muru.com/linux/dyntick/tools/pmstats-0.2.gz |
ユーザー→カーネル空間のメモリコピーを最適化
ユーザー空間のアプリケーションからシステムコールを経由してカーネル空間に切り替わる際に、メモリをコピーする場合があります。その場合、もしそのメモリが単にDMAで利用されているだけであれば、メモリキャッシュを利用することによって、利用されていないメモリがコピーされることになる。その影響でほかの有用なデータがキャッシュから外れてキャッシュミスが生じ、全体のパフォーマンスが落ちているのではないだろうか。ミラクル・リナックスの吉岡さんは、「[PATCH] cache pollution aware __copy_from_user_ll()」というメールで上記の問題を指摘し、キャッシュを利用しないメモリコピーを利用するパッチをLKMLに流しました。
oprofileやLKSTでプロファイリングしたデータを添付したメールは、その内容が過激なため物議を醸しました。「DMAですぐに使うデータ用と、それ以外のデータ用で違うcopy_from_userを使うように実装するべきだ」という反論などがありました。
しかし、パフォーマンスの向上を数字で示していてデータには説得力があるため、本流に取り込まれる日も近いかもしれません。
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」コマンドです。
|
|