(Jerry Cochran)

 WindowsのストレージI/O(入出力)は,Windows NT 3.1の時代から10年以上を経て少し古びてきた。WindowsのストレージI/Oドライバのレイヤーは,SCSIミニポートやSCSIポートと呼ばれているが,いつか真剣にオーバーホールしなければならない状態だったのだ。Microsoftは,Windows Server 2003で,それを改良し,Windowsアプリケーションがストレージ性能と機能をレベルアップできるようにした。今回は,SCSIポートの限界をいかにStorportが改善したかを話そう。

SCSIベースでドライバが作られていた
ストレージの多様化に追いつけなかった

 Windows NTがSCSI(スモール・コンピュータ・システム・インターフェース)しかきちんと認識せず,IDE(インテグレーテッド・デバイス・エレクトロニクス)や複数のディスクを用いて実現するRAID(リダンダント・アレイズ・オブ・インデペンデント・ディスクス),ファイバ・チャネルやiSCSI(Internet SCSI)を満足に扱えないという不平は,随分昔から言われてきたと思う。

 原因は主にSCSIポート・ドライバにある。初期のWindows NTのころ,MicrosoftはSCSIがディスク・インターフェースの主流になると踏んでいた。これは当時正解だったが時代は移り,Windowsシステムのストレージの種類は格段に増えた。今日では,DAS(ダイレクト・アタッチト・ストレージ)のSCSIドライブ以外に,RAID,ファイバ・チャネル・ベースのSAN(ストレージ・エリア・ネットワーク)やNAS(ネットワーク・アタッチト・ストレージ)への対応が必要になっている。ところが,SCSIポート・ドライバはそれらの環境で性能や設定の柔軟さ,管理のしやすさが得られない。

SCSIに由来する制限が多かった
これまでベンダーは独自ドライバで対処

 SCSIポート・ドライバにはアーキテクチャに由来する制限がある。例えば,SCSIアダプタ1つ当たりの最大I/Oリクエストは254までで,シーケンシャルな(または半二重方式)入出力の機能しかない点だ。つまり,I/Oリクエストの発行かその実行かのいずれかを処理するだけで,同時に両方は処理できないのである。また,高いIRQ(割り込み要求)レベルで極端な負荷がかかる,バッファ処理のオーバーヘッドが大きい,I/Oキューの管理に制限がある――などが課題である。

 ストレージ・ハードウエアのベンダーは,こうした問題に対して専用ドライバを開発して解決してきた。実際に多くのベンダーが自社製ストレージ・フィルタ・ドライバを開発している。だが,そういうドライバは全く独自のもので広くサポートされるのは難しい。根本的な解決には,Microsoftが最新のストレージ技術とアプリケーションの要求に見合うソリューションをゼロから構築する必要があった。

 Storportドライバは,前述したような最新のストレージのI/O要件やSCSIポートが抱えていた問題を考慮して設計された。Storportはストレージ・ベンダーやユーザーがSCSIポートから簡単に移行できるようにある程度の互換性を保ちながら,先に示した諸問題に対応する。

I/Oリクエストの全二重化や
IRQによるオーバーヘッドを解消

 まず,SCSIポートが半二重処理しかできない制約を解消するため,Storportは同期I/Oの機能(つまり全二重処理)をサポートした。これでStorportはI/Oリクエストの発行と実行を同時に処理可能になった。

 次に,高いIRQレベルで極端な負荷がかかっていたのを軽減するため,Storportでは,新しい並列処理ルーチンが採用された。これにより,ハードウエアにコマンドを送る前のIRQ処理のオーバーヘッドの多くを解消している。例えば,複数のI/Oリクエストをまとめて受け付けて一括処理するScatter/Gatherのリスト作成などが,そこで処理できる。

 Storportはバッファ処理のオーバーヘッドを減らす機能も搭載している。これはドライバの開発者にバッファ管理用の柔軟なオプションを提供することで対応した。

LUNごとに細かい制御が可能に
 また,1アダプタ当たりの未処理I/Oリクエストは254までというSCSIポートの制限に対処するため,Storportはアダプタ当たりの制限をつけない。その代わりStorportはLUN(論理ユニット番号)当たりの未処理I/Oリクエストを最大254に制限している。この改良点を活用してストレージ・ベンダーがコントローラや基盤ソフトを開発すれば,ファイバ・チャネルSANなどの高性能なストレージ・システムに対応できるようになる。

 さらに,Storportでは,デバイスやアダプタ,LUNごとのI/Oキュー管理機能が実装され,キューが管理しやすくなった。具体的には,ポーズ,レジューム,ビジー,レディなどの機能を実装している。これまでのSCSIポートは,実際にはI/Oキューを全くコントロールできなかったのだ。こうしたSCSIポート特有の制約に対処することで,Storportは次世代のストレージ技術に見合ったアーキテクチャになった。

将来技術への布石を搭載
ドライバの移行ツールも用意

 Storportの改良はこれにとどまらない。Microsoftは,SCSIポートの問題を越えたはるか先のストレージ技術の将来を考え,Storportに機能を追加している。例えば,エラー処理の強化,ファイバ・チャネルのリンク処理とチャネル管理,Windowsクラスタのサポート強化,優先度の低い処理を後回しして処理能力を高めるDPC(ディファード・プロシージャ・コール)のサポートが備わっている。

 Microsoftは,StorportによってWindowsストレージをサポート/管理しやすくすると同時に,開発者が開発を容易に進められるようにしている。例えば,Windows Driver Development Kit(DDK)にはストレージ・ベンダーがSCSIポート・ドライバをStorportに移行させるツールが入っている。

性能は30~50%アップ
 既に行われたMicrosoftのテストでは,Storportのほうが良い性能を示している。それによるとStorportはSCSIポートに比べて,30~50%以上も効率が高く,秒当たりより多くのI/O処理を低いCPU利用率を維持したまま実行できるという。

 あなたがWindowsシステム用のストレージの購入を今後考える場合は,なじみのベンダーの製品が,Storportをサポートするかどうかを必ず尋ねてほしい。Storportはストレージ・ベンダーとMicrosoftはもちろんユーザーにとっても有益である。