Hang I/O terjadi ketika sistem menjadi tidak stabil atau bahkan mati akibat permintaan I/O yang memakan waktu. Untuk mendeteksi hang I/O secara akurat, Alibaba Cloud Linux 2 dan Alibaba Cloud Linux 3 memperluas struktur data inti guna menyediakan fitur yang dapat mengidentifikasi dan mendeteksi hang I/O dengan overhead sistem yang rendah. Topik ini menjelaskan antarmuka untuk fitur tersebut serta contoh penggunaannya.
Deskripsi Antarmuka
Antarmuka | Deskripsi |
/sys/block/<device>/queue/hang_threshold | Antarmuka ini memungkinkan Anda untuk menanyakan dan memodifikasi ambang batas untuk hang I/O. Satuan ambang batas: ms. Nilai default: 5000. |
/sys/block/<device>/hang | Antarmuka ini memungkinkan Anda untuk menanyakan jumlah operasi I/O yang melebihi ambang batas untuk hang I/O pada perangkat. |
/sys/kernel/debug/block/<device>/rq_hang | Antarmuka ini memungkinkan Anda untuk menanyakan detail tentang hang I/O. |
/proc/<pid>/wait_res | Antarmuka ini memungkinkan Anda untuk menanyakan informasi tentang sumber daya yang sedang ditunggu oleh proses. |
/proc/<pid>/task/<tid>/wait_res | Antarmuka ini memungkinkan Anda untuk menanyakan informasi tentang sumber daya yang sedang ditunggu oleh thread. |
Tabel berikut menjelaskan variabel dalam antarmuka di atas.
Variabel | Deskripsi |
<device> | Nama perangkat penyimpanan blok. |
<pid> | ID proses. |
<tid> | ID thread. |
Contoh 1
Anda dapat memanggil antarmuka /sys/block/<device>/queue/hang_threshold untuk memodifikasi ambang batas hang I/O. Dalam contoh ini, ambang batas diubah dari 5.000 ms menjadi 10.000 ms.
Ubah ambang batas hang I/O disk vdb menjadi 10.000 ms.
echo 10000 > /sys/block/vdb/queue/hang_thresholdLihat hasil perubahan.
cat /sys/block/vdb/queue/hang_thresholdContoh keluaran:
10000
Contoh 2
Anda dapat memanggil antarmuka /sys/block/<device>/hang untuk menanyakan jumlah operasi I/O yang menyebabkan hang I/O pada disk. Dalam contoh ini, disk vdb digunakan.
Contoh perintah:
cat /sys/block/vdb/hangContoh keluaran:
0 1 # Nilai di sebelah kiri menunjukkan jumlah operasi baca yang menyebabkan hang I/O. Nilai di sebelah kanan menunjukkan jumlah operasi tulis yang menyebabkan hang I/O.Contoh 3
Anda dapat memanggil antarmuka /sys/kernel/debug/block/<device>/rq_hang untuk menanyakan detail hang I/O. Dalam contoh ini, disk vdb digunakan.
Contoh perintah:
cat /sys/kernel/debug/block/vdb/rq_hangContoh keluaran:
ffff9e50162fc600 {.op=WRITE, .cmd_flags=SYNC, .rq_flags=STARTED|ELVPRIV|IO_STAT|STATS, .state=in_flight, .tag=118, .internal_tag=67, .start_time_ns=1260981417094, .io_start_time_ns=1260981436160, .current_time=1268458297417, .bio = ffff9e4907c31c00, .bio_pages = { ffffc85960686740 }, .bio = ffff9e4907c31500, .bio_pages = { ffffc85960639000 }, .bio = ffff9e4907c30300, .bio_pages = { ffffc85960651700 }, .bio = ffff9e4907c31900, .bio_pages = { ffffc85960608b00 }}Keluaran di atas menunjukkan detail operasi I/O. Parameter io_start_time_ns menunjukkan waktu mulai permintaan I/O, dan parameter ini memiliki nilai yang ditetapkan. Hal ini menunjukkan bahwa permintaan I/O tidak diproses tepat waktu, sehingga mengakibatkan waktu I/O yang berkepanjangan.
Contoh 4
Anda dapat memanggil antarmuka /proc/<pid>/wait_res untuk menanyakan informasi tentang sumber daya yang sedang ditunggu oleh suatu proses. Dalam contoh ini, proses 577 digunakan.
Contoh perintah:
cat /proc/577/wait_resContoh keluaran:
1 0000000000000000 4310058496 4310061448 # 1 adalah nilai Field 1, 0000000000000000 adalah nilai Field 2, 4310058496 adalah nilai Field 3, dan 4310061448 adalah nilai Field 4.Tabel berikut menjelaskan parameter dalam keluaran contoh.
Parameter | Deskripsi |
Field 1 | Jenis sumber daya yang sedang ditunggu oleh proses. Nilai 1 menunjukkan halaman cache dalam sistem file. Nilai 2 menunjukkan lapisan I/O blok. |
Field 2 | Alamat sumber daya (halaman cache atau lapisan I/O blok) yang sedang ditunggu oleh proses. |
Field 3 | Waktu saat proses mulai menunggu sumber daya. |
Field 4 | Waktu saat ini ketika file sedang dibaca. Selisih antara Field 4 dan Field 3 adalah jumlah waktu yang dihabiskan oleh proses untuk menunggu sumber daya. |