我需要一些帮助来计算bash脚本的平均IO等待时间。
我将运行的脚本非常简单。 排序2个文件,然后加入。 因为我将测试大型文件,所以我需要知道我有多少IO瓶颈才能做出一些决定(哪些文件加入++)。
我已经找到了许多不同的答案来获得IO等待时间,但无法计算程序的平均时间。
如果上述问题得到解决,我还希望上面的cpu平均运行时间,但IO更重要。
我的一个解决方案是运行iostat直到程序终止,然后收集iowait时间和平均值。不确定这是不是一个好主意。
答案 0 :(得分:1)
您可以在/ proc / stat中找到任何cpu使用信息,因此您只需在命令之前和命令之后记录信息。我写了一个样本。
你可以测试它,就像: ./avg_iowait.sh“dd if = / dev / zero of = tmp bs = 1M count = 2000”
您还可以使用示例中的日期数据来计算执行期间的cpu使用率。我
=============================================== ======================== avg_iowait.sh
CMD="$1"
LOG_START="start.txt"
LOG_END="end.txt"
cat /proc/stat | grep "cpu " > $LOG_START
echo "exec : $CMD"
$CMD
cat /proc/stat | grep "cpu " > $LOG_END
cat $LOG_START
cat $LOG_END
USR1=`awk -F " " '{print $2}' $LOG_START`
NICE1=`awk -F " " '{print $3}' $LOG_START`
SYS1=`awk -F " " '{print $4}' $LOG_START`
IDLE1=`awk -F " " '{print $5}' $LOG_START`
IOWAIT1=`awk -F " " '{print $6}' $LOG_START`
IRQ1=`awk -F " " '{print $7}' $LOG_START`
SOFRIRQ1=`awk -F " " '{print $8}' $LOG_START`
STEAL1=`awk -F " " '{print $9}' $LOG_START`
GUEST1=`awk -F " " '{print $10}' $LOG_START`
USR2=`awk -F " " '{print $2}' $LOG_END`
NICE2=`awk -F " " '{print $3}' $LOG_END`
SYS2=`awk -F " " '{print $4}' $LOG_END`
IDLE2=`awk -F " " '{print $5}' $LOG_END`
IOWAIT2=`awk -F " " '{print $6}' $LOG_END`
IRQ2=`awk -F " " '{print $7}' $LOG_END`
SOFRIRQ2=`awk -F " " '{print $8}' $LOG_END`
STEAL2=`awk -F " " '{print $9}' $LOG_END`
GUEST2=`awk -F " " '{print $10}' $LOG_END`
SUM1=`expr $USR1 + $NICE1 + $SYS1 + $IDLE1 + $IOWAIT1 + $IRQ1 + $SOFRIRQ1 + $STEAL1 + $GUEST1`
SUM2=`expr $USR2 + $NICE2 + $SYS2 + $IDLE2 + $IOWAIT2 + $IRQ2 + $SOFRIRQ2 + $STEAL2 + $GUEST2`
IOWAIT_PERCENT=`expr \( $IOWAIT2 - $IOWAIT1 \) \* 100 / \( $SUM2 - $SUM1 \)`
echo "IOWAIT : $IOWAIT_PERCENT%"