Сравнение времени выполнения различных команд
Теперь, когда мы понимаем, как использовать команду time
и интерпретировать ее вывод, давайте сравним время выполнения различных команд, чтобы понять их характеристики производительности.
Сначала давайте создадим скрипт, интенсивно использующий ввод-вывод (I/O-intensive script), который читает и записывает данные:
echo '#!/bin/bash' > ~/project/io_intensive.sh
echo 'for i in {1..10}; do' >> ~/project/io_intensive.sh
echo ' cat /etc/passwd > ~/project/temp_file_$i.txt' >> ~/project/io_intensive.sh
echo ' cat ~/project/temp_file_$i.txt > /dev/null' >> ~/project/io_intensive.sh
echo 'done' >> ~/project/io_intensive.sh
echo 'rm ~/project/temp_file_*.txt' >> ~/project/io_intensive.sh
echo 'echo "I/O operations complete"' >> ~/project/io_intensive.sh
Сделайте скрипт исполняемым:
chmod +x ~/project/io_intensive.sh
Теперь давайте измерим время выполнения этого скрипта, интенсивно использующего ввод-вывод:
time ~/project/io_intensive.sh
Вы должны увидеть вывод, похожий на этот:
I/O operations complete
~/project/io_intensive.sh 0.01s user 0.00s system 96% cpu 0.014 total
Обратите внимание, что время system
теперь выше по отношению ко времени user
по сравнению с нашим скриптом, интенсивно использующим CPU. Это связано с тем, что операции файлового ввода-вывода требуют системных вызовов, которые выполняются в режиме ядра. Высокий процент CPU (96%) указывает на то, что система активно работала большую часть времени во время выполнения.
Давайте также измерим время выполнения распространенной команды Linux, которая ищет текстовые шаблоны:
time grep -r "root" /etc
Эта команда рекурсивно ищет слово "root" во всех файлах в каталоге /etc
. Вывод может выглядеть так:
[many matches shown here]
grep -r "root" /etc 0.18s user 0.08s system 99% cpu 0.259 total
Теперь давайте сравним все три команды, время выполнения которых мы измерили:
simple_echo.sh
: Очень быстрое выполнение (0.001s total), минимальное время CPU и system.
cpu_intensive.sh
: Более длительное выполнение (2.335s total), в основном время CPU в пользовательском режиме (2.10s).
io_intensive.sh
: Умеренное время выполнения (0.014s total), сбалансированное между временем user и system из-за операций ввода-вывода.
grep -r "root" /etc
: Умеренное время выполнения (0.259s total), сбалансированное между временем user и system из-за обработки текста и файлового ввода-вывода.
Это сравнение демонстрирует, как различные типы операций влияют на время выполнения и использование ресурсов. Понимание этих закономерностей может помочь вам выявить узкие места в ваших скриптах и командах, что приведет к более эффективному коду.