[dm-devel] dm + blk-mq soft lockup complaint
Bart Van Assche
bart.vanassche at sandisk.com
Wed Jan 14 09:16:12 UTC 2015
On 01/13/15 17:21, Mike Snitzer wrote:
> OK, I assume you specified the mpath device for the test that failed.
Yes, of course ...
> This test works fine on my 100MB scsi_debug device with 4 paths exported
> over virtio-blk to a guest that assembles the mpath device.
>
> Could be a hang that is unique to scsi-mq.
>
> Any chance you'd be willing to provide a HOWTO for setting up your
> SRP/iscsi configuration?
>
> Are you carrying any related changes that are not upstream? (I can hunt
> down the email in this thread where you describe your kernel tree...)
>
> I'll try to reproduce but this info could be useful to others that are
> more scsi-mq inclined who might need to chase this too.
The four patches I had used in my tests at the initiator side and that
are not yet in v3.19-rc4 have been attached to this e-mail (I have not
yet had the time to post all of these patches for review).
This is how my I had configured the initiator system:
* If the version of the srptools package supplied by your distro is
lower than 1.0.2, build and install the latest version from the source
code available at git://git.openfabrics.org/~bvanassche/srptools.git/.git.
* Install the latest version of lsscsi
(http://sg.danny.cz/scsi/lsscsi.html). This version has SRP transport
support but is not yet in any distro AFAIK.
* Build and install a kernel >= v3.19-rc4 that includes the dm patches
at the start of this e-mail thread.
* Check whether the IB links are up (should display "State: Active"):
ibstat | grep State:
* Spread completion interrupts statically over CPU cores, e.g. via the
attached script (spread-mlx4-ib-interrupts).
* Check whether the SRP target system is visible from the SRP initiator
system - the command below should print at least one line:
ibsrpdm -c
* Enable blk-mq:
echo Y > /sys/module/scsi_mod/parameters/use_blk_mq
* Configure the SRP kernel module parameters as follows:
echo 'options ib_srp cmd_sg_entries=255 dev_loss_tmo=60 ch_count=6' >
/etc/modprobe.d/ib_srp.conf
* Unload and reload the SRP initiator kernel module to apply these
parameters:
rmmod ib_srp; modprobe ib_srp
* Start srpd and wait until SRP login has finished:
systemctl start srpd
while ! lsscsi -t | grep -q srp:; do sleep 1; done
* Start multipathd and check the table it has built:
systemctl start multipathd
dmsetup table /dev/dm-0
* Set the I/O scheduler to noop, disable add_random and set rq_affinity
to 2 for all SRP and dm block devices.
* Run the I/O load of your preference.
Please let me know if you need any further information.
Bart.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-e1000-Avoid-that-e1000_netpoll-triggers-a-kernel-war.patch
Type: text/x-patch
Size: 4609 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20150114/567e530a/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-e1000e-Avoid-that-e1000_netpoll-triggers-a-kernel-wa.patch
Type: text/x-patch
Size: 5267 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20150114/567e530a/attachment-0001.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-Avoid-that-sd_shutdown-triggers-a-kernel-warning.patch
Type: text/x-patch
Size: 10717 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20150114/567e530a/attachment-0002.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0004-IB-srp-Process-REQ_PREEMPT-requests-correctly.patch
Type: text/x-patch
Size: 1166 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20150114/567e530a/attachment-0003.bin>
-------------- next part --------------
#!/bin/awk -f
BEGIN {
"ls -1d /sys/devices/system/node/node* 2>&1 | wc -l" | getline nodes
if (nodes > 1) {
for (i = 0; i < nodes; i++) {
cpus_per_node = 0
while (("cd /sys/devices/system/cpu && ls -d cpu*/node" i " | sed 's/^cpu//;s,/.*,,'|sort -n" | getline j) > 0) {
#print "[" i ", " cpus_per_node "]: " j
cpu[i, cpus_per_node++] = j
}
}
} else {
cpus_per_node = 0
while (("cd /sys/devices/system/cpu && ls -d cpu[0-9]* | sed 's/^cpu//'|sort -n" | getline j) > 0) {
#print "[0, " cpus_per_node "]: " j
cpu[0, cpus_per_node++] = j
}
}
for (i = 0; i < nodes; i++)
nextcpu[i] = 0
while (("sed -n 's/.*mlx4-ib-\\([0-9]*\\)-[0-9]*@\\(.*\\)$/\\1 \\2/p' /proc/interrupts | uniq" | getline) > 0) {
port = $1
bus = substr($0, length($1) + 2)
#print "port = " port "; bus = " bus
irqcount = 0
while (("sed -n 's/^[[:blank:]]*\\([0-9]*\\):[0-9[:blank:]]*[^[:blank:]]*[[:blank:]]*\\(mlx4-ib-" port "-[0-9]*@" bus "\\)$/\\1 \\2/p' </proc/interrupts" | getline) > 0) {
irq[irqcount] = $1
irqname[irqcount] = substr($0, length($1) + 2)
irqcount++
}
for (i = 0; i < nodes; i++) {
ch_start = i * irqcount / nodes
ch_end = (i + 1) * irqcount / nodes
for (ch = ch_start; ch < ch_end; ch++) {
c = cpu[i, nextcpu[i]++ % cpus_per_node]
if (nodes > 1)
nodetxt = " (node " i ")"
else
nodetxt = ""
print "IRQ " irq[ch] " (" irqname[ch] "): CPU " c nodetxt
cmd="echo " c " >/proc/irq/" irq[ch] "/smp_affinity_list"
#print cmd
system(cmd)
}
}
}
exit 0
}
More information about the dm-devel
mailing list