Comparer les temps d'exécution de différentes commandes
Maintenant que nous comprenons comment utiliser la commande time et interpréter sa sortie, comparons les temps d'exécution de différentes commandes pour comprendre leurs caractéristiques de performance.
Tout d'abord, créons un script gourmand en E/S (I/O) qui lit et écrit des données :
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
Rendez le script exécutable :
chmod +x ~/project/io_intensive.sh
Maintenant, chronométrons ce script gourmand en E/S :
time ~/project/io_intensive.sh
Vous devriez voir une sortie similaire à celle-ci :
I/O operations complete
~/project/io_intensive.sh 0.01s user 0.00s system 96% cpu 0.014 total
Notez que le temps system est maintenant plus élevé par rapport au temps user par rapport à notre script gourmand en CPU. En effet, les opérations d'E/S de fichiers nécessitent des appels système (system calls), qui s'exécutent en mode noyau (kernel mode). Le pourcentage élevé de CPU (96%) indique que le système a travaillé activement la plupart du temps pendant l'exécution.
Chronométrons également une commande Linux courante qui recherche des modèles de texte :
time grep -r "root" /etc
Cette commande recherche récursivement le mot "root" dans tous les fichiers du répertoire /etc. La sortie pourrait ressembler à ceci :
[many matches shown here]
grep -r "root" /etc 0.18s user 0.08s system 99% cpu 0.259 total
Comparons maintenant les trois commandes que nous avons chronométrées :
simple_echo.sh : Exécution très rapide (0.001s total), temps CPU et système minimal.
cpu_intensive.sh : Exécution plus longue (2.335s total), principalement temps CPU utilisateur (2.10s).
io_intensive.sh : Temps d'exécution modéré (0.014s total), équilibré entre le temps utilisateur et le temps système en raison des opérations d'E/S.
grep -r "root" /etc : Temps d'exécution modéré (0.259s total), équilibré entre le temps utilisateur et le temps système en raison du traitement de texte et des E/S de fichiers.
Cette comparaison montre comment différents types d'opérations affectent le temps d'exécution et l'utilisation des ressources. Comprendre ces modèles peut vous aider à identifier les goulots d'étranglement (bottlenecks) dans vos scripts et commandes, ce qui conduit à un code plus efficace.