カーネルバージョン4.19.81-17.al7
から始まるAlibaba Cloud Linux 2とAlibaba Cloud Linux 3は、ブロックI/Oスロットリングをより適切に監視するためのインターフェイスを提供します。 このトピックでは、インターフェイスについて説明し、インターフェイスの使用方法の例を示します。
背景情報
LinuxブロックI/Oスロットリング (BPSまたはIOPS) は、複数のシナリオ、特にcgroupライトバックが有効になっているシナリオで必要です。 Alibaba Cloud Linuxは、ブロックI/Oスロットリングのモニタリングを強化し、I/Oスロットリング関連の操作を簡単に実行できるようにするインターフェイスを提供します。
インターフェイス
インターフェイス | 説明 |
blkio.throttle.io_service_time | I/O操作の要求ディスパッチから要求完了までの合計時間。 単位: ナノ秒。 |
blkio.throttle.io_wait_time | I/O操作がスケジューラーキューで待機する合計時間。 単位: ナノ秒。 |
blkio.throttle.io_completed | 完了したI/O操作の数。 これは、ブロックI/Oスロットリングレイヤーの平均レイテンシを計算するために使用されます。 |
blkio.throttle.total_io_queued | スロットリングされたI/O操作の数。 現在のサイクルでスロットリングされたI/O操作の数は、定期的な監視データに基づいて計算でき、I/Oレイテンシがスロットリングに関連しているかどうかを分析するために使用できます。 |
blkio.throttle.total_bytes_queued | スロットリングされたI/Oバイト数。 単位:バイト |
上記のインターフェイスは /sys/fs/cgroup/blkio/<cgroup>/ に格納されます。<cgroup>
はコントロールグループを指定します。
例
上記のインターフェイスを使用して、ディスクの平均I/Oレイテンシを取得できます。 この例では、vddディスクの平均I/Oライトレイテンシを5秒間隔で監視し、vddディスクの平均I/Oレイテンシを計算します。 次の表に、関連するパラメーターを示します。
パラメーター | 説明 |
write_wait_time<N> | ブロックI/Oスロットリング層でのスロットリングの継続時間。 |
write_service_time<N> | I/O操作の要求ディスパッチから要求完了までの合計時間。 |
write_completed<N> | 完了したI/O操作の数。 |
T1時間にモニタリングデータを取得します。
write_wait_time1 = 'cat /sys/fs/cgroup/blkio/blkcg1/blkio.throttle.io_wait_time | grep -w "254:48 Write" | awk '{print $3}'' write_service_time1 = 'cat /sys/fs/cgroup/blkio/blkcg1/blkio.throttle.io_service_time | grep -w "254:48書き込み" | awk '{print $3}'' write_completed1 = 'cat /sys/fs/cgroup/blkio/blkcg1/blkio.throttle.io_completed | grep -w "254:48 Write" | awk '{print $3}''
5秒待って、T2 (T1 + 5 s) 時間でモニタリングデータを取得します。
write_wait_time2 = 'cat /sys/fs/cgroup/blkio/blkcg1/blkio.throttle.io_wait_time | grep -w "254:48 Write" | awk '{print $3}'' write_service_time2 = 'cat /sys/fs/cgroup/blkio/blkcg1/blkio.throttle.io_service_time | grep -w "254:48書き込み" | awk '{print $3}'' write_completed2 = 'cat /sys/fs/cgroup/blkio/blkcg1/blkio.throttle.io_completed | grep -w "254:48 Write" | awk '{print $3}''
次の式に基づいて、5秒間の平均I/Oレイテンシを計算します。
平均I/Oレイテンシ=(T2時間での合計I/O継続時間-T1時間での合計I/O継続時間)/(T2時間で完了したI/O操作の数-T1時間で完了したI/O操作の数)
avg_delay = 'echo "((write_wait_time2 + write_service_time2) - (write_wait_time1 + write_service_time1)) / (write_completed2 - write_completed1)" | bc'