Apa yang dimaksud dengan "Operasi IO pada alamat blok logis # untuk Disk # telah dicoba kembali."

22

Saya memiliki multipath IO dikonfigurasi server 2012 blade yang menampilkan peringatan seperti berikut selama kegagalan jalur MPIO:

Operasi IO pada alamat blok logis 0 untuk Disk 7 telah diulang.

Saya tahu apa yang menyebabkan peringatan terjadi sehingga saya tidak mencari penyebabnya tetapi apa arti pesan ini sebenarnya?

Apakah ini berarti bahwa jika IO ini adalah operasi tulis maka server benar-benar kehilangan data yang ia coba tulis?

Terima kasih atas cahaya apa pun yang dapat Anda berikan pada makna pesan peringatan ini.

Chris Magnuson
sumber

Jawaban:

28

Tidak, itu tidak berarti bahwa data itu hilang. Ini hanya berarti bahwa IRP (Paket Permintaan IO) habis sementara Sistem IO menunggu untuk selesai, dan karenanya dicoba lagi. Ketika utas memulai operasi IO, manajer IO membuat IRP untuk mewakili operasi saat melewati sistem.

IRP disimpan dalam keadaan awal dalam daftar buffer / look-selain, sehingga dapat dicoba lagi jika gagal pertama kali. Itu memberikan atomicity yang diharapkan dari sistem transaksional apa pun sehingga kami dapat lebih yakin bahwa Anda tidak akan mendapatkan banyak data yang rusak atau tidak lengkap yang ditulis ke disk Anda.

Acara ini sangat masuk akal jika terjadi kegagalan MPIO. Katakanlah Windows masuk untuk membaca atau menulis sesuatu dari penyimpanan SAN. Permintaan dikirim, dan pada saat yang sama, saya memotong salah satu kabel ke SAN. Permintaan itu tidak akan pernah selesai, dan karenanya Windows akan mencoba permintaan itu lagi, hanya saja kali ini permintaan akan mengikuti jalur lainnya.

Peristiwa ini juga terjadi ketika disk overburdened atau hanya sangat lambat. Anda mungkin melihat pesan-pesan ini bertepatan dengan cadangan terjadwal, dll. Disk mungkin lambat dan sibuk, dan beberapa IRP acak habis dan harus mencoba lagi. IRP bisa saja terjebak dalam rutinitas layanan interupsi, atau panggilan prosedur yang ditangguhkan, atau apa pun.

Saya bisa melihat memiliki banyak pengandar filter IO di tumpukan Anda memperburuk masalah ini juga.

Bukan karena perilaku ini tidak terjadi seperti ini di versi Windows sebelumnya, hanya saja Microsoft tampaknya memutuskan untuk memunculkan peristiwa ini di Win8 / Server 2012.

Sunting: Anda dapat menemukan IRP yang luar biasa dari utas dengan debugger kernel:, kd> !irp 1a2b3c4dtempat Anda sebelumnya menemukan alamat itu dengan mengeluarkan perintah kd> !process 8f7d6c4ayang akan mencantumkan semua IRP yang terkait dengan utas yang terkait dengan proses itu. kd> !process 0 0untuk membuat daftar semua proses yang berjalan.

Setelah Anda mencantumkan informasi tentang IRP menggunakan perintah! Irp, Anda dapat dengan mudah menemukan driver mana yang terakhir menangani IRP karena itu akan >menunjuk ke dalamnya dalam daftar. Kemudian untuk mendapatkan informasi lebih lanjut tentang apa yang driver lakukan dengan IRP itu, lakukan di kd> !devobj 1a2b3c4d5e6fmana itu adalah alamat sebenarnya dari objek perangkat.

Kemudian lakukan kd> dt 0x1a2b3c3c2b1a _CLASS_PRIVATE_FDO_DATAmenggunakan alamat struktur PrivateFdoData yang Anda dapatkan.

Sekarang Anda siap untuk membuang struktur data AllTransferPacketsList yang Anda dapatkan dari PrivateFdoData.

Idenya adalah, Anda melacak driver apa yang melakukan apa dengan IRP terakhir kali terlihat. Jika IRP terlalu lama, itu habis dan coba lagi dari awal. Ini bisa disebabkan oleh begitu banyak hal ... bahkan sinar kosmik yang tersesat. Tetapi yang penting adalah bahwa transaksi akan dicoba kembali dari awal, dan itu tidak akan dianggap lengkap sampai manajer IO mengatakan itu.

Oh, dan ada juga benang-agnostik IO yang merupakan kaleng cacing yang sama sekali berbeda. :)

Untuk membaca lebih lanjut tentang topik ini, saya sangat merekomendasikan bab 8, Sistem I / O, Windows 6 edisi Internals, dari Mark Russinovich, Margosis, et al.

Edit **: ** Saya akhirnya menemukan KB resmi untuk kesalahan ini: http://support.microsoft.com/kb/2819485/EN-US

Operasi IO harus dicoba lagi 8 kali, sekali per menit, sampai Windows menyerah.

Sunting: Seperti yang dijanjikan: http://blogs.msdn.com/b/ntdebugging/archive/2013/04/30/interpreting-event-153-errors.aspx

Ryan Ries
sumber
1
Terima kasih Ryan, saya berharap itu berarti bahwa permintaan sudah dibatalkan tetapi datanya tidak hilang dan permintaan lain akan dibuat untuk mencoba menulis data lagi. Dapatkah Anda merujuk sumber mana pun untuk jawaban Anda (buku, artikel, catatan yang menunjukkan bahwa Anda memiliki akses ke kode sumber windows karena Anda adalah pelanggan EA yang sangat besar dan melakukan penelusuran debug untuk menemukan informasi ini, dll.)? Saya ingin memahami ini lebih jauh.
Chris Magnuson
2
Mengedit posting saya untuk menjawab pertanyaan tindak lanjut Anda. Kemungkinannya adalah saya akan memiliki lebih banyak info untuk ditambahkan nanti.
Ryan Ries
2
Siapa pun yang dapat turun ke Windows Debugger untuk mendukung poin mereka mendapatkan beberapa pujian serius dalam buku saya. Tidak dapat memilih lagi jawaban sehingga membatalkan komentar harus dilakukan. Saya memiliki Windows Internals 6th edition bagian 1 dan saya akan membeli bagian 2 dengan bab 8 sekarang. Terima kasih
Chris Magnuson
Seperti yang dijanjikan: blogs.msdn.com/b/ntdebugging/archive/2013/04/30/…
Ryan Ries
6

Tidak, akan ada pesan yang berbeda, dan (semoga) salah satu lapisan aplikasi akan mengeluarkan pengecualian jika gagal menyimpan data dengan sukses.

Sebelum ke Windows Server 2012 (atau perbaikan terbaru 2819485 jika pada Windows Server 2008 R2), sistem akan mencoba kembali secara diam-diam ketika waktu habis ini terjadi. Tujuan dari pesan ini adalah untuk meningkatkan visibilitas tentang kejadian-kejadian ini. Mereka mungkin menunjukkan masalah kapasitas atau cacat driver, dan dalam kasus iSCSI, cacat sistem operasi lain mungkin dikaitkan dengan keterlambatan.

Dalam hal penyimpanan eksternal (tidak terhubung langsung), beberapa vendor di masa lalu telah meningkatkan nilai batas waktu, misalnya menjadi 60 detik. Namun, mengingat jumlah coba ulang standar oleh komponen lapisan yang lebih tinggi seperti inisiator iSCSI, ini bisa berarti bahwa beberapa menit mungkin berlalu sebelum sistem memulai failover. Itu jelas akan menjadi perilaku suboptimal.

Informasi lebih lanjut:

Entri Registri untuk Driver Miniport SCSI
http://msdn.microsoft.com/en-us/library/windows/hardware/ff563970%28v=vs.85%29.aspx

https://blogs.msdn.com/b/san/archive/2011/09/01/the-windows-disk-timeout-value-understanding-why-this-should-be-set-to-a-small- value.aspx


Microsoft telah meluncurkan pembaruan yang menyediakan kemampuan untuk menentukan ambang batas untuk operasi storport.sys.

Setelah Anda menginstal pembaruan ini, Anda bisa mencatat peristiwa ketika waktu latensi untuk I / O ke penyimpanan sama dengan, atau lebih besar dari, ambang batas. Nilai ambang batas dapat diatur oleh pengguna. Operasi ini dilakukan pada tingkat Driver Adaptor sehingga Anda dapat melihat apakah ada masalah kinerja pada SAN. Kemudian, Anda dapat menghubungi vendor penyimpanan untuk mengatasi masalah ini.

Catatan: Pembaruan ini mengembalikan fungsionalitas yang disediakan di Windows 7 dan Windows Server 2008 R2. Ketika fungsi diaktifkan, nilai ambang diukur dalam 100 nanodetik (0,0001 milidetik). Selain itu, nilai-nilai berikut dicatat dalam acara:

BuildIoDuration : Lamanya waktu yang dihabiskan MINIPORT dalam fungsi build I / O untuk permintaan ini StartIoDuration : Lamanya waktu yang MINIPORT habiskan di awal, fungsi I / O untuk permintaan ini DataTransferLength : Ukuran transfer dalam byte

Pembaruan yang meningkatkan kapabilitas pengandarr driver Storport.sys di Windows Server 2012
http://support.microsoft.com/kb/2819476

Pembaruan kumulatif Windows 8 dan Windows Server 2012: April 2013
http://support.microsoft.com/kb/2822241

Greg Askew
sumber
4

Mungkin posting yang terlambat, tetapi saya telah menemukan bahwa itu dapat disebabkan oleh VSS. Kami memiliki klien yang menjalankan veeam tetapi lupa mematikan server windows cadangan (disk dihapus) Ini menyebabkan banyak masalah dan kesalahan ini adalah yang utama.

Menghentikan kembali dan wham, tidak ada kesalahan.

dale wright
sumber