Les ordinateurs ou même les téléphones, tous ces appareils, peuvent effectuer plusieurs tâches simultanément. Le principe de «multi-tâche» est apparu très tôt, même si aujourd’hui grâce à l’arrivée des multi-cores dans les processeurs (ou CPU) le multi-tâche s’avère en partie vraiment réalisé. Le core (coeur en français) d’un processeur est capable de gérer une tâche, un CPU dual-core est capable de gérer deux tâches, un processus qui a 4 cœurs est capables de gérer 4 tâches, etc. simultanément.
Un core a également une fréquence d’exécution, c’est-à-dire une vitesse à laquelle il est capable de faire des calculs. En général, cette fréquence est donné en Gigahertz (GHz).
En réalité, les processus ne s’exécutent pas de manière véritablement simultanée. Un processus s’exécute seulement pendant un court instant donné. C’est le noyau du processeur qui est chargé de répartir le temps de travail. Après avoir passé ce temps de travail, le noyau du processeur interrompt le processus en cours pour en lancer un autre.
Si un processeur contient beaucoup de cœurs, alors chaque processus va mettre plus de temps à exécuter sa tâche car il devra attendre plus longtemps que le noyau lui donne la main.
Mais comment savoir si nos machines ne sont pas surchargées, c’est-à-dire si tous nos processus sont en attente d’exécution ? Comment peut-on surcharger un processeur ? Comment y remédier ?
Sur les systèmes UNIX, il existe plusieurs moyen pour savoir si un processeur est surchargé.
Tout d’abord, utilisons la commande : uptime
.
Nous pouvons tout d’abord voir l’heure où la commande à été lancée, depuis combien de temps l’ordinateur est allumé et le nombre d’utilisateurs actuellement sur la session. Ce qui nous intéressent ici est le load average (charge moyenne). Le load average est indiqué par 3 mesures. 3 nombres qui peuvent aussi être retrouvés dans /proc/loadavg
comme montré ci-dessous :
Le load average, est le nombre moyen d’entrées et de sorties de processus de l’ordinateur. Le load average contient 3 nombres : la charge moyenne durant la dernière minute, durant les 5 dernières minutes et durant les 15 dernières minutes.
Ces nombres peuvent être interprétés de la manière suivante : si nous avons un processus mono-core (donc ayant un seul cœur), si il est utilisé a 50% durant la dernière minute, alors le premier nombre va être de 0,5. Pour un processus dual-core (deux cœurs), si un des processeurs est à 50% et l’autre à 25% sur la dernière minute, alors le nombre va être de 0,75 (0,5 + 0,25 = 0,75). En général, si vous ne faites rien de particulier, votre load average ne devrait pas dépasser 1,5~2. Sinon, vous devriez
Un meilleur moyen de visualiser le load average est d’utiliser la commande htop
. Avec cette commande, nous pouvons visualisez le load average par processus et belle manière.
Ce qui est intéressant également c’est que nous pouvons voir quel logiciel/programme/commande consomme le plus.
Maintenant, nous allons faire une exéprience. Nous allons augmenter la charge moyenne très facilement.
Le fichier /dev/urandom
est un pseudo-fichier générateur de nombres aléatoires. Le fichier /dev/null
est un pseudo-fichier qui ignore toutes les écritures (un peu comme une corbeille). donc si nous faisons un cat /dev/urandom > /dev/null
, celui-ci devrait écrire infiniment dans un fichier sans fond (jusqu’à ce qu’on l’arrête). Voyons tout d’abord avec la commande uptime
.
Comme on peut le constater la charge augmente. Et si on regarde avec la commande htop
.
Comme on peut l’apercevoir, le load average de la dernière minute a augmenté jusqu’à 4 (ce qui est normal vu que nous avons lancé 4 fois la commande). Il y a également 4 processus qui tournent à 100%.
Nous pouvons également essayer avec un programme simple pour faire augmenter le load average encore plus vite.
Nous allons donc découvrir une méthode appelée Swapping (littéralement «échange»).
Dans un premier temps revoyons les bases sur la mémoire d’une machine qui est décomposée principalement en deux parties: disque dur et mémoire vive.
DISQUE DUR :
Le disque dur qu’il soit interne ou externe sert à stocker des informations et données sur votre ordinateur comme le système d’exploitation, les photos ou vidéos, vos programmes etc. de façon permanente. Le disque dur est donc essentiel à votre ordinateur.
MÉMOIRE VIVE (RAM)
La Random Access Memory ou plus connue sous le nom de RAM, est un autre type de mémoire qui à la différence du disque dur, ne va pas conserver ses informations, tout est stocké de façon provisoire (tant qu’il y a du courant, pour faire simple).
Pourquoi utiliser la RAM alors ? La vitesse de la RAM est en moyenne 60 à 70 fois plus rapide qu’un disque dur, vous l’aurez compris son avantage est sa vitesse de calcul et de lecture très rapide se qui procure une expérience plus fluide aux utilisateurs.
Swapin – Swapout
La mémoire vive est très rapide mais n’est pas infinie, elle est donc convoitée par les processus en cours d’exécution sur nos ordinateurs. Le swap est justement le phénomène qui va créer un espace sur le disque appelée “mémoire virtuelle”, dans lequel on va copier la mémoire vive qu’occupe un processus, en espérant qu’il n’aura pas à s’exécuter dans les instants qui suivent pour permettre d’avoir plus de mémoire vive pour les autres processus. Le swap est souvent sous forme d’un fichier ou sous la forme de partitions dédiées. De nos jours les systèmes d’exploitations modernes ont tendance à accorder plus de mémoire aux processus qu’il y en a physiquement dans la machine et va donc utiliser le phénomène du Swapping.
exemple de swapping dans une machine avec les commandes
La commande swapone “swapoff -a” permet de déléguer un peut de mémoire vive dans le disque dur et au contraire la commande “swapon -a” va réactiver l’espace mémoire “swp”. Une commande souvent utilisée pour remettre à zéro et redémarrer le SWAP est la suivante : “swapoff -a && swapon -a”.
Article co-écrit par Nil Dogbé et Étienne Jouanne.