Mike, Lorenzo,<div>Probably David will have something that will work but in case this helps, this is the (a) routine you and I developed together for BGP some years ago (July 08 apparently). Before running a few variables have to be set up so I also included the setupvars script we had for reference...</div>

<div><br></div><div><div>function loadfile</div><div>{</div><div>        cd $rootdir</div><div>        local ARCHIVE=$1</div><div>        local ARCHIVE_NAME=`basename $ARCHIVE`</div><div>        local START_LOCK=$ARCHIVE_NAME-oops-cache-lock-started</div>

<div>        local END_LOCK=$ARCHIVE_NAME-oops-cache-lock-finished</div><div>        if [ ! -d ${START_LOCK} ];then</div><div>                mkdir ${START_LOCK}</div><div>                EXITCODE=$?</div><div>                if [ "${EXITCODE}" -ne "0" ];then</div>

<div>                    echo "waiting for data to be copied"</div><div>                    while [ ! -d ${END_LOCK} ];do</div><div>                        sleep 1</div><div>                    done</div><div>                else</div>

<div>                        echo "Copying $ARCHIVE to $rootdir" </div><div>                        cp -v $ARCHIVE $rootdir</div><div>                        tar xzvf $ARCHIVE_NAME</div><div>                        rm $ARCHIVE_NAME </div>

<div>                        mkdir ${END_LOCK}</div><div>                fi</div><div>        else</div><div>                while [ ! -d ${END_LOCK} ];do</div><div>                        sleep 1</div><div>                done</div>

<div>        fi</div><div>        return 0</div><div>}</div><div><br></div><div><div>function setupvars</div><div>{</div><div>        export PATH=/fuse/bin:/fuse/usr/bin:$PATH</div><div>        rootdir=/dev/shm</div><div>

        data_location=$1</div><div>        protein=$2</div><div>        round=$3</div><div>        jobid=$4</div><div>        killtime=$5</div><div><br></div><div>        loadseed=1</div><div><br></div><div>        usagestring="$0 DATA_LOCATION PROTEIN ROUND JOBID KILLTIME"     </div>

<div>        if [ -z $5 ];then</div><div>                echo $usagestring</div><div>                echo "Example: $0 /home/hockyg/glOOPS/bgprt 1ubq 1 1 30"</div><div>                exit 27</div><div>        fi</div>

<div><br></div><div>        oops_pack=$data_location/rt-base.tar.gz</div><div>        rtbasedir=$rootdir/rt-base</div><div>        input_pack=$data_location/input-$protein.tar.gz</div><div>        inputdir=$rootdir/input-$protein</div>

<div>        starttime=`date +%s`</div><div>        protid=$protein-$round-$jobid</div><div>        protdir=$rootdir/$protid</div><div>        timeshift=$(( $jobid % 60 ))</div><div><br></div><div>        mkdir -p $protdir/output</div>

<div><br></div><div>        returndir=$data_location/output/$protein/$round</div><div>        outdir=$protdir/output</div><div>        runoopslog=$protdir/output/$protid.runoopslog</div><div>        oopsreturnfile=$rootdir/$protid-done</div>

<div><br></div><div>        if [ ! -e $returndir ];then</div><div>                mkdir -p $returndir</div><div>        fi</div><div>        </div><div>        if [ ! -z $loadseed ];then</div><div>                seedfile=$protdir/output/$protid.random</div>

<div>                let seed=`expr $round*10000+$jobid`</div><div>                #echo "Writing seed $seed to $seedfile"</div><div>                echo $seed > $seedfile</div><div>        fi</div><div>}</div>

</div><div><br></div><div><br></div><br><div class="gmail_quote">On Fri, Jun 8, 2012 at 3:53 PM, Michael Wilde <span dir="ltr"><<a href="mailto:wilde@mcs.anl.gov" target="_blank">wilde@mcs.anl.gov</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br>
> We were talking about putting the input files for Taka's calculations<br>
> (the X.mat files), which are rather small ~ 60Kb or so, in ram disk<br>
> and try to use them for all the apps (that use the same file). giving<br>
> the size, we could even load up all of them for each node<br>
> (7*3*60=1.2MB, that is zero) to reduce traffic towards /lustre and<br>
> thus avoid the meta-data slow downs that Beagle seems to have.<br>
><br>
> If we copy files in /tmp (as far as I understand it would be ramdisk)<br>
> on the each node through swift, would it be there for all the apps?<br>
<br>
</div>One way to do this, which has worked well for us is this:<br>
<br>
- in the app wrapper script, create a function that loads the constant input data<br>
<br>
- in this function, using directory-based locking logic to:<br>
<br>
  -- create a data dir under /tmp<br>
  -- fill the dir from a tarball<br>
<br>
- in the app wrapper logic, if the /tmp/data dir is there, use it<br>
  else call the function to create it.<br>
<br>
This logic uses the fact that directory creation is atomic, so you can use that to prevent races where two apps running on the same node would each try to create the dir.<br>
<br>
David, can you post the logic you developed for the above?<br>
<br>
Thanks,<br>
<br>
- Mike<br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
Swift-user mailing list<br>
<a href="mailto:Swift-user@ci.uchicago.edu">Swift-user@ci.uchicago.edu</a><br>
<a href="https://lists.ci.uchicago.edu/cgi-bin/mailman/listinfo/swift-user" target="_blank">https://lists.ci.uchicago.edu/cgi-bin/mailman/listinfo/swift-user</a><br>
</div></div></blockquote></div><br></div>