Appendices > Appendix F: Large cluster considerations > End user command caching

F.2 End user command caching

qstat

In a large system, users may tend to place excessive load on the system by manual or automated use of resource manager end user client commands. A simple way of reducing this load is through the use of client command wrappers which cache data. The example script below will cache the output of the command 'qstat -f' for 60 seconds and report this info to end users.

#!/bin/sh

 

# USAGE: qstat $@

 

CMDPATH=/usr/local/bin/qstat

CACHETIME=60

TMPFILE=/tmp/qstat.f.tmp

 

if [ "$1" != "-f" ] ; then

  #echo "direct check (arg1=$1) "

  $CMDPATH $1 $2 $3 $4

  exit $?

fi

 

if [ -n "$2" ] ; then

  #echo "direct check (arg2=$2)"

  $CMDPATH $1 $2 $3 $4

  exit $?

fi

 

if [ -f $TMPFILE ] ; then

  TMPFILEMTIME=`stat -c %Z $TMPFILE`

else

  TMPFILEMTIME=0

fi

 

NOW=`date +%s`

 

AGE=$(($NOW - $TMPFILEMTIME))

 

#echo AGE=$AGE

 

for i in 1 2 3;do

  if [ "$AGE" -gt $CACHETIME ] ; then

    #echo "cache is stale "

 

    if [ -f $TMPFILE.1 ] ; then

      #echo someone else is updating cache

 

      sleep 5

 

      NOW=`date +%s`

 

      TMPFILEMTIME=`stat -c %Z $TMPFILE`

 

     AGE=$(($NOW - $TMPFILEMTIME))

    else

      break;

    fi

  fi

done

 

if [ -f $TMPFILE.1 ] ; then

  #echo someone else is hung

 

  rm $TMPFILE.1

fi

 

if [ "$AGE" -gt $CACHETIME ] ; then

  #echo updating cache

 

  $CMDPATH -f > $TMPFILE.1

 

mv $TMPFILE.1 $TMPFILE

 

fi

 

#echo "using cache"

 

cat $TMPFILE

 

exit 0

The above script can easily be modified to cache any command and any combination of arguments by changing one or more of the following attributes:

For example, to cache the command pbsnodes -a, make the following changes:

Related topics