TEDIA会員に登録したメールアドレスとパスワードを入力してください

メールアドレス:

     パスワード:


パスワードを忘れた方はパスワードの確認を行ってください。

TEDIA会員へのご登録がお済みで無い方はこちらで登録ができます


>> テクノロジーポータル TEDIA トップページへ戻る <<

Think IT Software Developer's Think IT Find-IT 失敗しないソフト選び Find-IT TEDIA テクノロジーポータル TEDIA インストールマニアックス2008 インストールマニアックス2008

TEDIA SponsorsOpen Source Web Development Tutorials - Dev Shed

Linux I/Oスケジューラ
(2009/03/25公開)

Linux I/Oスケジューラ

 これは全7回でLinux I/Oファイルのシステムコールを解説する連載の第6回です。今回は、I/Oスケジューラの重要性および各種のスケジューラを学習していきましょう。内容は、ロバート・ラブ著『Linux System Programming: Talking Directly to the Kernel and C Library(Linuxシステムプログラミング-カーネルおよびCライブラリへ直接話しかける:仮題)』第4章からの抜粋です。(原著はオライリーより2007年に出版、ISBN: 0596009585(Copyright 2007 O'Reilly Media, Inc.))禁無断転載。出版社の許可を得て使用しています。書店あるいはオライリーメディアから直接購入できます。

I/OスケジューラとI/O性能

 現在のシステムはディスクとシステムのほかの部分との相対的な性能較差(こうさ)がかなり大きく、その較差はさらに拡大していく傾向にあります。ディスク性能に最悪の影響を及ぼすのは、ディスクの一部分からほかの部分へ読み書きヘッドを移動するプロセス、すなわち、シークと呼ばれる動作です。多くの動作が数プロセッササイクル(1プロセッササイクルはせいぜい1/3ナノ秒程度)で完了される世界にありながら、ディスクのシークには1回当たり平均8ミリ秒以上を要します。確かに8ミリ秒も短い時間ですが、1プロセッササイクルと比較すると2500万倍の長さです。

 ディスクドライブとシステムのほかの部分に見られる性能の不均衡を考えるとき、I/O要求を出された順序どおりにディスクに送るのは、非常に粗野であると同時に非効率なやり方と言えます。そこで、現在のオペレーティングシステムのカーネルはI/Oスケジューラなるものを実装しています。I/Oスケジューラは、I/O要求を受け付ける順序および実行するときを操作して、ディスクを対象とするシークの数とサイズの最小化を図ります。ディスクへのアクセスに伴って発生し性能を低下させる条件を軽減するのが、I/Oスケジューラの仕事なのです。

ディスクのアドレス指定

 I/Oスケジューラの役割を理解するためには、若干の予備知識が必要です。まず、よくご存じのように、ハードディスクは幾何学に基づいてシリンダ、ヘッド、セクターによるデータのアドレス指定を行います。これがCHSアドレス指定です。次に、ハードドライブは複数のプラッタで構成されており、それぞれのプラッタが1つのディスク、スピンドル、読み書きヘッドで構成されています。1つのプラッタを1枚のCD (あるいはレコード)、ディスクにあるプラッタセットをCDを積み重ねた列と考えればいいでしょう。各プラッタは、CDの表面と同じように、円形の環状トラックに分割されています。各トラックは、整数のセクターに分割されています。

 ディスク上に存在するデータ単位の場所を特定するとき、ドライブの論理には3つの情報が必要です。すなわち、シリンダ、ヘッド、セクターの値です。シリンダ値は、データが存在しているトラックを特定します。プラッタが積み重ねられている場合、特定されたトラックはシリンダを形成します。言い換えるなら、シリンダとは各ディスクの中心から等距離にあるトラックを表します。ヘッド値は、正確な読み書きヘッド(すなわち、正確なプラッタ)を特定します。これで、1つのプラッタの1つのトラックへと検索は狭められたわけです。次に、セクター値を利用して、トラック上の正確なセクターを特定します。これで、ハードディスクはデータを入手するプラッタ、トラック、セクターを理解しました。検索の完了-正確なトラック上で、正確なプラッタの読み書きヘッドの位置を把握し、要求されたセクターに対する読み出し/書き込みを実行する準備が整いました。

 ありがたいことに、現在のハードディスクは、シリンダ、ヘッド、セクターを使った交信を要求しません。その代わりに、シリンダ/ヘッド/セクターの三重項に対して一意的なブロック番号(別名、物理ブロックあるいはデバイスブロック)をマッピングします。事実上、おのおののブロックがそれぞれ特定のセクターに対応します。現在のオペレーティングシステムは、これらのブロック番号を利用してハードドライブのアドレス指定を行うことができます。論理ブロックアドレス指定(LBA)です。ブロック番号は、ハードドライブ内部で、正しいCHSアドレスへと変換されます。* 絶対ではありませんが、ブロックからCHSへのマッピングはシーケンシャル(順次)な傾向があります。すなわち、ディスク上で、物理ブロックnは物理ブロックn+ 1に物理的に隣接する傾向が見られます。間もなく分かりますが、このような順次マッピングには大切な意味があります。

 一方、ファイルシステムはソフトウエアのみに存在します。そして、ソフトウエアの単位である論理ブロック(別名、ファイルシステムブロック。あるいは、紛らわしく、単にブロックと呼ばれる場合もあります)で動作します。論理ブロックのサイズは、物理ブロックのサイズの整数倍でなくてはなりません。すなわち、ファイルシステムの論理ブロックは、ディスクの物理ブロックの1つあるいは複数に対応します。


1    2    3    4    次のページ

Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.