4.8 ffs_dirpref problem

Ken Marx kmarx at vicor.com
Mon Nov 17 10:28:12 PST 2003


Don Lewis wrote:
> On 31 Oct, To: kmarx at vicor.com wrote:
> 
>>On 31 Oct, Ken Marx wrote:
> 
> 
>>You may get better results if you change the minbfree calculation from
>>(avgbfree - avgbfree/4) to just (avgbfree).
>>
>>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.
> 
> 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 suspect the problem is the large bimodal distribution in file size in
> my benchmark, with zillions of little files, but also a number of large
> package files and source distfiles.  The large files muck up the dirsize
> calculation because they are actually distributed across multiple
> cylinder groups and only the first maxbpg blocks are allocated in the
> original cylinder group.  This would be easy to account for in the
> avgfilesize * avgfpdir formula, but I don't know how to handle this in
> the curdirsize formula (other than the degenerate case where most files
> are larger than maxbpg).
> 
> Since I probably won't have time to get anything different tested before
> the -CURRENT code freeze, do you have any objections if I just MFC the
> code that I previously committed to -CURRENT?  It certainly seems to
> perform better than the original code which is still in 4-STABLE.
> 
> 

Don, any fine points you put on our corse level of testing here
are fine with us. I belive any of the versions you suggest will
keep us well out of the crippling behavior that originally brought
this up.

I was able to run a couple more tests here, and *belive* that the
fix to the hash table in vfs_bio.c will provide some relief
for cg block searches when things do fall into the linear search case.

k

-- 
Ken Marx, kmarx at vicor-nb.com
The entire team is behind the concept that we establish strategic alliances and 
identify trends in the context of the team building.
		- http://www.bigshed.com/cgi-bin/speak.cgi


More information about the freebsd-fs mailing list