2014-01-31 3 views
0

Мне нужна помощь в вычислении среднего времени ожидания ввода-вывода для сценария bash.Вычислить среднее время ожидания ввода-вывода для сценария linux bash

Сценарий, в котором я буду работать, очень прост. Сортируйте 2 файла, а затем присоедините их. Поскольку я буду тестировать огромные файлы, мне нужно знать, сколько у меня узких мест IO, чтобы принять несколько решений (какие файлы присоединяются к ++).

Я нашел много разных ответов, чтобы получить время ожидания ввода-вывода в целом, но не имеет возможности рассчитать среднее время для программы.

Если вышеописанное решение, я также хотел бы усреднить время выполнения процессора для вышеуказанного, но IO является более важным.

Одним из решений, которое я имел, было выполнение iostat до тех пор, пока программа не завершится, и затем соберите iowait и средние значения. Не уверен, что это хорошая идея или нет.

+0

'время script.sh' в вашей оболочке выбора, чтобы выполнить свой 'script.sh'? – user2485710

+0

Меня интересует время IO не общее время работы. – Sib

+0

вы передаете файл в качестве аргумента скрипту? вы даже можете использовать цикл 'for' для вызова вашего скрипта в каждом файле, что-то вроде' для файла в * .txt; сделать время ./script.sh $ file; done' – user2485710

ответ

1

Вы можете найти любую информацию об использовании процессора в/proc/stat, поэтому все, что вам нужно сделать, это записать информацию перед вашей командой и после вашей команды. Я пишу образец.

Вы можете проверить это так же, как: ./avg_iowait.sh «дд если =/DEV/нуль = TMP бс = 1M подсчитывать = 2000»

Вы можете также использовать данные о дате в образце вычислить использование cpu avg во время выполнения. I

======================================================================================================================== ========================== 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%" 
Смежные вопросы