Por sugestão de outra pessoa, tentei trocar as duas placas PCI pela placa-mãe. Isso (parece um pouco irritante) funcionou - alguém pode explicar por quê?
Acabei de colocar um segundo cartão SiI 3114 SATARaid no meu servidor doméstico para poder adicionar outro par de unidades SATA e aumentar meu espaço de armazenamento. Irritantemente, parece não funcionar:
[ 32.816030] ata5: lost interrupt (Status 0x0)
[ 32.816072] ata5.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
[ 32.816091] ata5.00: cmd c8/00:08:00:00:00/00:00:00:00:00/e0 tag 0 dma 4096
in
[ 32.816094] res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4
(timeout)
[ 32.816101] ata5.00: status: { DRDY }
[ 32.816117] ata5: hard resetting link
[ 33.136082] ata5: SATA link down (SStatus 0 SControl 0)
[ 36.060940] irq 18: nobody cared (try booting with the "irqpoll" option)
[ 36.060949] Pid: 0, comm: swapper Not tainted 2.6.31-20-generic #58-Ubuntu
[ 36.060954] Call Trace:
[ 36.060977] [] ? printk+0x18/0x1c
[ 36.060997] [] __report_bad_irq+0x27/0x90
[ 36.061005] [] note_interrupt+0x150/0x190
[ 36.061011] [] handle_fasteoi_irq+0xac/0xd0
[ 36.061023] [] handle_irq+0x18/0x30
[ 36.061029] [] do_IRQ+0x47/0xc0
[ 36.061042] [] ? irq_exit+0x50/0x70
[ 36.061058] [] ? smp_apic_timer_interrupt+0x57/0x90
[ 36.061065] [] common_interrupt+0x30/0x40
[ 36.061075] [] ? native_safe_halt+0x5/0x10
[ 36.061082] [] default_idle+0x46/0xd0
[ 36.061088] [] cpu_idle+0x8c/0xd0
[ 36.061103] [] rest_init+0x55/0x60
[ 36.061111] [] start_kernel+0x2e6/0x2ec
[ 36.061117] [] ? unknown_bootoption+0x0/0x19e
[ 36.061133] [] i386_start_kernel+0x7c/0x83
[ 36.061137] handlers:
[ 36.061139] [] (sil_interrupt+0x0/0xb0)
[ 36.061151] Disabling IRQ #18
[ 38.136014] ata5: hard resetting link
[ 38.456022] ata5: SATA link down (SStatus 0 SControl 0)
[ 43.456013] ata5: hard resetting link
[ 43.776022] ata5: SATA link down (SStatus 0 SControl 0)
[ 43.776035] ata5.00: disabled
[ 43.776055] ata5.00: device reported invalid CHS sector 0
[ 43.776074] sd 4:0:0:0: [sde] Result: hostbyte=DID_OK
driverbyte=DRIVER_SENSE
[ 43.776082] sd 4:0:0:0: [sde] Sense Key : Aborted Command [current]
[descriptor]
[ 43.776092] Descriptor sense data with sense descriptors (in hex):
[ 43.776097] 72 0b 00 00 00 00 00 0c 00 0a 80 00 00 00 00 00
[ 43.776112] 00 00 00 00
[ 43.776118] sd 4:0:0:0: [sde] Add. Sense: No additional sense information
[ 43.776127] end_request: I/O error, dev sde, sector 0
[ 43.776136] Buffer I/O error on device sde, logical block 0
[ 43.776170] ata5: EH complete
[ 43.776187] ata5.00: detaching (SCSI 4:0:0:0)
root@core:~# cat /proc/interrupts
CPU0
0: 47 IO-APIC-edge timer
1: 8 IO-APIC-edge i8042
6: 3 IO-APIC-edge floppy
7: 0 IO-APIC-edge parport0
8: 0 IO-APIC-edge rtc0
9: 0 IO-APIC-fasteoi acpi
14: 53069 IO-APIC-edge pata_sis
15: 53004 IO-APIC-edge pata_sis
17: 112265 IO-APIC-fasteoi sata_sil
18: 200002 IO-APIC-fasteoi sata_sil, SiS SI7012
19: 111140 IO-APIC-fasteoi eth0
20: 0 IO-APIC-fasteoi ohci_hcd:usb2
21: 0 IO-APIC-fasteoi ohci_hcd:usb3
23: 0 IO-APIC-fasteoi ehci_hcd:usb1
NMI: 0 Non-maskable interrupts
LOC: 6650492 Local timer interrupts
SPU: 0 Spurious interrupts
CNT: 0 Performance counter interrupts
PND: 0 Performance pending work
RES: 0 Rescheduling interrupts
CAL: 0 Function call interrupts
TLB: 0 TLB shootdowns
TRM: 0 Thermal event interrupts
THR: 0 Threshold APIC interrupts
MCE: 0 Machine check exceptions
MCP: 160 Machine check polls
ERR: 0
MIS: 0
root@core:~# lspci | grep Raid
00:09.0 RAID bus controller: Silicon Image, Inc. SiI 3114 [SATALink/SATARaid] Serial ATA Controller (rev 02)
00:0a.0 RAID bus controller: Silicon Image, Inc. SiI 3114 [SATALink/SATARaid] Serial ATA Controller (rev 02)
root@core:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 9.10
Release: 9.10
Codename: karmic
root@core:~# uname -a
Linux core.topper.me.uk 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 05:23:09 UTC 2010 i686 GNU/Linux
Eu tentei uma combinação de diferentes opções de kernel (irqpoll, noapic, noacpi, pci = noapic) tudo sem sucesso. Alguém tem alguma idéia brilhante sobre como eu pode fazer isso funcionar?
Trocar placas PCI por aí não é uma opção, pois há apenas dois slots nesta placa-mãe (uma ASRock K7S41GX). O BIOS não parece ter muitas opções de configuração em relação ao uso de IRQ.
O plano B é acabar completamente com este servidor e comprar um novo QNAP para essas unidades, mas eu esperava evitar fazer isso agora.
Por sugestão de outra pessoa, tentei trocar as duas placas PCI pela placa-mãe. Isso (parece um pouco irritante) funcionou - alguém pode explicar por quê?
Talvez houvesse apenas um toque de corrosão nos contatos do soquete na placa-mãe. Eu tive isso acontecer comigo muitas vezes, e uma cura comum é simplesmente desconectar / repor o dispositivo ofensivo. (Desligado, é claro) Isso é especialmente comum em equipamentos que estão expostos à umidade e poeira. Se você tiver problemas contínuos, tente usar um produto como Deoxit no Contatos. Eu usei isso quando trabalhava em conjuntos de radar de 30 anos com bons resultados.
É bastante especulação da minha parte, mas de qualquer forma: o BIOS poderia estar atribuindo as diferentes IRQs (aleatórias) de cartões se ele vir um novo cartão no slot. Como você trocou as cartas, é possível que tenha mudado os IRQs atribuídos e resolvido o conflito de IRQ desta forma.