Сравнение времени выполнения различных команд
Теперь, когда мы понимаем, как использовать команду time
и интерпретировать ее вывод, давайте сравним время выполнения различных команд, чтобы понять их характеристики производительности.
Сначала создадим скрипт, интенсивно использующий ввод-вывод (I/O), который читает и записывает данные:
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
real 0m0.050s
user 0m0.010s
sys 0m0.040s
Обратите внимание, что время sys
теперь выше по сравнению с временем user
по сравнению с нашим скриптом, интенсивно использующим ЦП. Это потому, что операции ввода-вывода файлов требуют системных вызовов, которые выполняются в режиме ядра.
Давайте также измерим время выполнения обычной команды Linux, которая ищет текстовые шаблоны:
time grep -r "root" /etc
Эта команда рекурсивно ищет слово "root" во всех файлах в директории /etc
. Вывод может выглядеть так:
[many matches shown here]
real 0m0.567s
user 0m0.123s
sys 0m0.445s
Теперь сравним все три команды, время выполнения которых мы измерили:
simple_echo.sh
: Очень быстрое выполнение, минимальное использование ЦП и системного времени.
cpu_intensive.sh
: Более длительное выполнение, в основном используется пользовательское время ЦП.
io_intensive.sh
: Среднее время выполнения, более высокое системное время из-за операций ввода-вывода.
grep -r "root" /etc
: Среднее время выполнения, сбалансированное между пользовательским и системным временем из-за как обработки текста, так и операций ввода-вывода файлов.
Это сравнение демонстрирует, как различные типы операций влияют на время выполнения и использование ресурсов. Понимание этих закономерностей может помочь вам выявить узкие места в своих скриптах и командах, что приведет к более эффективному коду.
Для более подробной информации о времени выполнения вы также можете использовать команду /usr/bin/time
с флагом -v
(подробный вывод):
/usr/bin/time -v ~/project/simple_echo.sh
Это предоставляет обширную информацию о выполнении команды, включая использование памяти, ошибки страниц и многое другое.