I have observed the same effect on 1500GB JFS formatted LUNs.
These LUNs were 99% full. Most of the data was then deleted, leaving approx 5G. 'dd' was then used to create a large zero file. The "Used User Size" decreased as expected (down to 20GB) however the "Reserved User Size" initially decreased quickly, but then levelled out at about 45% (700GB). Using showvvmap and showldmap shows that this "extra" 700GB is still held by the VV and is not available for use by other VVs.
My feeling is that this is due to the mapping between the tpvv and the ld. According to the documentation the tpvv will reclaim "blocks" as small as 16kb filled with zero but suggests that you need 128kb of contigous zeros to release the space
back to the tpvv. The problem comes because the VV is mapped to the LD in "regions" that are 64MB, 128MB or 256MB. (Most of mine are 128MB.) Therefore a single 16kb (or even 1 bit non-zero) of non-zero data can hold "reserved" a 128MB of LD space.
As a further test I then unmounted the filesystem and ran 'dd' directly to the raw LUN device. The "reserved user space" was quickly released, presumably as the filesystem overhead at the start of the LUN was zeroed out. Was was more interesting is that the regions shown in showvvmap were
not released in strict order.
Towards the end of the RAW LUN wipe showvvmap displayed:
Code:
Space Start(MB) Length(MB) LdId LdName LdOff(MB)
usr 0 256 128 122 tp-2-sd-0.76 112640
1 151680 128 127 tp-2-sd-0.78 48128
2 151808 128 127 tp-2-sd-0.78 48256
3 646400 128 130 tp-2-sd-0.79 5120
4 647296 128 130 tp-2-sd-0.79 5504
5 647680 128 130 tp-2-sd-0.79 5632
6 1501568 128 137 tp-2-sd-0.88 12800
7 1512320 128 137 tp-2-sd-0.88 22528
8 1512448 128 136 tp-2-sd-0.85 28416
I suspect that there is another (invisible) mapping layer for tpvv's whereby 128kb blocks of the tpvv are mapped onto the LDs. This works well when the tpvv is growing by not allocating large amounts of LD for stray writes scattered over the disk, but seems to severly impede reclamation
at the LD level. A (128MB) LD region is only released when there are no tpvv blocks allocated from it. There does not appear to be a "compact" function at the tpvv level.