Topik ini menjelaskan penyebab dan solusi untuk masalah ketika disk Non-Volatile Memory Express (NVMe) pada instance Elastic Compute Service (ECS) Linux tidak tersedia akibat parameter io_timeout yang tidak valid.
Deskripsi masalah
Ketika instance ECS Linux menggunakan disk NVMe sebagai disk sistem, operasi baca/tulis I/O pada instance tersebut menjadi lambat. Akibatnya, sistem operasi atau aplikasi yang di-hosting pada instance tersebut tidak dapat melakukan operasi baca/tulis I/O pada disk NVMe. Status sistem file pada disk NVMe berubah dari mode baca-tulis menjadi hanya-baca. Operasi penulisan berikutnya gagal pada disk NVMe, sehingga sistem operasi dan aplikasi tidak dapat menyediakan layanan seperti yang diharapkan.
I/O lambat mengacu pada skenario di mana operasi baca/tulis I/O pada disk dilakukan dengan laju lebih rendah dari yang diharapkan atau memerlukan waktu lama untuk diselesaikan.
Penyebab
Parameter io_timeout driver NVMe menentukan periode timeout maksimum untuk I/O. Jika latensi operasi I/O melebihi nilai parameter io_timeout, driver NVMe akan gagal dalam operasi I/O dan mengembalikan kesalahan. Akibatnya, status sistem file pada disk NVMe mungkin berubah dari mode baca-tulis menjadi hanya-baca. Jika status disk NVMe berubah menjadi hanya-baca, operasi penulisan berikutnya pada disk gagal, sehingga sistem operasi atau aplikasi yang di-hosting pada instance tersebut tidak dapat menyediakan layanan seperti yang diharapkan.
Pada sebagian besar distribusi Linux, parameter
io_timeoutmemiliki nilai default 30 detik. Untuk mencegah kesalahan timeout operasi I/O pada disk NVMe, atur parameterio_timeoutke nilai maksimum yang didukung. Pada versi kernel terbaru, nilai maksimum yang didukung untuk parameterio_timeoutadalah 4.294.967.295 detik. Pada versi kernel yang lebih lama, nilai maksimum yang didukung adalah 255 detik.Modul kernel driver NVMe bervariasi berdasarkan versi kernel. Modul kernel berikut digunakan untuk driver NVMe: nvme.ko dan
nvme_core.ko. Nama lengkap parameterio_timeoutbisa jadinvme.io_timeoutataunvme_core.io_timeout.
Solusi
Konfigurasi sementara parameter io_timeout
Anda dapat mengatur parameter io_timeout dengan langkah-langkah berikut. Nilai yang Anda tentukan untuk parameter io_timeout bersifat sementara dan perlu diatur ulang setiap kali instance ECS Linux di-restart.
Hubungkan ke instance ECS Linux.
Untuk informasi lebih lanjut, lihat Ikhtisar Metode Koneksi.
Periksa jalur modul kernel yang berisi parameter
io_timeout.Jalankan perintah berikut untuk memeriksa apakah jalur /sys/module/nvme_core/parameters/io_timeout ada. Jika jalur tersebut ada, nama lengkap parameter
io_timeoutadalahnvme_core.io_timeout.cat /sys/module/nvme_core/parameters/io_timeoutJika jalur tersebut tidak ada, jalankan perintah berikut untuk memeriksa apakah jalur /sys/module/nvme/parameters/io_timeout ada. Jika jalur tersebut ada, nama lengkap parameter
io_timeoutadalahnvme.io_timeout.cat /sys/module/nvme/parameters/io_timeout
Jalankan salah satu perintah berikut untuk menulis nilai 4.294.967.295 ke jalur yang diperoleh pada langkah sebelumnya.
Modul kernel nvme.kosudo sh -c 'echo 4294967295 > /sys/module/nvme/parameters/io_timeout'Modul kernel nvme_core.kosudo sh -c 'echo 4294967295 > /sys/module/nvme_core/parameters/io_timeout'Jika perintah berhasil dijalankan tanpa kesalahan, parameter
io_timeouttelah diatur ke 4.294.967.295.Jika pesan kesalahan seperti
Numerical result out of rangedikembalikan, ulangi langkah ini untuk mengatur parameterio_timeoutke 255.
Konfigurasi permanen parameter io_timeout
Anda dapat mengubah nilai parameter io_timeout dalam file konfigurasi GRand Unified Bootloader (GRUB) atau menggunakan plugin ecs_nvme_config Cloud Assistant untuk mengonfigurasi pengaturan terkait NVMe dalam sistem operasi instance. Untuk informasi lebih lanjut, lihat Bagaimana cara menginstal driver NVMe untuk image kustom? Nilai yang Anda tentukan untuk parameter io_timeout bersifat permanen dan tidak dipengaruhi oleh faktor-faktor seperti startup instance.