Pour commencer, une question bête. Si je pars d'une hypthèse d'une RAM 128 Mo (ce qui me paraît normal actuellement), Est-t-il vraiment normal qu'une application mange toute la RAM à disposition ? Ne faudrait-il pas revoir l'algorithme de l'applic ?
pour en revenir au fond de la question, c'est le gestionnaire mémoire de Linux qui se charge de la pagination, et, à ma connaissance, il le fait très bien, le problème ne réside sans doute pas à ce niveau là.
Dans le cadre d'un cours que je dispense sur les système d'exploitaitions, je fais une manip assez spectaculaire pour montrer l'augmentation du taux de pagination au fur et à mesure qu'un processus réclame de la mémoire:
...
char *ptr;
...
while (1)
{if ( ptr = malloc(10000)) == NULL)
break;
putchar('<');
}
printf("Ouf ! fini\n")
...
On lance simultanément, l'exécution du programme et l'exécution de top (ou un quelconque autre outil de visualisation des infos système) pour visualiser le taux de pagination et le taux d'utilisation du CPU. Pour que la démo soit vraiment effective, il est préférable d'utiliser un système avec une grand mémoire RAM (dans mon cas 1 Go). Au début, il n'y a pas de pagination, le CPU est utilisé à pratiquement 100 %, puis, petit à petit, la pagination augmente, les taux d'utilisation du CPU baisse légèrement, jusqu'au point de "trashing" (navré, je ne connais pas l'équivalent en français): le taux d'utilisation du CPU passe brutalement à 1 ou 2 %, le système est en totale contention disque (attente pratiquement permanente d'E/S sur disque), tout se ralentit, on peut même avoir l'impression que le système est "planté", jusqu'au moment où le processus utilise toute la mémoire (RAM + SWAP) et malloc répond NULL. On sort alors de la boucle infernale et le processus se termine.
Linux utilise une technique de taille de buffer dynamique, c'est à dire que, lorsque un processus a besoin de mémoire, le buffer réduit sa taille, jusqu'à une taille minimum incomprésible (tout cela peut se paramétrer). Pour une dizaine de secondes, les temps de réponse sont désastreux, la RAM a été complétement utilisée par ce processus fou, le buffer est minimum et tout doit être rechargé à partir du disque d'où les mauvais temps de réponse.
Alors, même si l'on a des doutes, même si l'on ne va pas voir comment la pagination est implémentée (on a les sources, c'est fait pour ça) cette démo montre que le système de pagination fonctionne très bien sous Linux.
Elle est pas belle la vie ?
Poste le Thursday 18 December 2003 19:03:36