CAM Target over FC and UNMAP problem
Emil Muratov
gpm at hotplug.ru
Thu Mar 5 17:10:15 UTC 2015
I've got an issue with CTL UNMAP and zvol backends.
Seems that UNMAP from the initiator passed to the underlying disks
(without trim support) causes IO blocking to the whole pool. Not sure
where to address this problem.
My setup:
- plain SATA 7.2 krpm drives attached to Adaptec aacraid SAS controller
- zfs raidz pool over plain drives, no partitioning
- zvol created with volmode=dev
- Qlogic ISP 2532 FC HBA in target mode
- FreeBSD 10.1-STABLE #1 r279593
Create a new LUN with a zvol backend
ctladm realsync off
ctladm port -o on -p 5
ctladm create -b block -o file=/dev/zvol/wd/tst1 -o unmap=on -l 0 -d
wd.tst1 -S tst1
Both target an initiator hosts connected to the FC fabric. Initiator is
Win2012 server, actually it is a VM with RDM LUN to the guest OS.
Formating, reading and writing large amounts of data (file copy/IOmeter)
- so far so good.
But as soon as I've tried to delete large files all IO to the LUN
blocks, initiator system just iowaits. gstat on target shows that
underlying disk load bumped to 100%, queue up to 10, but no iowrites
actually in progress, only decent amount of ioreads. After a minute or
so IO unblocks for a second or two than blocks again and so on again
until all UNMAPs are done, it could take up to 5 minutes to delete 10Gb
file. I can see that 'logicalused' property of a zvol shows that the
deleted space was actually released. System log is filled with CTL msgs:
kernel: (ctl2:isp1:0:0:3): ctlfestart: aborted command 0x12aaf4 discarded
kernel: (2:5:3/3): WRITE(10). CDB: 2a 00 2f d4 74 b8 00 00 08 00
kernel: (2:5:3/3): Tag: 0x12ab24, type 1
kernel: (2:5:3/3): ctl_process_done: 96 seconds
kernel: (ctl2:isp1:0:0:3): ctlfestart: aborted command 0x12afa4 discarded
kernel: (ctl2:isp1:0:0:3): ctlfestart: aborted command 0x12afd4 discarded
kernel: ctlfedone: got XPT_IMMEDIATE_NOTIFY status 0x36 tag 0xffffffff
seq 0x121104
kernel: (ctl2:isp1:0:0:3): ctlfe_done: returning task I/O tag 0xffffffff
seq 0x1210d4
I've tried to tackle some sysctls, but no success so far.
vfs.zfs.vdev.bio_flush_disable: 1
vfs.zfs.vdev.bio_delete_disable: 1
vfs.zfs.trim.enabled=0
Disabling UNMAP in CTL (-o unmap=off) resolves the issue completely but
than there is no space reclamation for zvol.
Any hints would be appreciated.
More information about the freebsd-fs
mailing list