The typo is relatively straightforward given the diff below.
It leads to larger-than-actual average dnode size estimations,
which further causes overly conservative os_ffree (number of
available objects) values. For example, without this patch,
os_ffree values for "empty" 1 GB ZFS-based MDT/OSTs look like:
[root@linux tests]# df -h
Filesystem Size Used Avail Use% Mounted on
[...]
lustre-mdt1/mdt1 929M 3.0M 924M 1% /mnt/mds1
lustre-ost1/ost1 929M 1.3M 926M 1% /mnt/ost1
lustre-ost2/ost2 929M 1.3M 926M 1% /mnt/ost2
linux@tcp:/lustre 1.9G 2.5M 1.9G 1% /mnt/lustre
[root@linux tests]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
[...]
lustre-mdt1/mdt1 7583 178 7405 3% /mnt/mds1
lustre-ost1/ost1 7631 212 7419 3% /mnt/ost1
lustre-ost2/ost2 7631 212 7419 3% /mnt/ost2
linux@tcp:/lustre 7583 178 7405 3% /mnt/lustre
With this patch, they look like:
[root@linux tests]# df -h
Filesystem Size Used Avail Use% Mounted on
[...]
lustre-mdt1/mdt1 929M 2.9M 924M 1% /mnt/mds1
lustre-ost1/ost1 929M 1.3M 926M 1% /mnt/ost1
lustre-ost2/ost2 929M 1.3M 926M 1% /mnt/ost2
linux@tcp:/lustre 1.9G 2.5M 1.9G 1% /mnt/lustre
[root@linux tests]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
[...]
lustre-mdt1/mdt1 161966 178 161788 1% /mnt/mds1
lustre-ost1/ost1 223825 212 223613 1% /mnt/ost1
lustre-ost2/ost2 223825 212 223613 1% /mnt/ost2
linux@tcp:/lustre 161966 178 161788 1% /mnt/lustre
Only after fixing this typo could we evaluate how the intented
estimation algorithm works.
Test-Parameters: mdsfilesystemtype=zfs ostfilesystemtype=zfs mdtfilesystemtype=zfs
Signed-off-by: Li Wei <wei.g.li@intel.com>
Signed-off-by: Fan Yong <fan.yong@intel.com>
Change-Id: Ic3cbe569261d2c0e4338001c47f3dd64c621621a
Reviewed-on: http://review.whamcloud.com/5806
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Johann Lombardi <johann.lombardi@intel.com>
CLASSERT(OSD_DNODE_EST_BLKSHIFT > 0);
est_refdblocks = (refdbytes >> SPA_MAXBLOCKSHIFT) +
- (OSD_DNODE_EST_COUNT << OSD_DNODE_EST_BLKSHIFT);
+ (OSD_DNODE_EST_COUNT >> OSD_DNODE_EST_BLKSHIFT);
est_usedobjs = usedobjs + OSD_DNODE_EST_COUNT;
/* Average space/dnode more than maximum dnode size, use max dnode