[Swift-devel] notes on how swift implements file input and output
Ben Clifford
benc at hawaga.org.uk
Fri Dec 5 12:46:31 CST 2008
On Thu, 4 Dec 2008, Ian Foster wrote:
> a) Am I correct in assuming that Swift currently will not run on a site that
> does not support a shared file system?
yes.
> b) Can we build on this document to introduce means by which we could make use
> of methods such as bulk transfer of many input files, collective I/O as on
> BG/P, etc.?
I wrote this to motivate discussion for the meeting we had yesterday
involving myself, mike wilde, hategan, ioan, zhao and allan espinosa which
was pretty much centered on that topic.
We looked at three specific cases of swift + something else:
* swift + gLite
* swift + falkon data diffusion
* swift + mike/zhao/allan's collective IO work
In all three cases, the modifications necessary to core swift seem fairly
simple.
In the gLite and falkon data diffusion case, it seems straightforward to
change the abstractions a bit so that, which there is still a concept of a
site shared filesystem, there is no requirement that this be posix
accessible; instead glite or falkon data diffusion specific mechanisms can
be used to move data from the site shared filesystem to the appropriate
worker node.
In the collective IO work, the new filesystem there exposes itself through
posix anyway; getting that working with swift seems mostly to be
integration work rather than new coding.
That being said, the discussion above was mostly about the mechanics of
plugging the pieces together. The more interesting and harder part of that
is likely to be performance characterisation and improvement; for
collective IO and data diffusion, it is improvement over traditional file
systems rather than whether it works or not that seems to be the goal.
> c) What are the pros and cons of copying all input and output files twice,
> once to the site, and once to the node. Is this ever a source of overhead?
They're not always copied to the node. In the present case, it is an
option whether to copy input files entirely to a worker node or to access
them directly off the site shared filesystem; its been seen through
experiment that it can be faster in some cases to copy a file using some
specialised posix data transfer tool like /bin/cp and then have local
access to it; conversely though if the input file is large and only small
parts of it are accessed randomly, then keeping it on the shared file
system may be a better approach.
Having a site-shared filesystem as part of the abstraction gives a fairly
straightforward way to handle site-side data caching so that input files
do not have to be staged in multiple times for multiple jobs; it also
gives a pretty portable way to get data to a worker node from its stagein
location that is closely aligned with how traditional grid sites are
configured.
There are pages more that could be written comparing different approaches
to doing this...
--
More information about the Swift-devel
mailing list