mptscsih:ioc0:任务中止:成功(rv = 2002)导致30秒冻结


12

我的软件RAID6的I / O通常会冻结30秒左右,然后一切恢复正常。

冻结结束后,将其放入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)

我已经搜索了这个错误,有人建议尝试使用1.5Gbps而不是3.0Gbps。使用lsiutil我更改了链接速度:

# 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

那没有帮助。

我尝试将“设备缺少I / O延迟”更改为32。这也没有帮助。

我尝试将/ sys / class / scsi_device / * / device / timeout从30更改为100,然后更改为3。所有操作均失败。

$ 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

如果只有读或写操作,则该问题很少发生:我可以毫无问题地读取或写入1 TB。同时进行读和写操作时,似乎会出现此问题。在raid6上,如果编写的文件小于条带大小,并且尚未将条带缓存(在这种情况下必须读取条带以计算新的校验和),则会发生这种情况。

系统不是虚拟机。

是什么原因引起的?如何摆脱30秒的冻结?

编辑:其他测试

我发现一个不错的测试集似乎引起了问题。它包含的文件小于条带大小,因此强制重新计算奇偶校验,从而强制进行大量读取和写入操作。

我必须承认,我认为队列调度程序不会对此问题产生任何影响。我错了。显然,deadline这比其他情况要差得多。但是,它们都无法解决问题。

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

将调度程序更改为noop会导致在100-120秒后出现问题。

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

将调度程序更改为deadline20-30秒后会出现此问题。

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

将调度程序更改为cfq120-300秒后会出现此问题。

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

编辑2

由于调度程序具有效果,因此我正在考虑问题是否是由时间范围内的过多请求引起的。我可以以某种方式限制每秒发送的请求数量吗?

Answers:


5

LSIMPTSCSIH-Driver发行说明看起来很有趣。

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.

您的驱动程序是哪个版本?(modinfo mptscsih

使用此链接可获取有关梭子鱼3 TB驱动器的Seagate固件信息。您必须输入序列号以获取详细信息。

更新:尝试一下smartctl -i /dev/sdaa,我刚刚在SCSI和SATA上进行了测试,并以此方式获得了序列号。


您发现驱动程序发行说明的哪些部分与该问题有关?如何使用GNU / Linux在生产中的磁盘上找到序列号?您希望从Seagate那里找到什么?问题中更新了mptscsih的版本。
Ole Tange 2012年

@OleTange我插入了“有趣的”部分。尽管您的驱动程序似乎比这新,但这里可能会出现一个老问题。至于序列号... Seagate仅提供Windows工具。在linux上,我会尝试inq命令-也许是从某些EMC驱动程序(应该可以免费下载)-但这只是一个猜测。
尼尔斯2012年

2
@OleTange RE:“如何在生产中的磁盘上使用GNU / Linux查找序列号?” 运行dmidecode此命令将从内存中提取硬件组件的描述。通常在消费者级别的项目中,您不会有硬盘驱动器SN的条目,但是,对于企业级设备,通常会添加该条目,否则驱动器将具有更多的智能。如果有--typeMFR设备可用,则有特殊的代码来引用它们。提供阵列的公司通常会提供此信息,以便可以找到被召回的驱动器。
2bc 2012年

@LinuxlyChallenged dmidecode没有看到驱动器-内部或外部都没有。我找不到inqDebian。
Ole Tange'Mar

@OleTange使用smartctl请参阅我的最新答案...
Nils

2

您是否尝试过更改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 

默认情况下,对于大多数“当前”系统,默认值为CFQ。

要比较I / O调度程序,请执行以下操作:

阅读测试:

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

这将确保您正在测试磁盘而不是RAM的缓存页面,这将刷新缓存。

编写测试:

同时复制文件多次。写入完成后,发出sync

如果要同时进行测试,则可能需要在复制完成后drop_caches致电sync。除调度程序外,每个调度程序都有可调项。但是,一项快速的测试是更改调度程序,然后重试。如果您有一个好的控制器,noop它将把“ I / O调度”卸载给它,而不执行任何操作系统级别的数据调度。

无论如何,值得一试,只需将其echo重新设置即可。


有关结果,请参阅更新的问题。
Ole Tange 2012年

2

我已经通过购买SAS2008卡解决了该问题。它在日志中仍然有些抱怨,但是它从不阻塞磁盘I / O。我还测试了它支持4 TB SATA驱动器,而LSI-SAS1068E仅支持2 TB。

由于我将把LSI-SAS1068E退还给卖方,因此我将无法尝试其他建议。因此,我在这里结束问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.