Comparación de los Tiempos de Ejecución de Diferentes Comandos
Ahora que entendemos cómo usar el comando time e interpretar su salida, comparemos los tiempos de ejecución de diferentes comandos para comprender sus características de rendimiento (performance characteristics).
Primero, creemos un script intensivo en E/S (I/O-intensive script) que lea y escriba datos:
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
Haga que el script sea ejecutable:
chmod +x ~/project/io_intensive.sh
Ahora, midamos el tiempo de este script intensivo en E/S:
time ~/project/io_intensive.sh
Debería ver una salida similar a esta:
I/O operations complete
~/project/io_intensive.sh 0.01s user 0.00s system 96% cpu 0.014 total
Observe que el tiempo system ahora es más alto en relación con el tiempo user en comparación con nuestro script intensivo en CPU. Esto se debe a que las operaciones de E/S de archivos requieren llamadas al sistema (system calls), que se ejecutan en modo kernel. El alto porcentaje de CPU (96%) indica que el sistema estuvo trabajando activamente la mayor parte del tiempo durante la ejecución.
También midamos el tiempo de un comando común de Linux que busca patrones de texto:
time grep -r "root" /etc
Este comando busca recursivamente la palabra "root" en todos los archivos bajo el directorio /etc. La salida podría verse así:
[many matches shown here]
grep -r "root" /etc 0.18s user 0.08s system 99% cpu 0.259 total
Ahora comparemos los tres comandos que hemos medido:
simple_echo.sh: Ejecución muy rápida (0.001s total), tiempo mínimo de CPU y sistema.
cpu_intensive.sh: Ejecución más larga (2.335s total), principalmente tiempo de CPU de usuario (2.10s).
io_intensive.sh: Tiempo de ejecución moderado (0.014s total), equilibrado entre el tiempo de usuario y el tiempo de sistema debido a las operaciones de E/S.
grep -r "root" /etc: Tiempo de ejecución moderado (0.259s total), equilibrado entre el tiempo de usuario y el tiempo de sistema debido tanto al procesamiento de texto como a la E/S de archivos.
Esta comparación demuestra cómo los diferentes tipos de operaciones afectan el tiempo de ejecución y el uso de recursos. Comprender estos patrones puede ayudarle a identificar cuellos de botella (bottlenecks) en sus scripts y comandos, lo que lleva a un código más eficiente.