mpifileutils icon indicating copy to clipboard operation
mpifileutils copied to clipboard

dstripe shouldn't restripe small files over all OSTs

Open adilger opened this issue 6 years ago • 0 comments

According to the dstripe.1 man page, the current default is to restripe all files over all OSTs:

By default, stripe size is 1MB and stripe count is -1
allowing dstripe to use all available stripes.  ... The
default minimum file size is 0MB. 

This is not a good set of default options for Lustre, since it adds significant overhead for small files, especially on large systems with hundreds of OSTs. There may be some variance on what is an optimal set of parameters, but there are definitely default values that are better than this.

Options include increasing the default minimum file size to 64MB, so that small files are not restriped by default (if we assume that they are created with stripe_count=1). Alternately, if small files are often "over striped" by default (e.g. if the filesystem default stripe_count is 4 or 8), it makes sense to include all files, but make the default stripe_count a function of the file size.

One suggestion (based on https://review.whamcloud.com/20552) is something like stripe_count=(sqrt(size/128MiB) + 1). That would need stripe a 2TB file over 128 stripes (each stripe is 16GB), which is more reasonable than stripe_count=-1 for all files.

It would also make sense to allow a per-OST size cap to be specified with:

--cap|-C <size>: maximum stripe size for each OST (if possible)

to put an upper limit on how much data is stored on each OST, to make the sqrt() curve linear above a certain size. This might default to some fraction of the remaining free space of the OSTs so that large files are distributed widely enough.

adilger avatar Feb 08 '19 22:02 adilger