web-dev-qa-db-ja.com

Linux SCSIコマンドのタイムアウトとは何ですか?デフォルトはソフトウェアRAIDに適していますか?

SCSIタイムアウトについての私の理解は、読み取り、書き込み、フラッシュ、およびその他のコマンドの完了時間は限られているということです。超過した場合、コマンドは中止され、エラーが上位層に報告されます。コマンドが完了するのを待っている間、I/Oに依存するすべてのアプリケーションが停止します。

次のレイヤーはmdraid、LinuxソフトウェアRAIDです。私が読んだところによると、mdraidはそれ自体にタイムアウトはありませんが、コマンドをタイムアウトするために下位層に依存しています。

カーネル3.2(Debian)のデフォルトのSCSIタイムアウト値は90秒です。

読み取りエラーが発生したハードディスクは、ファームウェアで定義された時間枠内にエラーを修正しようとします。このタイムアウトは、デスクトップドライブ(通常はスタンドアロンであるため、修正の優先度が高い)では高く設定され、サーバードライブでは低く設定されます(通常はRAIDなので、不良セクタをすぐに報告し、他のドライブに応答させます)。 smartctl(SCTERC、TLERなど)を介して調整できる場合があります。

したがって、HDDが高いERCタイムアウトに設定されている場合、カーネルはデフォルトで90秒間待機してから、要求を中止します。そうして初めて、mdraidはアプリケーションの要求を別のディスクにリダイレクトします。

90秒は、Webページが読み込まれるまでの時間です。

デフォルトのSCSIタイムアウトは、デスクトップまたは非ハードディスクのSCSI機器(テープドライブ、テープライブラリが頭に浮かぶ)を対象としており、RAIDの使用のためにたとえば7秒に安全に調整できると想定するのは正しいですか?

3
korkman

適合性はニーズによって異なります。あなたにとって、90秒は適切ではないように思えます。

過去にベンダーのドキュメントで、アレイのフェイルオーバーやコントローラーのファームウェアの更新などをより適切に処理するために、 fibre-channel HBAタイムアウトを60秒以上に設定することを推奨しているのを見てきました。欠点は、ご指摘のとおりです。ストレージを返すまでに非常に長い遅延が発生する可能性があります。

そして実際、それは悪いことではありません。多くのオペレーティングシステムは、HBAタイムアウトが発生した場合、LUNを強制的にマウント解除します。これは、ブロックを返すための時折の長い遅延よりもはるかに混乱を招く可能性があります。秘訣は、以下のバランスを取ることです。

  • ストレージスタックが長いラグを生成する可能性
  • 遅延データに対する許容度
  • マウント解除されたLUNの許容範囲

一般に、RAIDアレイに配置するdisksは、RAIDコントローラーが他の場所でブロック要求を処理することを通知するため、タイムアウト値を低くする必要があります。これが、ハードウェアRAIDカードで使用する場合にコンシューマーグレードのドライブが不適切である大きな理由の1つです。それらのタイムアウトは非常に長いため、望ましくない問題が発生する可能性があります。

3
sysadmin1138