Mengurangi waktu coba-coba blokir / tunggu yang buruk di Ubuntu

10

Bagaimana saya bisa mengurangi waktu tunggu IO dan coba lagi kali sehingga OS tidak terus mencoba untuk menulis ke drive yang gagal?

Saya memiliki sistem yang saya gunakan untuk membuat salinan konten demo yang dipinjamkan ke pelanggan ke hard drive desktop SATA biasa. Kami menghubungkan banyak drive sekaligus melalui SAS dan menyalin konten ke mereka menggunakan skrip.

Karena drive dipinjamkan, kadang-kadang beberapa kembali rusak tetapi saya tidak tahu bahwa itu rusak, jadi pada saat drive tersebut digunakan kembali dalam operasi penyalinan, drive memperlambat drive lain saat sistem mencoba IO ke drive itu. Terkadang butuh waktu berjam-jam sebelum saya melihat drive buruk dan menghapusnya. Setelah drive dilepas, sisa drive mulai menulis dengan kecepatan normal.

Saya tidak peduli tentang memulihkan drive buruk. Saya hanya perlu menyingkirkan mereka sehingga mereka tidak memperlambat segalanya.

Saya juga meneliti badblock dan smartmontools dan mempertimbangkan untuk menulis pra-cek pada drive sebelum saya mulai menulis.

OS: Ubuntu Linux (12,04 lts)

Ryan Sorensen
sumber
Apa yang salah dengan memeriksa data SMART melalui udisks/ smartmonctl? Masalah klasik XY di sini, metinks.
Pemburu Rusa
2
Terima kasih, saya akan meneliti smartmonctl lebih lanjut. Dalam pengalaman saya, jika bad sector terjadi selama pengiriman terakhir, status SMART menunjukkan bahwa drive masih bagus, dan berkinerja baik sampai beberapa bagian acak selama penyalinan, dan kemudian melambat hingga merangkak, juga memengaruhi drive lain hingga itu dihapus.
Ryan Sorensen
Pertanyaannya belum menerima jawaban langsung, jadi kami tidak tahu apakah itu mungkin di linux: Bagaimana saya bisa mengurangi waktu tunggu IO dan coba lagi waktu?
imz - Ivan Zakharyaschev
@ imz - IvanZakharyaschev unix.stackexchange.com/a/147304/25985 Namun, kernel tidak mencatat kesalahan ini, jadi jika semua yang Anda ingin lakukan adalah menangkap disk yang gagal sebelum menjadi lebih banyak masalah, Anda dapat memindai log sistem di berkala.
goldilocks
@ Gol Bagaimana jika saya ingin menangkapnya lebih cepat? Tanpa menunggu Tuhan tahu berapa banyak waktu sebelum operasi IO membuka blokir melaporkan kesalahan? (Sebenarnya, saya mencoba untuk menyimpan data dari disk dengan kesalahan, tetapi masalah saya serupa: berlari ke sektor-sektor yang "salah" ini menyebabkan penundaan yang sangat besar. ... Mungkin saya juga bisa mengikuti saran, dan menemukan cara untuk masukkan info dari tes SMART ke ddrescuesehingga bahkan tidak menyentuh sektor yang dilaporkan oleh SMART.)
imz - Ivan Zakharyaschev

Jawaban:

7

Saya belum pernah menggunakan tunable ini sebelumnya, tetapi Anda mungkin ingin menyesuaikan eh_timeout (penanganan error timeout) untuk drive yang dimaksud:

[root@localhost device]# cat /sys/block/sda/device/eh_timeout
10
[root@localhost device]# 

Acara di atas sdadiatur ke 10 detik. Dari Red Hat Knowledgebase:

Dalam konfigurasi penyimpanan tertentu (misalnya, konfigurasi dengan banyak LUN), kode penanganan kesalahan SCSI dapat menghabiskan banyak waktu mengeluarkan perintah seperti TEST UNIT READY ke perangkat penyimpanan yang tidak responsif. Parameter sysfs baru, eh_timeout, telah ditambahkan ke objek perangkat SCSI, yang memungkinkan konfigurasi nilai batas waktu untuk perintah TEST UNIT READY dan REQUEST SENSE yang digunakan oleh kode penanganan kesalahan SCSI. Ini mengurangi jumlah waktu yang dihabiskan untuk memeriksa perangkat yang tidak responsif ini. Nilai default eh_timeout adalah 10 detik, yang merupakan nilai batas waktu yang digunakan sebelum menambahkan fungsionalitas ini.

Bratchley
sumber
Saya sedang memeriksa ini sekarang. Ubuntu tidak memiliki eh_timeout, tetapi memiliki file timeout yang mungkin sama. Nilai default Ubuntu adalah 30 detik. Akan menguranginya menjadi 5 detik dan melaporkan kembali.
Ryan Sorensen
1
Karena penasaran, apa hasil Anda?
Bratchley
Mengatur flag batas waktu pada 12,04 tampaknya tidak melakukan apa-apa. Saya berencana untuk meningkatkan sistem uji ke 14,04 akhir pekan ini karena memang memiliki eh_timeout (dan juga batas waktu).
Ryan Sorensen
@RyanSorensen, jadi apakah Anda mendapatkan kesempatan untuk melihat apakah parameter ini pernah berfungsi?
Nat
Saya tidak dapat memodifikasi eh_timeouttetapi saya dapat mengubah timeoutuntuk menyelesaikan tugas yang ada.
GuitarPicker
2

Pantau /sys/block/<dev>/statperangkat yang Anda minati dan bandingkan parameter ke-10 (io_ticks).

misalnya, ticks = io_ticks - prev_ticks / seconds_deltatime / 10

Ini adalah persentase waktu yang tersedia yang telah dihabiskan oleh disk untuk menunggu disk io.

Mendekati 100% tentu saja layak untuk diperiksa, atau menjadi sangat pintar dan membandingkannya dengan rata-rata semua disk Anda dan memilih disk apa pun di atas rata-rata.

Lihat dokumentasi statistik lapisan blok .

Lain gunakan sesuatu seperti Munin dan grafik itu. Anda bisa membuat Munin waspada jika melampaui ambang, misalnya 90% atau apa pun yang ditampilkan grafik adalah angka peringatan yang baik.

misalnya, lihat dua grafik Munin ini yang menunjukkan bahwa / dev / sdi perlu dilihat. Dalam contoh ini jika / dev / sdi adalah bagian dari array, seluruh array akan menderita karenanya.

Pemanfaatan disk per perangkat - berdasarkan hari

Pemanfaatan disk per perangkat - per minggu

Jika Anda melihat grafik minggu Anda akan melihat bahwa / dev / sdc mungkin lambat juga.

Saya harus menambahkan bahwa / dev / sdi di atas tidak rusak, itu hanya disk lambat (sebenarnya disk hijau yang ditambahkan seseorang ke array disk sata kelas perusahaan) yang memperlambat array ke bawah. Disk yang gagal sebenarnya akan menonjol seperti jempol yang sakit.

Singkatnya, saya mungkin akan pergi dengan skrip jika saya punya waktu, tetapi Munin jika saya hanya ingin solusi cepat dan menghubungkan ke server itu mudah.

Ian Macintosh
sumber
Terima kasih! Informasi tentang statistik io di Linux benar-benar baru dan tampaknya berguna (bagi saya) dalam situasi seperti itu.
imz - Ivan Zakharyaschev