4月版 乱立する仮想化技術を統合しよう
上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2006/4/28
linux-kernelメーリングリスト(以下LKML)かいわいで起きるイベントを毎月お伝えする、Linux Kernel Watch。2006年3月はどのようなことが起きたのか、見てみましょう。
カーネル2.6.16リリース
3月20日にリリースされた安定版カーネルの2.6.16は、新しいunshareやppoll、*at(openatなど)といったシステムコールが追加されています。
2.6.16のリリースを受けて、Andrew Mortonは「-mm merge plans」と題したメールを3月27日に出しました。1500行にわたる巨大なメールで、2.6.17へのマージに際して-mmツリーに入っているパッチを1つ1つ検討するというものです。これを受けて、「何を取り込んでいくべきか」「何を延期するべきか」という議論が盛り上がりました。
spliceシステムコール導入でコピーが速くなる
カーネル2.6.17に向けて、spliceおよびteeシステムコールの導入が進んでいます。
spliceシステムコールは、入力用と出力用のファイルディスクリプタをカーネル側でつないでくれるものです。これまでread()とwrite()のループを利用してユーザー空間で実施していたコピー処理を、カーネル側で実行します。read()/write()を利用すると、カーネル空間からユーザー空間へのメモリコピーと、ユーザー空間からカーネル空間へのメモリコピーが発生します。spliceシステムコールによりカーネル側で実施すれば、ゼロコピーが実現できます。
また、Linuxカーネルには、これまでもファイルをネットワーク経由で送信するsendfileというシステムコールがありました。それより効率よく、使いやすいインターフェイスを目指して設計しているようで、最終的にはsendfileもspliceを利用して実装するつもりのようです。
teeシステムコールは、spliceの「入力バッファを消費しない版」です。複数の出力ファイルに入力をコピーしたい場合に使えそうです。spliceとteeシステムコールの画期的な点は、メモリページをコピーしているのではなく、コピー元ファイルのメモリページの参照数を増やし、コピー先のファイルに所属させることでコピーを実現していることだそうです。
現状では、Linuxカーネルのパイプの実装に依存している部分があり、ファイルデスクリプタの一部はパイプでなければならないという制約があります。また、引数のインターフェイスなどについての議論も展開しました。
面白い機能なので、今後どのアプリケーションに実装されるか、見ものです。
参考: | |
Linuxカーネルソース内でspliceを実装している場所 fs/splice.c |
メモリバリアのドキュメント完成
以前お伝えした(編注)Linuxのメモリバリアの機構について、Stephen Hemmingerが解説をまとめてドキュメントとしてLKMLに投稿しました。記述の間違いや挙動の詳細などについての議論が展開し、結果としてLinuxカーネルで利用できるメモリバリア関連の命令について記述した2000行ほどの詳細なドキュメントが完成しました。
編注:「1月版 GCC 4.0向け最適化開始で2.95はオシマイ」。 |
CPUは、命令を順番に実行するわけでありません。例えば、メモリ書き込みの命令があってもすぐに書き込むのではなく、書き込みをバッファリングします。シングルCPU環境で普通のメモリに対するアクセスしかない場合は、バッファリングしていることを意識する必要はありません。しかし複数のCPUが1つのメモリを共有していたり、メモリマップドI/Oで外部デバイスとのやりとりがあると、問題は複雑になります。
正しいタイミングで正しいメモリバリアの命令を利用するための情報がなかなか手に入らず、間違った書き方をされたデバイスドライバによってパフォーマンスが出なかったり、一部の構成で動かなくなるバグが入り込むということは十分あり得ます。
このドキュメントの登場で、こうした状況が改善するとよいですね。
参考: | |
カーネルソース内部のドキュメント Documentation/memory-barriers.txt |
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」コマンドです。
|
|