すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Linux:ファイルシステムとブロックレイヤーのI/Oハングを検出する

最終更新日:Jul 10, 2024

I/Oハングは、システムが不安定になったり、時間のかかるI/O要求のためにダウンしたりしたときに発生します。 I/Oハングを正確に検出するために、Alibaba Cloud Linux 2およびAlibaba Cloud Linux 3は、コアデータ構造を拡張して、低システムオーバーヘッドでI/Oハングを識別および検出できる機能を提供します。 このトピックでは、この機能のインターフェイスとインターフェイスの使用例について説明します。

インターフェイス説明

インターフェイス

説明

/sys/block/<device>/queue/hang_threshold

このインターフェイスを使用すると、I/Oハングのしきい値を照会および変更できます。 しきい値の単位: ms。 デフォルト値: 5000。

/sys/block/<デバイス>/hang

このインターフェイスを使用すると、デバイスでハングしているI/Oのしきい値を超えるI/O操作の数を照会できます。

/sys/kernel/debug/block/<device>/rq_hang

このインターフェイスを使用すると、I/Oハングに関する詳細を照会できます。

/proc/<pid>/wait_res

このインターフェイスを使用すると、プロセスが待機しているリソースに関する情報を照会できます。

/proc/<pid>/task/<tid>/wait_res

このインターフェイスを使用すると、スレッドが待機しているリソースに関する情報を照会できます。

次の表に、上記のインターフェイスの変数を示します。

変数

説明

<デバイス>

ブロックストレージデバイスの名前。

<pid>

プロセスのID。

<tid>

スレッドID。

例 1

/sys/block/<device>/queue/hang_thresholdインターフェイスを呼び出して、I/Oハングのしきい値を変更できます。 この例では、閾値は5,000 msから10,000 msに変更される。

  1. vdbディスクのI/Oハングのしきい値を10,000 msに変更します。

    echo 10000 > /sys/block/vdb/queue/hang_threshold
  2. 変更結果を表示します。

    cat /sys/block/vdb/queue/hang_threshold

    サンプル出力:

    10000

例 2

/sys/block/<device>/hangインターフェイスを呼び出して、ディスク上でI/Oがハングする原因となるI/O操作の数を照会できます。 この例では、vdbディスクが使用されています。

サンプルコマンド:

cat /sys/block/vdb/hang

サンプル出力:

0        1     # The value on the left indicates the number of read operations that cause I/O hangs. The value on the right indicates the number of write operations that cause I/O hangs.

例 3

/sys/kernel/debug/block/<device>/rq_hangインターフェイスを呼び出して、I/Oハングの詳細を照会できます。 この例では、vdbディスクが使用されています。

サンプルコマンド:

cat /sys/kernel/debug/block/vdb/rq_hang

サンプル出力:

ffff9e50162fc600 {.op=WRITE, .cmd_flags=SYNC, . r60c360c1500.8ffages | ELVPRIV | IO_ffAT | STATS, .state=in_flight, .tag=118, .internal_tag=67, .start_time_ns=1260981417094, io_59bio c.8. bio = ffff9e4907c30300, .bio_pages = { ffffc85960651700 }, .bio = ffff9e4907c31900, .bio_pages = { ffffc85960608b00}

上記の出力は、I/O操作の詳細を示しています。 io_start_time_nsはI/O要求の開始時刻を示し、このパラメーターには値が割り当てられています。 これは、I/O要求が適時に処理されなかったことを示し、これは、I/O時間の延長につながる。

例 4

/proc/<pid>/wait_resインターフェイスを呼び出して、プロセスが待機しているリソースに関する情報を照会できます。 この例では、577プロセスが使用されます。

サンプルコマンド:

cat /proc/577/wait_res

サンプル出力:

1 0000000000000000 4310058496 4310061448    # 1 is the value of Field 1, 0000000000000000 is the value of Field 2, 4310058496 is the value of Field 3, and 4310061448 is the value of Field 4.

次の表に、サンプル出力のパラメーターを示します。

パラメーター

説明

フィールド1

プロセスが待機しているリソースのタイプ。 値1は、ファイルシステム内のキャッシュページを示します。 値2は、ブロックI/O層を示す。

フィールド2

プロセスが待機しているリソース (キャッシュページまたはブロックI/O層) のアドレス。

フィールド3

プロセスがリソースを待ち始めた時刻。

フィールド4

ファイルが読み取られている現在の時刻。 フィールド4とフィールド3の違いは、プロセスがリソースを待つのにかかる時間です。