mptscsih: ioc0: tugas batalkan: SUKSES (rv = 2002) menyebabkan 30 detik pembekuan

12

I / O ke perangkat lunak saya RAID6 sering macet sekitar 30 detik setelah semuanya kembali normal.

Setelah pembekuan selesai ini dimasukkan ke syslog:

Mar 14 18:43:57 server kernel: [35649.816060] sd 5:0:23:0: [sdy] CDB: Read(10): 28 00 6c 52 68 58 00 04 00 00
Mar 14 18:43:58 server kernel: [35651.149020] mptbase: ioc0: LogInfo(0x31140000): Originator={PL}, Code={IO Executed}, SubCode(0x0000) cb_idx mptscsih_io_done
Mar 14 18:43:58 server kernel: [35651.151962] mptscsih: ioc0: task abort: SUCCESS (rv=2002) (sc=ffff8807b02dfe80)
Mar 14 18:43:58 server kernel: [35651.151967] mptscsih: ioc0: attempting task abort! (sc=ffff88002a7f30c0)
Mar 14 18:43:58 server kernel: [35651.151972] sd 5:0:23:0: [sdy] CDB: Read(10): 28 00 6c 52 6c 58 00 04 00 00
Mar 14 18:43:58 server kernel: [35651.151981] mptscsih: ioc0: task abort: SUCCESS (rv=2002) (sc=ffff88002a7f30c0)
Mar 14 18:43:58 server kernel: [35651.151984] mptscsih: ioc0: attempting task abort! (sc=ffff8804120e5ec0)
Mar 14 18:43:58 server kernel: [35651.151988] sd 5:0:23:0: [sdy] CDB: Read(10): 28 00 6c 52 70 58 00 04 00 00
Mar 14 18:43:58 server kernel: [35651.151996] mptscsih: ioc0: task abort: SUCCESS (rv=2002) (sc=ffff8804120e5ec0)
Mar 14 18:43:58 server kernel: [35651.151999] mptscsih: ioc0: attempting task abort! (sc=ffff880154afb280)
Mar 14 18:43:58 server kernel: [35651.152020] sd 5:0:23:0: [sdy] CDB: Read(10): 28 00 6c 52 74 58 00 04 00 00
Mar 14 18:43:58 server kernel: [35651.152029] mptscsih: ioc0: task abort: SUCCESS (rv=2002) (sc=ffff880154afb280)

Saya telah googled kesalahan dan seseorang menyarankan mencoba menggunakan 1.5Gbps daripada 3.0Gbps. Menggunakan lsiutilsaya mengubah kecepatan tautan:

# lsiutil -p 1 -i 

Firmware Settings
-----------------
SAS WWID:                       500605b002c0f680
Multi-pathing:                  Disabled
SATA Native Command Queuing:    Enabled
SATA Write Caching:             Enabled
SATA Maximum Queue Depth:       32
Device Missing Report Delay:    0 seconds
Device Missing I/O Delay:       0 seconds
Phy Parameters for Phynum:      0    1    2    3    4    5    6    7
  Link Enabled:                 Yes  Yes  Yes  Yes  Yes  Yes  Yes  Yes
  Link Min Rate:                1.5  1.5  1.5  1.5  1.5  1.5  1.5  1.5
  Link Max Rate:                1.5  1.5  1.5  1.5  1.5  1.5  1.5  1.5
  SSP Initiator Enabled:        Yes  Yes  Yes  Yes  Yes  Yes  Yes  Yes
  SSP Target Enabled:           No   No   No   No   No   No   No   No
  Port Configuration:           Auto Auto Auto Auto Auto Auto Auto Auto
Target IDs per enclosure:       1
Persistent mapping:             Enabled
Physical mapping type:          None
Target ID 0 reserved for boot:  No
Starting slot (direct attach):  0
Target IDs (physical mapping):  8
Interrupt Coalescing:           Enabled, timeout is 16 us, depth is 4

Itu tidak membantu.

Saya mencoba mengubah 'Device Missing I / O Delay' menjadi 32. Itu juga tidak membantu.

Saya mencoba mengubah / sys / class / scsi_device / * / device / timeout dari 30 menjadi 100 dan kemudian ke 3. Semua gagal.

$ uname -a
Linux server 3.2.0-0.bpo.1-amd64 #1 SMP Sat Feb 11 08:41:32 UTC 2012 x86_64 GNU/Linux
$ grep LSISAS1068E /var/log/messages
Mar 13 15:47:44 server kernel: [   21.082363] scsi5 : ioc0: LSISAS1068E B3, FwRev=01210000h, Ports=1, MaxQ=483, IRQ=45
$ modinfo mptscsih
filename:       /lib/modules/3.2.0-0.bpo.1-amd64/kernel/drivers/message/fusion/mptscsih.ko
version:        3.04.20
license:        GPL
description:    Fusion MPT SCSI Host driver
author:         LSI Corporation
srcversion:     85D42A00FEBA3C95555E3AF
depends:        scsi_mod,mptbase
intree:         Y
vermagic:       3.2.0-0.bpo.1-amd64 SMP mod_unload modversions 
$ cat /sys/block/sdae/device/model
ST3000DM001-9YN1
$ cat /sys/block/sdae/device/rev
CC4C

Masalahnya sangat jarang terjadi jika hanya ada operasi baca atau tulis: Saya bisa membaca atau menulis 1 TB tanpa masalah. Masalahnya tampaknya muncul ketika ada baik membaca dan menulis operasi. Pada raid6 yang terjadi jika Anda menulis file lebih kecil dari ukuran stripe dan Anda belum memiliki stripe di-cache (dalam hal ini stripe harus dibaca untuk menghitung checksum baru).

Sistem ini bukan mesin virtual.

Apa yang menyebabkan masalah? Bagaimana saya menyingkirkan 30 detik pembekuan?

Edit: pengujian tambahan

Saya telah menemukan set tes yang bagus yang tampaknya memicu masalah. Ini berisi file yang lebih kecil dari ukuran garis sehingga memaksa penghitungan ulang paritas sehingga memaksa banyak membaca dikombinasikan dengan menulis.

Saya harus mengakui bahwa saya tidak berpikir bahwa penjadwal antrian akan berdampak pada masalah ini. Saya salah. Jelas bahwa deadlineitu jauh lebih buruk daripada yang lain. Namun, tidak ada yang memecahkan masalah.

# cat /sys/block/sdaa/queue/scheduler
noop deadline [cfq]

Mengubah penjadwal untuk noopmenyebabkan masalah muncul setelah 100-120 detik.

parallel echo noop \> {} ::: /sys/block/sd*/queue/scheduler

Mengubah penjadwal deadlinemenyebabkan masalah muncul setelah 20-30 detik.

parallel echo deadline \> {} ::: /sys/block/sd*/queue/scheduler

Mengubah penjadwal untuk cfqmenyebabkan masalah muncul setelah 120-300 detik.

parallel echo cfq \> {} ::: /sys/block/sd*/queue/scheduler

Edit2

Karena scheduler memiliki efek, saya berpikir jika masalahnya disebabkan oleh terlalu banyak permintaan dalam jangka waktu. Bisakah saya membatasi jumlah permintaan yang dikirim per detik?

Ole Tange
sumber

Jawaban:

5

The MPTSCSIH-Driver Catatan Rilis dari LSI terlihat menarik.

Major Changes For Version 2.06.75.00-1
Release Date:  12/10/2007

General Changes
Functionality
•   Task Aborts for commands to a Volume are returned as FAILED and not sent to FW.

Versi mana driver Anda? ( modinfo mptscsih)

Gunakan tautan ini untuk informasi Seagate Firmware tentang drive Barracuda 3 TB Anda. Anda harus memasukkan nomor seri untuk mendapatkan detail.

Pembaruan: Coba smartctl -i /dev/sdaasaya baru saja mengujinya pada SCSI dan SATA dan mendapatkan nomor seri seperti itu.

Nils
sumber
Bagian mana dari catatan rilis driver yang menurut Anda relevan untuk masalah ini? Bagaimana cara menemukan nomor seri menggunakan GNU / Linux pada disk yang sedang dalam produksi? Dan apa yang Anda harapkan dari Seagate dalam hal ini? Versi mptscsih diperbarui dalam pertanyaan.
Ole Tange
@ OleTange saya memasukkan bagian "menarik". Meskipun driver Anda tampaknya lebih baru daripada itu mungkin masalah lama muncul kembali di sini. Adapun nomor seri ... Seagate hanya menawarkan Windows-tools. Di linux saya akan mencoba inqperintah - mungkin dari beberapa EMC-drivers (harus dapat diunduh secara bebas) - tetapi ini hanya dugaan saja.
Nils
2
@OleTange RE: "Bagaimana cara menemukan nomor seri menggunakan GNU / Linux pada disk yang sedang dalam produksi?" jalankan dmidecodeini akan menarik deskripsi komponen perangkat keras dari memori. Seringkali pada item tingkat konsumen Anda tidak akan memiliki entri untuk hard drive SN, tetapi, dengan gear perusahaan biasanya akan ditambahkan atau drive akan memiliki lebih banyak kecerdasan. Ada --typekode khusus untuk merujuk ke perangkat MFR jika mereka membuatnya tersedia. Perusahaan yang memasok array biasanya memberikan informasi ini sehingga drive yang ditarik dapat ditemukan.
2bc
@LinuxlyChallenged dmidecodetidak melihat drive - baik internal maupun eksternal. Saya tidak dapat menemukan inquntuk Debian.
Ole Tange
@OleTange gunakan smartctllihat jawaban saya yang diperbarui ...
Nils
2

Sudahkah Anda mencoba mengubah penjadwal I / O Anda?

   mccoy:/sys/block/sdb/queue # cat scheduler 
   noop anticipatory deadline [cfq] 
   mccoy:/sys/block/sdb/queue # echo noop > scheduler 
   mccoy:/sys/block/sdb/queue # cat scheduler 
   [noop] anticipatory deadline cfq 

Standarnya adalah CFQ biasanya untuk sebagian besar sistem "saat ini."

Untuk membandingkan penjadwal I / O lakukan hal berikut:

Baca pengujian:

# echo 3 > /proc/sys/vm/drop_caches

Ini akan memastikan Anda menguji disk dan tidak meng-cache halaman RAM, ini akan menghapus cache.

Pengujian menulis:

Salin file Anda beberapa kali secara bersamaan. Setelah menulis selesai masalah async

Jika Anda menguji keduanya, Anda mungkin ingin drop_cachesdan menelepon syncketika salinan selesai. Selain penjadwal ada tunables untuk setiap penjadwal. Tapi, tes cepat akan mengubah penjadwal dan coba lagi. Jika Anda memiliki pengontrol yang baik noopakan mengeluarkan "I / O Scheduling 'untuk itu dan tidak melakukan penjadwalan data tingkat OS.

Bagaimanapun, itu patut dicoba dan hanya perlu echountuk mengembalikannya.

2bc
sumber
Lihat pertanyaan terbaru untuk hasilnya.
Ole Tange
2

Saya telah memecahkan masalah dengan membeli kartu SAS2008. Masih mengeluh sedikit di log, tetapi tidak pernah memblokir disk I / O. Saya juga telah mengujinya mendukung 4 TB SATA drive, sedangkan LSI-SAS1068E hanya mendukung 2 TB.

Karena saya akan mengembalikan LSI-SAS1068E kepada penjual, saya tidak akan dapat mencoba saran lainnya. Karena itu saya menutup pertanyaan di sini.

Ole Tange
sumber