Re: XFS hangs and freezes with LSI 9265-8i controller on high i/o

Matthew Whittaker-Williams
2012-06-13T08:54:10Z

[-- Attachment #1.1: Type: text/plain, Size: 13695 bytes --]

On 6/13/12 3:19 AM, Dave Chinner wrote:
>
> With the valid stack traces, I see that it isn't related to the log,
> though.

Ah ok, we are triggering a new issue?
>
>>>> If you need any more information I am happy to provide it.
>>> What workload are you running that triggers this?
>> About our workload, we are providing usenet with diablo.
>> We are currently triggering the issue with running several
>> diloadfromspool commands.
>> This will scan the entire spool and extracts article location size
>> and message-id and placement information.
> .....
>> But we have also been able to produce the same trigger with running
>> multiple bonnie++ commands.
> .....
>> It gets triggered when filesystem gets generally alot of reads.
> And that is what makes it different to the other hangs we've been
> seeing.
>
>> Filesystem info:
> Looks like a standard 41TB filesystem layout.

Correct
>
>> RAID Level : Primary-6, Secondary-0, RAID Level Qualifier-3
>> Size : 40.014 TB
>> State : Optimal
>> Strip Size : 64 KB
>> Number Of Drives : 24
> .....
>> Virtual Drive: 1 (Target Id: 1)
>> Name :
>> RAID Level : Primary-6, Secondary-0, RAID Level Qualifier-3
>> Size : 40.014 TB
>> State : Optimal
>> Strip Size : 1.0 MB
>> Number Of Drives : 24
> OOC, any reason for the different stripe sizes on the two
> RAID volumes?

This is a fluke, we are running several new systems and this is just one
of the new servers.
Which indeed has a wrong stripe set, this should be 1MB.
We actually found stripe size set of 1MB to give better performance
overall than 64/256/512
>
> It does, however, point to your problem - you have 24 disk RAID6
> volumes and you are reading and writing lots of small files on them.
> Every small random file write is going to cause a RMW cycle in the
> RAID6 volume (i.e. across all 24 disks), so it is going to be *very*
> slow when the BBWC can't hide that latency.
>
> That, in turn, is going to make reads very slow as the are going to
> get queued up behind those RMW cycles as the BBWC flushes all those
> small writes it has buffered.
>
> what does the output of a coupl eof minutes of 'iostat -d -x -m 5'
> look like when this problem is occurring?

I will get back to you on this.
>
>> imklog 4.6.4, log source = /proc/kmsg started.
>> [ 323.966564] XFS (sdb): Mounting Filesystem
>> [ 324.183373] XFS (sdb): Ending clean mount
>> Kernel logging (proc) stopped.
>> imklog 4.6.4, log source = /proc/kmsg started.
>> [ 1200.374551] INFO: task kworker/0:2:1115 blocked for more than 120 seconds.
>> [ 1200.374628] "echo 0> /proc/sys/kernel/hung_task_timeout_secs" disables this message.
>> [ 1200.374722] kworker/0:2 D ffff8805ebdd3fa8 0 1115 2 0x00000000
>> [ 1200.374860] ffff880602ae7bf0 0000000000000046 ffffffff814cecd0 ffff880603c56840
>> [ 1200.375098] 0000000000000400 ffff880602ae6010 0000000000013340 0000000000013340
>> [ 1200.375336] ffff880602ae7fd8 0000000000013340 ffff880602ae7fd8 0000000000013340
>> [ 1200.375573] Call Trace:
>> [ 1200.375641] [<ffffffff8137e2af>] schedule+0x5f/0x61
>> [ 1200.375709] [<ffffffff8137cf95>] schedule_timeout+0x31/0xde
>> [ 1200.375775] [<ffffffff8137d912>] __down_common+0x96/0xe4
>> [ 1200.375858] [<ffffffffa034338c>] ? xfs_getsb+0x32/0x60 [xfs]
>> [ 1200.375928] [<ffffffff8137d9bf>] __down+0x18/0x1a
>> [ 1200.375996] [<ffffffff81060428>] down+0x28/0x38
>> [ 1200.376071] [<ffffffffa02f4786>] xfs_buf_lock+0x6f/0xc0 [xfs]
>> [ 1200.376155] [<ffffffffa034338c>] xfs_getsb+0x32/0x60 [xfs]
>> [ 1200.376235] [<ffffffffa035065c>] xfs_trans_getsb+0xb3/0x107 [xfs]
>> [ 1200.376319] [<ffffffffa0343da5>] xfs_mod_sb+0x41/0x112 [xfs]
>> [ 1200.376401] [<ffffffffa0303bac>] ? xfs_flush_inodes+0x2e/0x2e [xfs]
>> [ 1200.376482] [<ffffffffa02f9434>] xfs_fs_log_dummy+0x61/0x76 [xfs]
>> [ 1200.382394] [<ffffffffa034a656>] ? xfs_log_need_covered+0x5a/0xb4 [xfs]
>> [ 1200.382534] [<ffffffffa0303bea>] xfs_sync_worker+0x3e/0x64 [xfs]
>> [ 1200.382607] [<ffffffff810550d1>] process_one_work+0x1da/0x2e9
>> [ 1200.382741] [<ffffffff8105531e>] worker_thread+0x13e/0x264
> That is blocked trying to read the superblock, which means it is
> probably locked for writeback. i.e. it's sitting in an IO queue
> somewhere. The xfs_sync_worker is not blocked on log space which
> means this is not the same as the problem I mentioned previously.
>
>
>> [ 1201.674223] bonnie++ D ffff8805bc4f02e8 0 6337 1 0x00000000
>> [ 1201.674370] ffff88059b5f59b8 0000000000000086 ffff880601a53bb8 0000000000000286
>> [ 1201.674607] ffff88059b5f5968 ffff88059b5f4010 0000000000013340 0000000000013340
>> [ 1201.674844] ffff88059b5f5fd8 0000000000013340 ffff88059b5f5fd8 0000000000013340
>> [ 1201.675081] Call Trace:
>> [ 1201.675142] [<ffffffff810d0ef2>] ? __probe_kernel_read+0x36/0x55
>> [ 1201.675212] [<ffffffff8137e2af>] schedule+0x5f/0x61
>> [ 1201.675280] [<ffffffff8137d00a>] schedule_timeout+0xa6/0xde
>> [ 1201.675350] [<ffffffff8104a2d7>] ? lock_timer_base+0x4d/0x4d
>> [ 1201.675420] [<ffffffff8137da54>] io_schedule_timeout+0x93/0xe4
>> [ 1201.675491] [<ffffffff810d5ecf>] ? bdi_dirty_limit+0x2c/0x8b
>> [ 1201.675561] [<ffffffff810d70a5>] balance_dirty_pages+0x511/0x5ba
>> [ 1201.675633] [<ffffffff810d7224>] balance_dirty_pages_ratelimited_nr+0xd6/0xd8
>> [ 1201.675723] [<ffffffff810cd1fc>] generic_perform_write+0x192/0x1df
>> [ 1201.675858] [<ffffffff810cd29c>] generic_file_buffered_write+0x53/0x7d
>> [ 1201.675939] [<ffffffffa02f7d57>] xfs_file_buffered_aio_write+0xf2/0x156 [xfs]
>> [ 1201.676039] [<ffffffffa02f8155>] xfs_file_aio_write+0x15e/0x1b0 [xfs]
>> [ 1201.676117] [<ffffffffa02f8002>] ? xfs_file_aio_write+0xb/0x1b0 [xfs]
>> [ 1201.676188] [<ffffffff811107e3>] do_sync_write+0xc9/0x106
>> [ 1201.676257] [<ffffffff8117c919>] ? security_file_permission+0x29/0x2e
>> [ 1201.676327] [<ffffffff8111117d>] vfs_write+0xa9/0x105
>> [ 1201.676394] [<ffffffff81111292>] sys_write+0x45/0x6c
>> [ 1201.676461] [<ffffffff813857f9>] system_call_fastpath+0x16/0x1b
> All the bonnie++ processes are waiting for write IO to complete so
> they can dirty more pages (i.e. write more in to the page cache).
>
>> [ 1201.700104] flush-8:0 D ffff8805bcaf5aa8 0 6346 2 0x00000000
>> [ 1201.700250] ffff88059d78f710 0000000000000046 ffff88059d78f700 ffff88059d78f6e0
>> [ 1201.700487] ffff8805eaef8000 ffff88059d78e010 0000000000013340 0000000000013340
>> [ 1201.700724] ffff88059d78ffd8 0000000000013340 ffff88059d78ffd8 0000000000013340
>> [ 1201.700961] Call Trace:
>> [ 1201.701022] [<ffffffff8137e2af>] schedule+0x5f/0x61
>> [ 1201.701090] [<ffffffff8137e338>] io_schedule+0x87/0xca
>> [ 1201.701159] [<ffffffff811aca59>] get_request_wait+0x116/0x1b9
>> [ 1201.701229] [<ffffffff8105bfcf>] ? wake_up_bit+0x25/0x25
>> [ 1201.701298] [<ffffffff811a70d2>] ? elv_merge+0xae/0xbe
>> [ 1201.701367] [<ffffffff811acf8f>] blk_queue_bio+0x1a8/0x30d
>> [ 1201.701436] [<ffffffff811ac2e5>] generic_make_request+0x99/0xdc
>> [ 1201.701507] [<ffffffff811ac407>] submit_bio+0xdf/0xfe
>> [ 1201.701580] [<ffffffffa02f1c3d>] xfs_submit_ioend_bio+0x2e/0x30 [xfs]
>> [ 1201.701658] [<ffffffffa02f236e>] xfs_submit_ioend+0xa1/0xea [xfs]
>> [ 1201.701736] [<ffffffffa02f353f>] xfs_vm_writepage+0x40f/0x484 [xfs]
>> [ 1201.701808] [<ffffffff811c761c>] ? rb_insert_color+0xbc/0xe5
>> [ 1201.701878] [<ffffffff810d558a>] __writepage+0x12/0x2b
>> [ 1201.701946] [<ffffffff810d6a0d>] write_cache_pages+0x25f/0x36a
>> [ 1201.702017] [<ffffffff810d5578>] ? set_page_dirty+0x62/0x62
>> [ 1201.702087] [<ffffffff810d6b58>] generic_writepages+0x40/0x57
>> [ 1201.702162] [<ffffffffa02f1a30>] xfs_vm_writepages+0x48/0x4f [xfs]
>> [ 1201.702234] [<ffffffff810d6b8b>] do_writepages+0x1c/0x25
>> [ 1201.702304] [<ffffffff81130a04>] writeback_single_inode+0x183/0x370
>> [ 1201.702376] [<ffffffff81130eaa>] writeback_sb_inodes+0x172/0x20b
>> [ 1201.702447] [<ffffffff81130fb6>] __writeback_inodes_wb+0x73/0xb4
>> [ 1201.702518] [<ffffffff8113162b>] wb_writeback+0x136/0x22c
>> [ 1201.702587] [<ffffffff810d61c1>] ? global_dirty_limits+0x2a/0x10a
>> [ 1201.702659] [<ffffffff811317b1>] wb_do_writeback+0x90/0x1de
>> [ 1201.702729] [<ffffffff811319bf>] bdi_writeback_thread+0xc0/0x1e5
>> [ 1201.702800] [<ffffffff811318ff>] ? wb_do_writeback+0x1de/0x1de
>> [ 1201.702871] [<ffffffff811318ff>] ? wb_do_writeback+0x1de/0x1de
>> [ 1201.702941] [<ffffffff8105bb50>] kthread+0x84/0x8c
>> [ 1201.703009] [<ffffffff81386ae4>] kernel_thread_helper+0x4/0x10
>> [ 1201.703079] [<ffffffff8105bacc>] ? kthread_freezable_should_stop+0x5d/0x5d
>> [ 1201.703152] [<ffffffff81386ae0>] ? gs_change+0x13/0x13
> And writeback is stalled waiting for IO to complete as well (hence
> the bonnie++ processes being blocked). IN this case, the IO request
> queue is full, which indicates it is waiting on the disk subsystem
> to complete IO requests....
>
>> [ 1559.653179] "echo 0> /proc/sys/kernel/hung_task_timeout_secs" disables this message.
>> [ 1559.653269] sync D ffff8805ec48b8e8 0 7493 7169 0x00000000
>> [ 1559.653417] ffff880208869cf8 0000000000000086 ffff8805bc02ae78 00000000000000c9
>> [ 1559.653655] ffff880208869ce8 ffff880208868010 0000000000013340 0000000000013340
>> [ 1559.653892] ffff880208869fd8 0000000000013340 ffff880208869fd8 0000000000013340
>> [ 1559.654129] Call Trace:
>> [ 1559.654197] [<ffffffff8137e2af>] schedule+0x5f/0x61
>> [ 1559.654265] [<ffffffff8137cf95>] schedule_timeout+0x31/0xde
>> [ 1559.654337] [<ffffffff8106b47b>] ? wake_affine+0x190/0x248
>> [ 1559.660092] [<ffffffff8106ec4e>] ? enqueue_entity+0x121/0x1cd
>> [ 1559.660163] [<ffffffff8137e136>] wait_for_common+0xcc/0x14a
>> [ 1559.660235] [<ffffffff8106a36c>] ? try_to_wake_up+0x1b4/0x1b4
>> [ 1559.660307] [<ffffffff810440c8>] ? local_bh_enable_ip+0x9/0xb
>> [ 1559.660382] [<ffffffff811348f7>] ? __sync_filesystem+0x7a/0x7a
>> [ 1559.660452] [<ffffffff8137e24e>] wait_for_completion+0x18/0x1a
>> [ 1559.660524] [<ffffffff81131203>] writeback_inodes_sb_nr+0x78/0x7f
>> [ 1559.660596] [<ffffffff811312b0>] writeback_inodes_sb+0x4e/0x59
>> [ 1559.660667] [<ffffffff811348ce>] __sync_filesystem+0x51/0x7a
>> [ 1559.660738] [<ffffffff81134908>] sync_one_sb+0x11/0x13
>> [ 1559.660827] [<ffffffff81112aae>] iterate_supers+0x69/0xbb
>> [ 1559.660898] [<ffffffff81134939>] sys_sync+0x2f/0x5c
>> [ 1559.661052] [<ffffffff813857f9>] system_call_fastpath+0x16/0x1b
> And that is sync waiting for the flusher thread to complete
> writeback of all the dirty inodes. The lack of other stall messages
> at this time makes it pretty clear that the problem is not
> filesystem related - the system is simply writeback IO bound.
>
> The reason, I'd suggest, is that you've chosen the wrong RAID volume
> type for your workload. Small random file read and write workloads
> like news and mail spoolers are IOPS intensive workloads and do
> not play well with RAID5/6. RAID5/6 really only work well for large
> files with sequential access patterns - you need to use RAID1/10 for
> IOPS intensive workloads because they don't suffer from the RMW
> cycle problem that RAID5/6 has for small writes. The iostat output
> will help clarify whether this is really the problem or not...

I understand that RAID 10 is better for performance for reads on small
files sets.
But with raid 10 we of course loose a lot of disk space compared to RAID 6.
Side note to this we have been running RAID 6 for years now without any
issues.

In the past we did tune our xfs filesystem with switches like sunit and
swidth.
But back then we couldn't see much peformance difference between using:

mkfs.xfs -f -L P.01 -l lazy-count=1 -d su=1m,sw=22 /dev/sda

and

mkfs.xfs -f -L P.01 -l lazy-count=1 /dev/sda

xfs_info from a system that shows no problems with an H800 Controller
from dell ( same chipset as the LSI controllers )

Product Name : PERC H800 Adapter
Serial No : 071002C
FW Package Build: 12.10.1-0001

sd60:~# xfs_info /dev/sda
meta-data=/dev/sda isize=256 agcount=58,
agsize=268435455 blks
= sectsz=512 attr=2
data = bsize=4096 blocks=15381037056, imaxpct=1
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal bsize=4096 blocks=521728, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

Where we even have bigger spools:

Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name :p01
RAID Level : Primary-6, Secondary-0, RAID Level Qualifier-3
Size : 57.298 TB
State : Optimal
Strip Size : 1.0 MB
Number Of Drives : 23
Span Depth : 1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, Write Cache OK
if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, Write Cache OK
if Bad BBU
Access Policy : Read/Write
Disk Cache Policy : Disk's Default
Encryption Type : None
Bad Blocks Exist: No

Aside from the wrong stripe set and write alignments, this still should
not cause the kernel to crash like this.
We found that running with a newer driver of LSI it takes a bit longer
for the kernel to crash but it still does.

>
> Cheers,
>
> Dave.

Thanks

[-- Attachment #1.2: Type: text/html, Size: 17793 bytes --]

[-- Attachment #2: Type: text/plain, Size: 121 bytes --]