#!/bin/sh ############################################################################ # misc/record-load-iostat # # Part of the STXXL. See http://stxxl.sourceforge.net # # Copyright (C) 2008 Andreas Beckmann # # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) ############################################################################ # Usage: $0 [ -p outfileprefix ] command PID_IOSTAT="" PID_LOAD="" RETVAL="1" cleanup() { if [ -n "$PID_IOSTAT" ] || [ -n "$PID_LOAD" ]; then kill $PID_IOSTAT $PID_LOAD fi exit $RETVAL } loadavg() { while true do cat /proc/loadavg sleep 1 done } trap cleanup 1 2 3 15 OUTFILEPREFIX=iostat_`hostname`_`date +%F--%H-%M` if [ "$1" = "-p" ]; then OUTFILEPREFIX="$2" shift shift fi if [ -z "$DONT_WAIT_FOR_LOW_LOAD" ]; then # wait at most 120 seconds for load to drop below 1.00 loop="" load=`cut -d. -f1 /proc/loadavg` echo -n "Waiting for load to drop below 1.00 " >/dev/tty while [ "$load" != "0" ] && [ "$loop" != "........................" ] do echo -n "." >/dev/tty sleep 5 loop="$loop." load=`cut -d. -f1 /proc/loadavg` done echo " ==> `cut -d' ' -f1 /proc/loadavg`" >/dev/tty fi #run command passed as the argument concurrently to iostat #dump I/O stat every second iostat -x -m -t $IOSTAT_FLAGS 1 >$OUTFILEPREFIX.iostat & PID_IOSTAT=$! loadavg >$OUTFILEPREFIX.loadavg & PID_LOAD=$! "$@" RETVAL=$? cleanup exit $RETVAL