Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Mar 2012 10:19:41 -0600
From:      Dan Rue <drue@therub.org>
To:        freebsd-fs@freebsd.org
Subject:   ZFS and mdconfig -t vnode - Unexpected behavior
Message-ID:  <20120308161940.GA71851@therub.org>

next in thread | raw e-mail | index | archive | help
I have discovered an unexpected behavior when using ZFS against a vnode.
When running mdconfig -d against a vnode, there is a long delay before
the blocks are fully written to the backing store file. Consider the
following test script: 

#!/bin/sh
rm foo
dd if=/dev/zero of=foo bs=4096 count=0 seek=1955584
du -k foo
md=`mdconfig -a -t vnode -f foo`
dd if=/dev/random of=/dev/${md} bs=4096 count=100
mdconfig -d -u $md
while [ 1 ]; do
    fsync foo
    du -k foo
    blocks=`du -k foo | awk '{print $1; }'`
    if [ $blocks -gt 100 ]; then
        exit
    fi
    sleep 1
done


A good run looks like this (UFS): 
# time sh t.sh
0+0 records in
0+0 records out
0 bytes transferred in 0.000017 secs (0 bytes/sec)
48      foo
100+0 records in
100+0 records out
409600 bytes transferred in 0.179925 secs (2276505 bytes/sec)
464     foo

real    0m0.203s
user    0m0.001s
sys     0m0.018s


A bad run looks like this (ZFS):
# time sh t.sh
0+0 records in
0+0 records out
0 bytes transferred in 0.000015 secs (0 bytes/sec)
1       foo
100+0 records in
100+0 records out
409600 bytes transferred in 0.089111 secs (4596522 bytes/sec)
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
1       foo
515     foo

real    0m27.370s
user    0m0.009s


Under ZFS, it can take as long as 30 seconds before the block size as
reported by du -k has been updated. The fsync appears to be a noop.

Under UFS, du -k shows the correct block size every time, immediately
after mdconfig -d. This is the expected behavior.

This has been tested against ZFS on FreeBSD 8.1, 8.2, and 9 stable, in
several different environments.

Are there any ZFS tunables that could be related to this? What could be
the cause of this behavior? 

Thanks, 
drue




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120308161940.GA71851>