2014-01-31 54 views
0

我需要一些帮助来计算bash脚本的平均IO等待时间。计算Linux bash脚本的平均IO等待时间

我将运行的脚本非常简单。 对2个文件进行排序然后加入。 由于我将在大文件上进行测试,因此我需要知道为了做出一些决定(哪些文件加入++)而具有多少IO瓶颈。

我发现了许多不同的答案来获得IO等待时间,但没有办法计算程序的平均时间。

如果上面的问题解决了,我还想上面的cpu平均运行时间,但IO更重要。

我的一个解决方案是运行iostat,直到程序终止,然后收集iowait时间和平均值。不知道这是不是一个好主意。

+0

'时间script.sh'您'script.sh'? – user2485710

+0

我对IO时间不是一般的运行时间感兴趣。 – Sib

+0

您将文件作为参数传递给脚本?你甚至可以使用'for'循环在每个文件上调用你的脚本,比如'for * .txt中的文件;做时间./script.sh $文件; done' – user2485710

回答

1

您可以在/ proc/stat中找到任何cpu使用信息,因此您只需在命令之前和命令之后记录信息。我写了一个样本。

您可以测试它就像: ./avg_iowait.sh “DD如果=的/ dev/TMP = BS = 1M的零数= 2000”

您也可以使用日期数据的样本中在执行时间内计算CPU使用平均值。我

============================================= ==========================在您选择的shell执行 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%"