Re: v4.11-rc blk-mq lockup?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/28/2017 09:30 AM, Jens Axboe wrote:
> On 03/28/2017 10:25 AM, Bart Van Assche wrote:
>> I do not know whether it would be possible to modify the test such that only
>> the dm driver is involved but no SCSI code.
> 
> How about the other way around? Just SCSI, but no dm?

Hello Jens,

Sorry but it could take a long time to figure out how to reproduce this
issue if I start modifying the test. BTW, the patch I just posted 
("blk-mq: Export queue state through /sys/kernel/debug/block/*/state") 
allows me to trigger a blk-mq queue run from user space. If the lockup
occurs and I use that facility to trigger a queue run the test proceeds.
The command I used to trigger a queue run is as follows:

for a in /sys/kernel/debug/block/*/state; do echo 1 >$a; wait

> Thanks for running it again, but it's the wrong state file. I should have
> been more clear. The one I'm interested in is in the mq/<num>/ directories,
> like the 'tags' etc files.
> 
> Ala:
>  
>  	        for f in "$d"/{dispatch,state,tags*,cpu*/rq_list}; do

Ah, thanks, that makes it clear :-)
 
> Also, can you include the involved dm devices as well for this state
> dump?

I would like to, but the 02-sq-on-mq test configures the dm device 
nodes in single queue mode and there is only information available 
under /sys/kernel/debug/block/ for blk-mq devices ...

Anyway, the updated script:

#!/bin/bash

show_state() {
    local a dev=$1

    for a in device/state queue/scheduler; do
	[ -e "$dev/$a" ] && grep -aH '' "$dev/$a"
    done
}

cd /sys/class/block || exit $?
for dev in *; do
    if [ -e "$dev/mq" ]; then
	echo "$dev"
	pending=0
	for f in "$dev"/mq/*/{pending,*/rq_list}; do
	    [ -e "$f" ] || continue
	    if { read -r line1 && read -r line2; } <"$f"; then
		echo "$f"
		echo "$line1 $line2" >/dev/null
		head -n 9 "$f"
		((pending++))
	    fi
	done
	(
	    busy=0
	    cd /sys/kernel/debug/block >&/dev/null &&
	    for d in "$dev"/mq/*; do
		[ ! -d "$d" ] && continue
		grep -q '^busy=0$' "$d/tags" && continue
		((busy++))
	        for f in "$d"/{dispatch,state,tags*,cpu*/rq_list}; do
		    [ -e "$f" ] && grep -aH '' "$f"
		done
	    done
	    exit $busy
	)
	pending=$((pending+$?))
	if [ "$pending" -gt 0 ]; then
	    grep -aH '' /sys/kernel/debug/block/"$dev"/state
	    show_state "$dev"
	fi
    fi
done


And the output for the test run of today:

sda
sdb
sdd
sdd/mq/0/dispatch:ffff88036437d140 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=53, .internal_tag=-1}
sdd/mq/0/state:0x4
sdd/mq/0/tags:nr_tags=62
sdd/mq/0/tags:nr_reserved_tags=0
sdd/mq/0/tags:active_queues=0
sdd/mq/0/tags:
sdd/mq/0/tags:bitmap_tags:
sdd/mq/0/tags:depth=62
sdd/mq/0/tags:busy=31
sdd/mq/0/tags:bits_per_word=8
sdd/mq/0/tags:map_nr=8
sdd/mq/0/tags:alloc_hint={48, 48, 38, 44, 54, 6, 52, 23, 30, 6, 51, 26, 61, 45, 9, 56, 55, 13, 44, 45, 12, 12, 23, 42, 44, 24, 41, 0, 54, 4, 4, 45}
sdd/mq/0/tags:wake_batch=7
sdd/mq/0/tags:wake_index=0
sdd/mq/0/tags:ws={
sdd/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sdd/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sdd/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sdd/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sdd/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sdd/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sdd/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sdd/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sdd/mq/0/tags:}
sdd/mq/0/tags:round_robin=0
sdd/mq/0/tags_bitmap:00000000: ffff 7f00 0000 e01f
sdd/mq/0/cpu7/rq_list:ffff88036437e880 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=54, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f7ef0000 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=55, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f7ef1740 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=56, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f7ef2e80 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=57, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f7ef45c0 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=58, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f7ef5d00 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=59, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f7ef7440 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=60, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff880386760000 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=0, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff880386761740 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=1, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff880386762e80 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=2, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803867645c0 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=3, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff880386765d00 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=4, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff880386767440 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=5, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff880386768b80 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=6, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff88038676a2c0 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=7, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff88038676ba00 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=8, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff88038676d140 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=9, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff88038676e880 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=10, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f8650000 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=11, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f8651740 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=12, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f8652e80 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=13, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f86545c0 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=14, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f8655d00 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=15, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f8657440 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=16, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f8658b80 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=17, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f865a2c0 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=18, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f865ba00 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=19, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f865d140 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=20, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803f865e880 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=21, .internal_tag=-1}
sdd/mq/0/cpu7/rq_list:ffff8803fb630000 {.cmd_flags=0xca01, .rq_flags=0x2040, .tag=22, .internal_tag=-1}
/sys/kernel/debug/block/sdd/state:SAME_COMP STACKABLE IO_STAT INIT_DONE POLL
sdd/device/state:running
sdd/queue/scheduler:[none] 
sde
sde/mq/0/state:0x0
sde/mq/0/tags:nr_tags=62
sde/mq/0/tags:nr_reserved_tags=0
sde/mq/0/tags:active_queues=0
sde/mq/0/tags:
sde/mq/0/tags:bitmap_tags:
sde/mq/0/tags:depth=62
sde/mq/0/tags:busy=31
sde/mq/0/tags:bits_per_word=8
sde/mq/0/tags:map_nr=8
sde/mq/0/tags:alloc_hint={48, 48, 38, 44, 54, 6, 52, 23, 30, 6, 51, 26, 61, 45, 9, 56, 55, 13, 44, 45, 12, 12, 23, 42, 44, 24, 41, 0, 54, 4, 4, 45}
sde/mq/0/tags:wake_batch=7
sde/mq/0/tags:wake_index=0
sde/mq/0/tags:ws={
sde/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sde/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sde/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sde/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sde/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sde/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sde/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sde/mq/0/tags:	{.wait_cnt=7, .wait=inactive},
sde/mq/0/tags:}
sde/mq/0/tags:round_robin=0
sde/mq/0/tags_bitmap:00000000: ffff 7f00 0000 e01f
/sys/kernel/debug/block/sde/state:SAME_COMP STACKABLE IO_STAT INIT_DONE POLL
sde/device/state:running
sde/queue/scheduler:[none] 
sdf
sdg
sdh
sdi
sdj
sdk
sr0




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux