mptscsih: ioc0: task abort: SUCCESS (rv = 2002) provoca un congelamento di 30 secondi


12

L'I / O sul mio software RAID6 spesso si blocca per circa 30 secondi, dopodiché tutto torna alla normalità.

Al termine del blocco, questo viene inserito in 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)

Ho cercato su Google l'errore e qualcuno mi ha suggerito di provare a utilizzare 1,5 Gbps invece di 3,0 Gbps. Usando lsiutilho cambiato la velocità del collegamento:

# 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

Questo non ha aiutato.

Ho provato a cambiare "Ritardo I / O dispositivo mancante" su 32. Neanche questo mi ha aiutato.

Ho provato a cambiare / sys / class / scsi_device / * / device / timeout da 30 a 100 e poi a 3. Tutto fallito.

$ 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

Il problema si verifica estremamente raramente se ci sono solo operazioni di lettura o scrittura: posso leggere o scrivere 1 TB senza problemi. Il problema sembra sorgere quando ci sono entrambe le operazioni di lettura e scrittura. Su un raid6 che si verifica se si scrive un file più piccolo della dimensione della striscia e non si dispone già della cache nella cache (nel qual caso la striscia deve essere letta per calcolare il nuovo checksum).

Il sistema non è una macchina virtuale.

Qual è la causa del problema? Come posso eliminare i 30 secondi di congelamento?

Modifica: test aggiuntivi

Ho trovato un bel set di test che sembra provocare il problema. Contiene file più piccoli della dimensione della striscia, forzando così la ricompilazione della parità forzando così molte letture combinate con le scritture.

Devo ammettere che non pensavo che il programmatore di coda avrebbe avuto alcun effetto su questo problema. Mi sbagliavo. È chiaro che deadlineè molto peggio degli altri. Nessuno di loro risolve il problema, però.

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

La modifica dello scheduler per noopcausare il problema dopo 100-120 secondi.

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

La modifica dello scheduler in deadlinemodo da far insorgere il problema dopo 20-30 secondi.

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

La modifica dello scheduler in cfqmodo da far insorgere il problema dopo 120-300 secondi.

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

Edit2

Poiché lo scheduler ha un effetto, sto pensando se il problema è causato da troppe richieste in un arco di tempo. Posso in qualche modo limitare il numero di richieste inviate al secondo?

Risposte:


5

Le note di rilascio del driver MPTSCSIH di LSI sembrano interessanti.

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.

Quale versione è il tuo driver? ( modinfo mptscsih)

Utilizzare questo collegamento per informazioni sul firmware Seagate sull'unità Barracuda da 3 TB. Devi inserire il numero seriale per ottenere i dettagli.

Aggiornamento: prova smartctl -i /dev/sdaaHo appena provato su SCSI e SATA e ho ottenuto il numero seriale in quel modo.


Quali parti delle note sulla versione del driver sono rilevanti per questo problema? Come posso trovare il numero seriale usando GNU / Linux sui dischi in produzione? E cosa ti aspetteresti di trovare da Seagate su questo? La versione di mptscsih è aggiornata nella domanda.
Ole Tange,

@OleTange Ho inserito la sezione "interessante". Anche se il tuo driver sembra essere più recente di quello, potrebbe essere un vecchio problema riapparire qui. Per quanto riguarda il numero di serie ... Seagate offre solo strumenti di Windows. Su Linux proverei un inqcomando - forse da alcuni driver EMC (dovrebbe essere scaricabile gratuitamente) - ma questa è solo una supposizione.
Nils,

2
@OleTange RE: "Come posso trovare il numero seriale usando GNU / Linux sui dischi in produzione?" eseguire dmidecodequesto estrarrà la descrizione dei componenti hardware dalla memoria. Spesso su articoli di livello consumer non avrai voci per i dischi rigidi SN, ma, con le attrezzature aziendali, in genere questo verrà aggiunto o le unità avranno più intelligenza. Esistono --typecodici speciali per fare riferimento ai dispositivi MFR qualora li avessero resi disponibili. Le aziende che forniscono array di solito forniscono queste informazioni in modo da poter individuare le unità richiamate.
2bc

@LinuxlyChallenged dmidecodenon vede unità - né interne né esterne. Non sono riuscito a trovare inqDebian.
Ole Tange,

@ OleTange use smartctlvedi la mia risposta aggiornata ...
Nils

2

Hai provato a cambiare i tuoi programmatori I / O?

   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 

L'impostazione predefinita è CFQ in genere per la maggior parte dei sistemi "attualmente".

Per confrontare gli scheduler I / O, procedere come segue:

Leggi i test:

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

Questo assicurerà che stai testando il disco e non le pagine cache della RAM, questo svuoterà la cache.

Scrivi test:

Copia i tuoi file più volte contemporaneamente. Una volta completate le scritture, rilasciare async

Se stai testando entrambi, potresti volerlo drop_cacheschiamare e al synctermine della copia. Oltre allo scheduler ci sono parametri sintonizzabili per ogni scheduler. Ma un rapido test sarebbe quello di cambiare lo scheduler e riprovare. Se si dispone di un buon controller noop, scaricherà "Pianificazione I / O" su di esso e non eseguirà alcuna pianificazione dei dati a livello di sistema operativo.

Ad ogni modo, vale la pena provarlo e basta solo echoper ripristinarlo.


Vedi la domanda aggiornata per i risultati.
Ole Tange,

2

Ho risolto il problema acquistando una scheda SAS2008. Si lamenta ancora un po 'nel registro, ma non blocca mai l'I / O del disco. Inoltre ho testato che supporta unità SATA da 4 TB, mentre LSI-SAS1068E supporta solo 2 TB.

Poiché restituirò LSI-SAS1068E al venditore, non potrò provare altri suggerimenti. Pertanto chiudo la domanda qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.