4.8 ffs_dirpref problem
Don Lewis
truckman at FreeBSD.org
Sun Nov 16 19:32:04 PST 2003
On 16 Nov, Don Lewis wrote:
>> I'm somewhat tempted to change the calculation to:
>> min(avgbfree, max(1, (avgbfree - avgbfree/4), (dirsize/fs->fs_bsize)))
>> where the last term works out to 4500 with your tunefs parameters.
>
> I tried a variation of this on my -CURRENT box and it benchmarked
> consistently worse. I've got a "spare' 10 GB partition which first
> copied my /usr/ports/packages to, and then filled by repeatedly tarring
> my /usr/ports tree over to it. The partition was 100% full, including
> the reserve space, after four iterations.
I just looked again, and it is more than 100% full, but only slightly
into the reserve space.
> With minbfree set to max((avgbfree - avgbfree/4), 1) here are two
> iterations (the fifth line of timing data is for the 'rm -rf' command):
>
> 1310.47 real 5.48 user 141.90 sys
> 1336.78 real 5.62 user 152.27 sys
> 1368.84 real 6.02 user 151.75 sys
> 1359.70 real 5.55 user 154.01 sys
> 423.44 real 2.25 user 107.26 sys
>
> 1300.56 real 5.65 user 148.82 sys
> 1372.20 real 5.79 user 152.25 sys
> 1359.01 real 6.03 user 152.63 sys
> 1380.90 real 5.31 user 153.71 sys
> 437.22 real 2.20 user 105.61 sys
>
> With minbfree set to
> max(min(max(avgbfree - avgbfree / 4, dirsize / fs->fs_bsize),
> avgbfree), 1)
> I get the following:
>
> 1314.61 real 5.66 user 175.43 sys
> 1350.40 real 6.12 user 179.15 sys
> 1386.86 real 6.32 user 179.12 sys
> 1418.60 real 5.74 user 181.64 sys
> 508.67 real 2.67 user 119.66 sys
>
> 1361.19 real 5.97 user 176.94 sys
> 1327.63 real 5.72 user 179.60 sys
> 1376.16 real 6.33 user 179.72 sys
> 1356.47 real 6.07 user 180.24 sys
> 462.67 real 2.30 user 119.18 sys
>
> I'm using the newfs defaults, but dirsize is recalculated as the
> filesystem fills if the appropriate value is larger than what is
> calculated from the parameters set by newfs.
I filled up the file system again with the
minbree = max((avgbfree - avgbfree/4), 1)
version of the code.
Based on the output of df and dumpfs, I calculate:
avgfilesize = 18K
curdirsize = 83K
avgbfree = 864
avgifree = 14631
What suprises me is the poor distribution of free space across the
cylinder groups in the file system. I now suspect the culprit is
minifree. The current code calculates minifree as 75% of avgifree, or
about 10973. There are some cylinder groups that are less than half
full (capacity is 11761 blocks/group) in this filesystem, but their free
inode counts are near the 10K minifree limit. It looks like the free
inode count should be de-emphasized if the filesystem will run out of
blocks before it runs out of inodes, and vice-versa if inodes are likely
to be exhausted first. I now suspect that the other version of the
minbfree code was more likely to bail out because it could not find any
cylinder groups that met both selection criteria and used the fallback
code, which probably selected the cylinder groups that were already full
but had a large number of free inodes. Something to ponder ...
#df -k /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/da0s2a 10890186 10057300 -38328 100% /mnt
#df -i /mnt
Filesystem 1K-blocks Used Avail Capacity iused ifree %iused Mounted on
/dev/da0s2a 10890186 10057300 -38328 100% 535236 877882 38% /mnt
#/usr/obj/usr/src/sbin/dumpfs/dumpfs /dev/da0s2a | head -20
magic 19540119 (UFS2) time Sun Nov 16 18:34:10 2003
superblock location 65536 id [ 3ec6b0f1 ec1a8944 ]
ncg 60 size 5622734 blocks 5445093
bsize 16384 shift 14 mask 0xffffc000
fsize 2048 shift 11 mask 0xfffff800
frag 8 shift 3 fsbtodb 2
minfree 8% optim time symlinklen 120
maxbsize 16384 maxbpg 2048 maxcontig 8 contigsumsize 8
nbfree 51887 ndir 120875 nifree 877882 nffree 1347
bpg 11761 fpg 94088 ipg 23552
nindir 2048 inopb 64 maxfilesize 140806241583103
sbsize 2048 cgsize 16384 csaddr 3000 cssize 2048
sblkno 40 cblkno 48 iblkno 56 dblkno 3000
cgrotor 32 fmod 0 ronly 0 clean 0
avgfilesize 16384 avgfpdir 64
flags soft-updates
fsmnt /mnt
volname swuid 0
#/usr/obj/usr/src/sbin/dumpfs/dumpfs /dev/da0s2a | grep bfree
nbfree 51887 ndir 120875 nifree 877882 nffree 1347
cs[].cs_(nbfree,ndir,nifree,nffree):
nbfree 3953 ndir 2859 nifree 10786 nffree 3
nbfree 0 ndir 2114 nifree 14323 nffree 12
nbfree 0 ndir 2833 nifree 10755 nffree 31
nbfree 0 ndir 2866 nifree 10984 nffree 19
nbfree 0 ndir 2810 nifree 10983 nffree 15
nbfree 0 ndir 2122 nifree 14324 nffree 62
nbfree 0 ndir 2853 nifree 10887 nffree 39
nbfree 2 ndir 2872 nifree 10990 nffree 62
nbfree 0 ndir 2851 nifree 10985 nffree 18
nbfree 0 ndir 2787 nifree 11019 nffree 17
nbfree 0 ndir 2898 nifree 10982 nffree 15
nbfree 4 ndir 2769 nifree 10982 nffree 6
nbfree 5 ndir 2889 nifree 10984 nffree 18
nbfree 44 ndir 8 nifree 23544 nffree 21
nbfree 0 ndir 2525 nifree 12424 nffree 22
nbfree 0 ndir 2416 nifree 12654 nffree 5
nbfree 3 ndir 2510 nifree 12652 nffree 16
nbfree 0 ndir 2486 nifree 12655 nffree 56
nbfree 2 ndir 2475 nifree 12654 nffree 1
nbfree 21 ndir 2694 nifree 11847 nffree 44
nbfree 14 ndir 2230 nifree 13649 nffree 83
nbfree 196 ndir 4 nifree 23432 nffree 57
nbfree 16 ndir 587 nifree 20844 nffree 9
nbfree 2 ndir 0 nifree 23552 nffree 3
nbfree 5 ndir 2351 nifree 13182 nffree 15
nbfree 0 ndir 2801 nifree 11026 nffree 8
nbfree 0 ndir 2808 nifree 10985 nffree 12
nbfree 0 ndir 1738 nifree 15765 nffree 37
nbfree 0 ndir 1687 nifree 15991 nffree 24
nbfree 0 ndir 1668 nifree 15973 nffree 17
nbfree 0 ndir 1755 nifree 15992 nffree 47
nbfree 597 ndir 2901 nifree 10985 nffree 7
nbfree 1660 ndir 2945 nifree 10963 nffree 2
nbfree 0 ndir 2798 nifree 10984 nffree 10
nbfree 116 ndir 1736 nifree 15993 nffree 12
nbfree 0 ndir 1755 nifree 15978 nffree 8
nbfree 8344 ndir 2860 nifree 10972 nffree 1
nbfree 780 ndir 2770 nifree 10953 nffree 28
nbfree 0 ndir 2 nifree 23321 nffree 51
nbfree 0 ndir 0 nifree 23552 nffree 18
nbfree 2821 ndir 2791 nifree 10970 nffree 0
nbfree 91 ndir 0 nifree 23552 nffree 46
nbfree 1838 ndir 999 nifree 19117 nffree 2
nbfree 6455 ndir 2807 nifree 11028 nffree 4
nbfree 6232 ndir 2871 nifree 11027 nffree 0
nbfree 5 ndir 0 nifree 23552 nffree 17
nbfree 4 ndir 982 nifree 19170 nffree 58
nbfree 40 ndir 5 nifree 23496 nffree 78
nbfree 3169 ndir 484 nifree 21386 nffree 0
nbfree 36 ndir 3 nifree 23509 nffree 47
nbfree 3136 ndir 2852 nifree 10976 nffree 6
nbfree 4860 ndir 2876 nifree 10981 nffree 2
nbfree 34 ndir 2082 nifree 14219 nffree 57
nbfree 0 ndir 2087 nifree 14362 nffree 14
nbfree 1953 ndir 2867 nifree 10982 nffree 11
nbfree 0 ndir 2115 nifree 14365 nffree 14
nbfree 223 ndir 1997 nifree 14292 nffree 17
nbfree 5226 ndir 2876 nifree 10938 nffree 7
nbfree 0 ndir 2100 nifree 14094 nffree 32
nbfree 0 ndir 2048 nifree 14360 nffree 4
More information about the freebsd-fs
mailing list