[Swift-devel] Clustering and Temp Dirs with Swift

Mihael Hategan hategan at mcs.anl.gov
Sun Oct 28 17:17:47 CDT 2007


On Sun, 2007-10-28 at 17:15 -0500, Michael Wilde wrote:
> Regarding this problem of avoiding large directories:
> 
> One part of this taking all the swift by-product files that are 
> generated on a per-job basis within a workflow (which Ben has started to 
> list below) and naming them in a way that spreads them across a 
> directory tree.
> 
> One step seems to be naming files in a way that makes this split easier.
> 
> What I'd like to suggest is that we set all the UUID patterns that we 
> use in swift from "no-touch-em" properties that we can experiment with.
> This can set both the pattern eg nnnnnn or aaaaaa as well as whether its 
> sequential vs random, etc.
> 
> This makes me ask what naming strategy we use for jobs and kickstart 
> records:
> angle4-mtlivaji-kickstart.xml
> angle4-ntlivaji-kickstart.xml
> angle4-otlivaji-kickstart.xml
> angle4-ptlivaji-kickstart.xml
> angle4-qtlivaji-kickstart.xml
> 
> Why are these jobnames differing in the leftmost character of the uuid 
> instead of the rightmost? I never paid attention to this till I started 
> thinking about the dir hashing Ben suggests. I think that most hashes, 
> unless the file names are random, need to be aware of which end of the 
> name is varying fastest.

Hmm. Yes. Never occurred to me. It can be changed.

> 
> If these were numeric patterns, it would be easy to eg put 100 files per 
> dir by taking say the leftmost 6 characters and making that a dirname 
> within which the rightmost 2 chars would vary:
> 
> tlivaj/angle4-tlivajim-kickstart.xml
> tlivaj/angle4-tlivajin-kickstart.xml
> tlivaj/angle4-tlivajio-kickstart.xml
> tlivaj/angle4-tlivajip-kickstart.xml
> tlivaj/angle4-tlivajiq-kickstart.xml
> 
> but easier on my eyes would be:
> 000000/angle4-00000001-kickstart.xml
> 000000/angle4-00000002-kickstart.xml
> ...
> 000000/angle4-00000099-kickstart.xml
> ...
> 000020/angle4-00002076-kickstart.xml
> etc.
> 
> This makes splitting based on powers of 10 (or 26 or 36) trivial. Other 
> splits can be done with mod() functions.
> 
> Can we start heading in this or some similar direction?
> 
> We need to coordinate a plan for this, I suspect, to make Andrew's 
> workflows perform acceptably.
> 
> - Mike
> 
> 
> 
> On 10/27/07 2:08 PM, Ben Clifford wrote:
> > 
> > On Sat, 27 Oct 2007, Mihael Hategan wrote:
> > 
> >> Quickly before I leave the house:
> >> Perhaps we could try copying to local FS instead of linking from shared
> >> dir and hence running the jobs on the local FS.
> > 
> > Maybe. I'd be suspicious that doesn't reduce access to the directory too 
> > much.
> > 
> > I think the directories where there are lots of files being read/written 
> > by lots of hosts are:
> > 
> > the top directory (one job directory per job)
> > the info directory
> > the kickstart directory
> > the file cache
> > 
> > In the case where directories get too many files in them because of 
> > directory size constraints, its common to split that directory into many 
> > smaller directories (eg. how squid caching, or git object storage works). 
> > eg, given a file fubar.txt store it in fu/fubar.txt, with 'fu' being some 
> > short hash of the filename (with the hash here being 'extract the first 
> > two characters).
> > 
> > Pretty much I think Andrew wanted to do that for his data files anyway, 
> > which would then reflect in the layout of the data cache directory 
> > structure.
> > 
> > For job directories, it may not be too hard to split the big directories 
> > into smaller ones. There will still be write-lock conflicts, but this 
> > might mean the contention for each directories write-lock is lower.
> > 
> 




More information about the Swift-devel mailing list