fstrim / discard to indicate released blocks to underlying zfs sparse zdev?

effgee

Renowned Member
Jul 29, 2013
47
20
73
I'm currently trying to determine if using the VIRTIO-SCSI adapter which can pass discard / fstrim commands to the underlying zdev storage is ensuring that unused blocks are not referenced during backups. I have successfully used in guest disk zeroing to reduce the size of the sparse file, but the backup still walks the entire file to compress it.
Since ZFS zdev sparse images are truly sparse, the fstrim should release the blocks, so that during backup, empty space on disk is not even scanned as it is sparsely referenced.
So far my tests have not shown this to be happening.
Both tests on Ubuntu Server 14
Backup Test 1
Filesystem Zeroed, no fstrim ran
Code:
INFO: transferred 64424 MB in 979 seconds (65 MB/s)
INFO: stopping kvm after backup task
INFO: archive file size: 4.44GB
INFO: Finished Backup of VM 102 (00:16:32)
INFO: Backup job finished successfully
TASK OK

Backup Test 2
Filesystem Zeroed, fstrim ran, 50 gb released
Code:
INFO: transferred 64424 MB in 949 seconds (67 MB/s)
INFO: stopping kvm after backup task
INFO: archive file size: 4.44GB
INFO: Finished Backup of VM 102 (00:16:01)
INFO: Backup job finished successfully
TASK OK
Maybe I am missing something, or wanting something impossible.

--Can someone chime in?I cannot get this bloody post to format in a readable way.. sorry.--
 
Last edited by a moderator:
Maybe I am missing something, or wanting something impossible.

When you zero out pages in a thin-provisioned zvol, they go away. Running your zero test accomplished basically the same thing as explicitly issuing discards to the underlying "disk".

Basically, that's how trim is implemented with zfs backing store -- the VM zeroes out the block and ZFS makes it go poof.
 
Before deleting a 4 GB file:
Code:
NAME                   PROPERTY              VALUE                  SOURCE
vMotion/vm-107-disk-2  type                  volume                 -
vMotion/vm-107-disk-2  creation              Thu Apr  9 17:24 2015  -
vMotion/vm-107-disk-2  used                  4.04G                  -
vMotion/vm-107-disk-2  available             1.15T                  -
vMotion/vm-107-disk-2  referenced            4.04G                  -
vMotion/vm-107-disk-2  compressratio         1.00x                  -
vMotion/vm-107-disk-2  reservation           none                   default
vMotion/vm-107-disk-2  volsize               50G                    local
vMotion/vm-107-disk-2  volblocksize          8K                     -
vMotion/vm-107-disk-2  checksum              on                     default
vMotion/vm-107-disk-2  compression           lz4                    inherited from vMotion
vMotion/vm-107-disk-2  readonly              off                    default
vMotion/vm-107-disk-2  copies                1                      default
vMotion/vm-107-disk-2  refreservation        none                   default
vMotion/vm-107-disk-2  primarycache          all                    default
vMotion/vm-107-disk-2  secondarycache        all                    default
vMotion/vm-107-disk-2  usedbysnapshots       0                      -
vMotion/vm-107-disk-2  usedbydataset         4.04G                  -
vMotion/vm-107-disk-2  usedbychildren        0                      -
vMotion/vm-107-disk-2  usedbyrefreservation  0                      -
vMotion/vm-107-disk-2  logbias               latency                default
vMotion/vm-107-disk-2  dedup                 off                    default
vMotion/vm-107-disk-2  mlslabel              none                   default
vMotion/vm-107-disk-2  sync                  standard               inherited from vMotion
vMotion/vm-107-disk-2  refcompressratio      1.00x                  -
vMotion/vm-107-disk-2  written               4.04G                  -
vMotion/vm-107-disk-2  logicalused           4.03G                  -
vMotion/vm-107-disk-2  logicalreferenced     4.03G                  -
vMotion/vm-107-disk-2  snapshot_limit        none                   default
vMotion/vm-107-disk-2  snapshot_count        none                   default
vMotion/vm-107-disk-2  redundant_metadata    all                    default
After deleting the 4 GB file
Code:
NAME                   PROPERTY              VALUE                  SOURCE
vMotion/vm-107-disk-2  type                  volume                 -
vMotion/vm-107-disk-2  creation              Thu Apr  9 17:24 2015  -
vMotion/vm-107-disk-2  used                  4.04G                  -
vMotion/vm-107-disk-2  available             1.15T                  -
vMotion/vm-107-disk-2  referenced            4.04G                  -
vMotion/vm-107-disk-2  compressratio         1.00x                  -
vMotion/vm-107-disk-2  reservation           none                   default
vMotion/vm-107-disk-2  volsize               50G                    local
vMotion/vm-107-disk-2  volblocksize          8K                     -
vMotion/vm-107-disk-2  checksum              on                     default
vMotion/vm-107-disk-2  compression           lz4                    inherited from vMotion
vMotion/vm-107-disk-2  readonly              off                    default
vMotion/vm-107-disk-2  copies                1                      default
vMotion/vm-107-disk-2  refreservation        none                   default
vMotion/vm-107-disk-2  primarycache          all                    default
vMotion/vm-107-disk-2  secondarycache        all                    default
vMotion/vm-107-disk-2  usedbysnapshots       0                      -
vMotion/vm-107-disk-2  usedbydataset         4.04G                  -
vMotion/vm-107-disk-2  usedbychildren        0                      -
vMotion/vm-107-disk-2  usedbyrefreservation  0                      -
vMotion/vm-107-disk-2  logbias               latency                default
vMotion/vm-107-disk-2  dedup                 off                    default
vMotion/vm-107-disk-2  mlslabel              none                   default
vMotion/vm-107-disk-2  sync                  standard               inherited from vMotion
vMotion/vm-107-disk-2  refcompressratio      1.00x                  -
vMotion/vm-107-disk-2  written               4.04G                  -
vMotion/vm-107-disk-2  logicalused           4.03G                  -
vMotion/vm-107-disk-2  logicalreferenced     4.03G                  -
vMotion/vm-107-disk-2  snapshot_limit        none                   default
vMotion/vm-107-disk-2  snapshot_count        none                   default
vMotion/vm-107-disk-2  redundant_metadata    all                    default
After running fstrim inside the VM
Code:
NAME                   PROPERTY              VALUE                  SOURCE
vMotion/vm-107-disk-2  type                  volume                 -
vMotion/vm-107-disk-2  creation              Thu Apr  9 17:24 2015  -
vMotion/vm-107-disk-2  used                  674K                   -
vMotion/vm-107-disk-2  available             1.15T                  -
vMotion/vm-107-disk-2  referenced            674K                   -
vMotion/vm-107-disk-2  compressratio         12.00x                 -
vMotion/vm-107-disk-2  reservation           none                   default
vMotion/vm-107-disk-2  volsize               50G                    local
vMotion/vm-107-disk-2  volblocksize          8K                     -
vMotion/vm-107-disk-2  checksum              on                     default
vMotion/vm-107-disk-2  compression           lz4                    inherited from vMotion
vMotion/vm-107-disk-2  readonly              off                    default
vMotion/vm-107-disk-2  copies                1                      default
vMotion/vm-107-disk-2  refreservation        none                   default
vMotion/vm-107-disk-2  primarycache          all                    default
vMotion/vm-107-disk-2  secondarycache        all                    default
vMotion/vm-107-disk-2  usedbysnapshots       0                      -
vMotion/vm-107-disk-2  usedbydataset         674K                   -
vMotion/vm-107-disk-2  usedbychildren        0                      -
vMotion/vm-107-disk-2  usedbyrefreservation  0                      -
vMotion/vm-107-disk-2  logbias               latency                default
vMotion/vm-107-disk-2  dedup                 off                    default
vMotion/vm-107-disk-2  mlslabel              none                   default
vMotion/vm-107-disk-2  sync                  standard               inherited from vMotion
vMotion/vm-107-disk-2  refcompressratio      12.00x                 -
vMotion/vm-107-disk-2  written               674K                   -
vMotion/vm-107-disk-2  logicalused           7.03M                  -
vMotion/vm-107-disk-2  logicalreferenced     7.03M                  -
vMotion/vm-107-disk-2  snapshot_limit        none                   default
vMotion/vm-107-disk-2  snapshot_count        none                   default
vMotion/vm-107-disk-2  redundant_metadata    all                    default