この文書は、Serial ATA (SATA) Linux software status reportを著者のJeff Garzik([email protected])に許可を得て、五十嵐 正尚([email protected])が翻訳し、GentooJPで公開しているものです。翻訳版に関することは訳者に連絡してください。
日本語翻訳版 最終更新日 2005-05-17

LinuxのソフトウェアにおけるシリアルATA(SATA)サポート状況

2005年4月15日

この対応状況は、カーネル2.4.30と2.6.12-rcXに含まれる最新リリースのSATAドライバに対してのものです。

内容

  1. 最近の更新内容
  2. ソフトウェアサポート状況

1. 最新の更新内容

最近は大きな変更はありません。BitKeeper SCMからの移行作業の影響で開発が少し遅れました。 SMARTサポートの取り込み、エラーの扱い方の向上、ATAPIサポート、デバイスのホットプラグ、NCQサポート、すべてがもうまもなくやってくる主要機能です。

2. ソフトウェアサポート状況

シリアルATAの基本機能

ドライバ全体のうちの核である、"ATAホストステートマシン"は、製品レベル並に安定していると見なされています。

エラーの扱い方はとても単純なのですが、今のところそれが利点となっています。 エラーを扱うすべてのコードは、結果的にいろんな角度で厳しくテストされることになります。 libataのエラーの扱い方は、意図時に単純なものになっています。 良い面: 見直しや正当性の確認が楽。今までにデータが不正になったことはありません。悪い面: エラーが発生した場合、libataは、ブロックレイヤにそのエラーが送り返されるだけです。エラーの種類によってブロックレイヤから再実行回数が制限されていますが、バスがリセットされることはありません。

次のように言い換えることもできます。「さらなる問題によって、発生した問題を悪化させてしまうよりも、ディスクにアクセスすることを止める方が賢明です。」

シリアルATA関連の技術が成熟して、ホスト側のエラーかデバイス側のエラーかがはっきりするにつれて、エラーの扱い方は徐々に洗練されるでしょう。 私は、フォールトインジェクト、またはエラー処理コードの試験ができる特別なドライバ/ファームウェアを手に入れるために、少数の(親切な!)ディスクベンダと協力して作業することを計画しています。

エラー処理の改良は、デバイスのホットプラグのような機能を実装するためには、ほぼ確実に必要です。

キューイングサポート

市場に出回っているSATAホストコントローラの一部には、既に("TCQ"として知られる)コマンドキューイングをサポートしているにもかかわらず、libataはまだサポートしていません。 しかし、libataはキューイングをサポートするために最初から設計されているので、サポートを有効にするには、数行のコードの変更と、関数二つを書くことだけが必要です。

キューイングサポートは、すぐにでもlibataで有効になるでしょう。しかし、そうするには、多くの様々なコントローラとドライブ上で長い期間テストすることが必要です。 これは集中した時間を必要とし、この作業で一番大きい要素です。

補足説明: ホストベースキューイングとネイティブコマンドキューイング

キューイングは、先行するコマンドの終了を待つことなく、一つのデバイスに複数のコマンドを発行する処理です。 これは性能を向上し、遅延を減らします。 ATAにはキューイングの種類が三つあります。

  1. "レガシーTCQ" -- 一部のPATAデバイスがこれをサポートしています。 特定のデバイスに対するキューイングを有効にするために、既存のATA規格の上に大幅に手を入れた設計となっています。 ホストコントローラにデバイスをサポートするための更新が必要なかったので、レガシーTCQを有効にするには、OSのドライバが対処しなければならない多くの制限事項と複雑な問題がありました。 結果として、レガシーTCQはハードウェアサポートを提供している数少ないホストコントローラ上でサポートされるだけでしょう。

  2. "ホストベースTCQ" -- ドライブコマンドキューのドライブ側サポートの有無に関わらず、ホストコントローラが、ドライブコマンドキューをサポートします。

  3. "ネイティブコマンドキューイング" -- ホストとドライブの両方が、ドライブコマンドのキューイングと実行に対し協調動作します。 三つの中で最も高い性能と最も低い遅延を提供するはずです。

#1 は、細かいところすべてをハードウェアが操作する場合だけサポートされるでしょう。
#2 は、libataによってまもなくサポートされるでしょう。
#3 は、ドライブの製造メーカからハードウェアが入手できる場合、libataによってサポートされるでしょう。

ホットプラグサポート

SATAのすべては、ホットプラグをサポートします。

libataは、...まだホットプラグをサポートしていません。

次のSATAコントローラは、今後ホットプラグをサポートしないでしょう。 Intel ICH5、Intel ICH5-R、Intel ICH6 (AHCI対応なし)、Pacific Digital Talon (ADMA)、Promise SATA SX4。

これらのコントローラは、ホットプラグをサポートするためのSATA物理層に関する十分な情報が公開されていません。 Intel ICH5/ICH6のように、一部にはコールドプラグ操作をサポートする可能性があります。 コールドプラグ操作とは、ユーザは単にSATAデバイスを外すよりも、外したいと思うSATAデバイスをOSドライバに知らせます。

電力管理機能のサポート

ATA/ATAPIで定義されている電力管理機能のに加えて、SATAホスト、SATAバス、SATAデバイスの電力消費を積極的に制御します。

いくつかのメーリングリストで議論されているように、積極的な電力管理はやりすぎる可能性があり、頻繁にヘッドを退避しすぎることもあります(ディスクドライブの寿命を縮めることになります)。 バランスをとるために慎重に注意を払う必要があります。

今のところLinuxでの積極的な電力管理に対する要求はあまりありません。 おそらく、ディスクのサスペンド/レジュームのみをサポートするでしょう(他の効果がATAパススルー機能を経由してもたらされるかもしれませんが)。

SMARTサポート

SMARTサポートは、まもなく統合されるでしょう。 SCSI T10のコミッティは、ATAパススルー機能用に必要な機能コード番号割り当てました(libataでSMARTをサポートするには必要です)。 それで、取り込まれる前に少しの小さな調整だけが必要です。

ディスクが激しく使用されている最中にSMARTコマンドを使用することは、タイムアウトやその他失敗の発生につながるという、報告も根強くあります。 この件に関しては、詳しく調査する必要があります。

PATAサポート

libataは、シリアルATA固有ではありません。(IDEで知られる)パラレルATAにも同様に機能します。 確かにPromiseやSiS製などのSATAコントローラはPATAポートを備えています。 誰かPATAサポートに取り組みたい技術者がいたら、ここにPATAサポートの実装方法が記述されたメールがありますので参考にしてください。

libataには、バグのある/問題のある設計がされた過去のチップセットやデバイスを含む、完全なPATAのサポートが導入されてくるでしょう。 そうすれば、PATAは、SATAと同様に完全にサポートされるでしょう。 現在のところ、libataのPATAドライバは、Intel PIIXと少しのPromiseチップセット用にだけあります。

ATAPIサポート

もうまもなくです。ATAPIサポートはDVD/CD、テープ、フロッピーをサポートするのに必要です。 libataには、数ヶ月の間ベーシックATAPIサポートがありましたが、次のようないくつかの根本的な問題がまだ残ったままです。 いくつかのATAPIデバイスは、次のdword境界に追加されるべきSATAへのCDB書き込み転送中に割り込みが発生します。 これらの問題が解決したら、ATAPIはlibataでサポートされるでしょう。


garzik's sata pagesに行く。 日本語翻訳版のLinuxでのシリアルATAトップページに行く。

Copyright 2004-2005 Dunvegan Media, Inc. All rights reserved.