I use ZFS in FreeNAS 8.0.4 and use iSCSI to provide a LUN to Vmware ESXi 5.0.
I post it at http://forums.freenas.org/showthread.php?10990-Memory-utilization-and-performance-problem/page4, but I believe people here may have more expertise on ZFS.
FreeNAS doesn't have iSCSI unmap. I have create / move / delete virtual machine between ZFS iSCSI. After a while, zpool list report 95% capacity used. However, Vmware shows VMFS only uses 50% capacity.
AFAIK, when creating a virtual machine, zvol allocated disk space.
However, when we moved / deleted virtual machine, zvol didn't update / didn't aware to update the free capacity.
[root@data1] ~# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
data1 2.25T 2.07T 185G 95% ONLINE /mnt
Now, I believe due to the wrong free capacity reported in zpool list, the performance is deeply affected.
How I should do to let ZFS know the real free capacity.
Thanks million.
zpool status -v
pool: data1
state: ONLINE
scrub: scrub stopped after 10h31m with 0 errors on Wed Feb 6 13:32:53 2013
config:
NAME STATE READ WRITE CKSUM
data1 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
ada0p2 ONLINE 0 0 0
ada1p2 ONLINE 0 0 0
ada2p2 ONLINE 0 0 0
ada3p2 ONLINE 0 0 0
ada4p2 ONLINE 0 0 0
spares
ada5p2 AVAIL
errors: No known data errors
zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
data1 2.25T 2.08T 179G 92% ONLINE /mnt
Best Answer
You made your zvol too large and your ZFS implementation doesn't have the ability to unmap release blocks!
The best way to prevent this from happening is to underprovision the LUNs you present to VMware. Since we know ZFS performance degrades when the disk is near full, it's best to limit the maximum size of your zvol.
e.g. if you have 200GB zpool storage, make sure the zvols you present to VMware are less than that - maybe 150GB.
ZFS is unaware of the filesystem being using on top of the zvol block device, so all that's happening on your VMFS volume is that it knows that it has 50% free space. ZFS has no way of knowing that. You will not be able to reclaim the space without reformatting/recreating the volume or expanding the zvol.
A better solution in your case would be using NFS instead of iSCSI for this purpose. If you're not monitoring VM disk utilization and growth carefully enough to prevent this from happening with iSCSI, NFS may make more sense. I use NFS with my ZFS+VMware setups.
Also see: When using thin-provisioning with ZFS, how do you make sure you don't run out of physical disk space?
and
Incorrect Used Space reported by zVol.