私のソフトウェアRAID6のI / Oはしばしば約30秒間停止し、すべてが正常に戻ります。
凍結が完了すると、システムログに次の内容が記録されます。
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)
エラーを検索してみると、誰かが3.0Gbpsの代わりに1.5Gbpsを試してみることを提案しました。以下を使用して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
それは役に立ちません。
「Device Lost I/O Delay」を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
読み取りまたは書き込み操作のみがある場合、この問題はほとんど発生しません。 1TBを問題なく読み書きできます。次のような場合に問題が発生しているようです。両方読み書き操作。 raid6では、作成したファイルがストライプサイズより小さく、ストライプがキャッシュされていない場合に発生します(この場合、新しいチェックサムを計算するにはストライプを読み取る必要があります)。
このシステムは仮想マシンではありません。
この問題の原因は何ですか? 30秒のフリーズを解決するには?
編集:追加テスト
この問題を引き起こすと思われる良いテストセットが見つかりました。これにはストライプサイズより小さいファイルが含まれているため、パリティを再計算する必要があるため、過度の読み取りと書き込みが結合されます。
認めなければなりません。キュースケジューラがこの問題に影響を与えないと思います。私が間違っています。明らかにdeadline
他の人よりはるかに悪いです。しかし、それらのどれも問題を解決しません。
# cat /sys/block/sdaa/queue/scheduler
noop deadline [cfq]
スケジューラを変更すると、noop
100〜120秒後に問題が発生します。
parallel echo noop \> {} ::: /sys/block/sd*/queue/scheduler
スケジューラを変更すると、deadline
20〜30秒後に問題が発生します。
parallel echo deadline \> {} ::: /sys/block/sd*/queue/scheduler
スケジューラを変更すると、cfq
120〜300秒後に問題が発生します。
parallel echo cfq \> {} ::: /sys/block/sd*/queue/scheduler
編集2
スケジューラの影響があるので、1時間以内にあまりにも多くの要求が原因で問題が発生しているかどうか疑問に思います。 1秒あたりに送信される要求の数を何とか制限できますか?
答え1
これLSI用MPTSCSIHドライバリリースノート楽しそうですね。
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
)
このリンクを使用してくださいシーゲートBarracuda 3TBハードドライブのファームウェア情報。詳細を確認するには、シリアル番号を入力する必要があります。
更新:一度試してください。smartctl -i /dev/sdaa
SCSIとSATAでテストした結果、シリアル番号がこのようになりました。
答え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スケジューリング」はそのコントローラにオフロードされ、OSレベルのデータスケジューリングは実行されません。
echo
とにかく試してみる価値があり、以前の場所に戻るのに時間がかかります。
答え3
私はSAS2008カードを購入してこの問題を解決しました。それでもログには少し不満がありますが、ディスクI / Oをブロックしません。さらに、LSI-SAS1068Eは2TBのみをサポートし、4TB SATAドライブをサポートするかどうかをテストしました。
LSI-SAS1068Eを販売者に返却する予定であるため、他の提案を試すことはできません。では、今回の質問はここで終わります。