Comment programmer un programme Linux

Contenu

Bash Shell

Vous voulez analyser combien de temps l'horloge murale, temps noyau, etc., un programme Linux prend du temps à s'exécuter? Que ce soit pour des tests de performances, optimisation de code ou simplement curiosité générale, ce guide rapide vous aidera à démarrer.

Programmation de programme Linux

Chronométrer un programme Linux aide à comprendre combien de temps a été passé. Le Linux polyvalent time La commande peut être utilisée pour cela. Les time La commande mesure en temps réel (Autrement dit, l'heure de l'horloge murale), utilisateur et système. L'heure utilisateur est l'heure à laquelle le programme s'exécute en mode utilisateur, ou autrement dit, en dehors du noyau. L'heure système est l'heure à laquelle le programme s'exécute dans le noyau.

Il est essentiel de faire attention au fait que le temps utilisateur et le temps système sont le temps CPU réel passé en mode utilisateur et dans le noyau., respectivement. Autrement dit, lorsqu'un programme est verrouillé pendant un certain temps et n'utilise pas le processeur, ce temps ne comptera pas pour Nom d'utilisateur O sys fois. Sachant cela, nous pouvons mesurer avec précision combien de temps CPU effectif a été utilisé (les combiner).

Sous Linux conditions météorologiques Outil

Étant donné que Nom d'utilisateur Oui sys les temps ne rapportent que le temps CPU, tandis que vrai l'heure rapporte l'heure réelle de l'horloge murale, c'est (pour cela) très courant de voir le time sortie de retour d'outil où une combinaison de Nom d'utilisateur + système ce n'est pas pareil vrai conditions météorologiques. Un exemple peut être vu lors de la synchronisation sleep:

le sommeil de temps 1

Une simple commande de temps qui teste le temps qu'il faut pour une commande de suspension 1 à l'invite de commande Linux

Ici, nous chronométrons le sleep commande à l'aide du time outil. Comme nous pouvons le voir, notre vrai conditions météorologiques (1.001 secondes) correspond à l'heure de notre horloge murale et à l'heure demandée (sleep 1 demander un rêve d'une seconde) très bien. On voit aussi que très peu de temps CPU a dû être dédié à la commande dans son ensemble: combiner Nom d'utilisateur + système conditions météorologiques, on voit qu'ils n'ont dépensé que 0.001 secondes.

Nous pouvons aussi, probablement à tort, en déduire que le noyau n'était pas impliqué dans cette commande, depuis le système le temps est en effet 0. Malgré cela, comme lui time indique le manuel: “Cuando el tiempo de ejecución de un comando es muy cercano a cero, quelques valeurs (par exemple, le pourcentage de CPU utilisé) peut être rapporté comme zéro (ce qui est faux) o como un signo de interrogación”.

À l'aide de conditions météorologiques Pour mesurer les performances

On peut utiliser time para examinar cuánto tiempo tomarán las acciones dadas (Autrement dit, tiempo de reloj de pared) y cuánto tiempo de CPU consumieron mientras lo hacían. Como ejemplo simple, podríamos examinar si algún caché del sistema de archivos está funcionando en nuestro sistema. Pour le faire, podríamos saltar al /usr annuaire, que fácilmente podría contener 200k a 500k archivos en una instalación común de Linux.

Une fois là-bas, nous pouvons utiliser le find outil, cronometrada por time para examinar cuánto tiempo tomaría escanear todas las carpetas y listar todos los archivos en el /usr annuaire:

cd /usr
time find . >/dev/null 2>&1

Listar el contenido de / usr con buscar y cronometrar lo mismo

Comme nous pouvons le voir, se necesitan 12.484 segundos para listar todos los archivos en el /usr annuaire (y debajo de él). Redirigimos la salida stdout (sortie standard) del comando a >/dev/null y además redirigir cualquier error stderr (erreur standard) une /dev/null a través de el uso de una redirección de stderr a stdout, Autrement dit 2>&1.

Además vemos que nuestro tiempo de CPU es 1.043 secondes (Nom d'utilisateur) + 2.908 secondes (système) pour un total de 3.951 segundos de tiempo de CPU.

Probémoslo en otra ocasión borrando nuestra (s) cache (s) de inodo (et d'autres):

sync; écho 3 | sudo tee /proc/sys/vm/drop_caches
cd /usr
time find . >/dev/null 2>&1

Supprimer l'inode (et autres) cache Linux et réexécutez notre commande de recherche sur / usr

La première commande effacera le cache des inodes, dentries (entrées de répertoire) et pagecache. Cette fois, le résultat est revenu un peu plus vite, avec 1,255 secondes enregistrées dans la commande. Probablement un cache basé sur un disque physique a aidé ici.

Démontrer à quel point la mise en cache Linux fonctionne en général, réexécutons la commande, mais cette fois sans supprimer les caches Linux:

La réexécution de la commande de recherche sans effacer les caches entraîne une exécution beaucoup plus rapide

Quelle différence! Nous constatons une énorme diminution du temps requis dans les trois zones chronométrées et notre commande s'exécute en moins d'une demi-seconde !!

À l'aide de conditions météorologiques Pour l'optimisation du code

Une fois que nous sommes à l'aise d'utiliser le time commande sur la ligne de commande, nous pouvons étendre son utilisation pour tirer pleinement parti de nos scripts et de notre code bash. Par exemple, une approche couramment utilisée par certains professionnels consiste à exécuter une certaine commande généralement, Quoi 1000 exécutions, et calculer le temps total (ou moyenne) de ces exécutions.

Ensuite, une commande alternative peut être utilisée. Cette commande alternative (ou solution / la mise en oeuvre, Autrement dit, plusieurs commandes réunies en un seul morceau de code à chronométrer) peut être chronométré à nouveau. En Linux (ou plus précisément en encodage Bash, etc.), il existe souvent de nombreuses alternatives pour surmonter un obstacle donné; En général, il existe plusieurs outils disponibles pour obtenir / obtenir le même résultat.

Tester celui qui fonctionne le mieux optimise le temps d'exécution du programme et potentiellement d'autres facteurs tels que E / S du disque (réduire l'usure des disques) ou l'utilisation de la mémoire (permettant à plus de programmes de s'exécuter dans la même instance). Pour tirer le meilleur parti de l'heure de l'horloge murale, un certain outil utilise, En moyenne, ainsi que le temps CPU consommé par l'outil (un autre facteur / consideración importante de optimización) se puede medir a través de el time outil.

Exploremos un ejemplo práctico del uso de la línea de comandos para ejecutar un comando que queremos utilizar en uno de nuestros scripts. El comando obtendrá una lista de procesos y mostrará la segunda columna. Usamos ambos awk Oui sed pour le faire, y ejecute cada comando 1000 veces para ver la diferencia en el rendimiento general.

time for ((i=1;je<=1000;je++)); do ps -ef | ah '{imprimer $2}' >/dev/null 2>&1; done
time for ((i=1;je<=1000;je++)); do ps -ef | mais c'est|^[^ ]+[ t]+||;s|[ t].*||' >/dev/null 2>&1; terminé

Utilisez le temps pour analyser le temps d'exécution moyen de n'importe quelle commande, qui permet d'optimiser les temps d'exécution des scripts Linux

Même quand cela semble plus complexe (utiliser une double expression régulière pour analyser la deuxième colonne), notre deuxième commande est un peu plus rapide que notre première commande en ce qui concerne l'heure de l'horloge murale.

Utilisation d'une configuration très similaire (Autrement dit time for ((i=1;i<=1000;i++)); do command_to_be_timed >/dev/null 2>&1; done où command_to_be_timed est la commande à tester pour l'horloge murale ou le temps CPU), on peut tester l'heure de n'importe quelle commande ou ensemble de commandes (comme c'est le cas ici; nous utilisons tellement le ps Oui awk/sed commandes).

Suivez ces étapes pour diverses commandes chronophages (dans n'importe quel script Linux) nous aidera à réduire le temps d'exécution global et / O (si vous optimisez pour réduire le temps CPU) la charge système de nos scripts.

Si vous voulez en savoir plus sur les expressions régulières, Vous pourriez être intéressé par Comment modifier du texte à l'aide d'expressions régulières avec sed Stream Editor.

Fin

Dans ce billet, nous explorons Linux time commander. Nous précisons que vrai, Nom d'utilisateur Oui système les temps indiquent et comment les deux derniers sont liés à l'utilisation du processeur. Nous passons également en revue plusieurs exemples d'utilisation conditions météorologiques d'une manière pratique.

Si vous avez aimé lire cet article, consultez les déclarations, erreurs et plantages: Quelle est la différence? et qu'est-ce que Stack Smashing? Il peut être corrigé ?.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.