Re: Parlons Swap...

Top Page

Reply to this message
Author: Francois-Xavier Kowalski
Date:  
To: Miguel Moquillon
CC: Mailing List GUILDE
Subject: Re: Parlons Swap...
Le Fri 20/12/2002 à 17:17, Miguel Moquillon a écrit :
> On Thu, Dec 19, 2002 at 11:09:05PM +0100, Francois-Xavier Kowalski wrote:

[...]
> > As-tu seulement compris mon explication? Elle explique pourquoi un
> > echec de page-out conduit *ineluctablement* au kernel-panic.


Il semble que mon explication etait complete pour ce qui est de la
description de l'echec, mais pas pour ce qui concerne le facteur "2x".
Je vais donc essayer de donner le pourquoi de la chose.

[Debutants, passez votre chemin ou accrochez-vous au pinceau... ;-) ]

> Et qui n'explique pas le "2XRAM" pour la simple raison que
> l'explication, bien que technique, est avant tout historique :
> Le mecanisme adopte par Linux pour le swaping est la pagination. Or,
> autrefois, les Unices (certains encore aujourd'hui) utilisaient
> le swap de processus entier.


Exact. Mais le resultat net est le meme que le mechanisme soit
"page-out to disk" or "swap out to disk". La frequence de l'echec est
simplement diminuee. Scenario (remplace "page" par "process" pour
l'autre mechanisme).

Voici un scenario typique du gestionnaire de faute de page (page fault
handler) dans le cas ou l'acces est legal.

        1. Le kernel choisit de mettre sur disque la page-1 pour ramener
           la page-2 (stockee sur zone-2 sur le disque) en memoire
           physique
        2. Il trouve une zone libre & propre "zone-1" sur le disque
        3. Il copie page-1 sur zone-1
        4. Il il ramene page-2 du disque en memoire.  Elle est alors
           marquee comme en lecture seule.


Commentaires sur les etapes ci-dessus:

        * Si l'etape 2 n'est pas couronee de succes, le handler echoue &
          le systeme fait un joli "kernel panic"
        * Pour des raisons evidentes de vitesse, la recheche de zone-1
          ne sefait en scannant le disque, mais en utilisant une liste
          de page pretes a l'empploi.  Cette liste est maintenue par un
          thread kernel dedie: kswapd (voir ci-dessous).
        * La limitation "2x" est du a la periode qui va de l'etape 3 &
          l'etape 4:  La page de memoire physique requiert 2 fois sa
          taille sur disque.


A l'issue de ce scenario, La main est rendue en process qui a commit
cette faute. Mais tout n'est pas fini pour autant...

        1. A la premiere tentative en ecriture sur la page-2, un nouveau
           "page-fault" a lieu.
        2. Comme la page appartient au process qui realise l'acces, il
           marque "page-2" comme "read-write" & zone-2 comme "sale" [1]
        3. kswapd -- le thread kernel en charge de la gestion de la swap
           -- marque zone-2 comme propre & disponible pour un nouveau
           stockage de page "page-out".


[1] Au passage, si plusieurs process utilisaient cette page, il en fait
une copie qui reste "read-only" pour les autres process. C'est le
mechanism du COW (Copy on Write).

Commentaires:

        * kswapd est un thread kernel de faible priorite.  On peut le
          comparer au ramasse-miettes (garbage collector)d'une machine
          virtuelle Java.
        * Si le systeme est sous forte charge, kswapd a peu de temps
          pour mettre a jour la liste de pages disponibles.
        * On voit bien qu'un systeme sous forte charge va deriver tres
          vite vers une disponibilite swap nulle... et donc un panic
          ineluctable.


La regle "2x" re-entre en jeu quand moins de la quantite de memoire
physique est dispo en swap: la priorite de kswapd est alors augmentee
pour re-entrer en zone "sure". "2x" est alors la borne-sup qui permet de
revenir en zone sure.

> En fait, le swap n'etait pas une copie
> conforme de ta memoire vive supplementaire. Ce qui etait utilisee en RAM
> est reserve dans le swap pour un dump de survie.


Ceci est vrai pour les segments de code -- la zone de "swap" des
segments de code etant le fichier executable lui-meme[2] -- mais faux
pour les segments de donnees.

Ne pas confondre non plus zone de dump (utilisee pour generer une image
du systeme en case de crash kernel) & zone de swap. Configurer un
peripherique simultanement comme zone de swap & de dump est une
possibilite de configuration, mais certainement pas une obligation...

[2] d'ou le "text-file busy" quand on cherche a modifier le fichier
executable d'un process en cours d'execution sur HP-UX.

> Raison principale pour
> laquelle la regle des "2XRAM" a ete emise et qui reste valide encore
> pour certains. Par exemple HP-UX t'oblige a avoir 2xRAM comme espace de
> swap.


Non. Le noyau HP-UX ne t'y oblige pas. Mais les outils de
configuration forcent l'application de cette regle "hygienique" afin
d'eviter de mettre en peril la survie du systeme.

> Cette regle a ete aussi utilisee pour Linux parce qu'a l'epoque, la
> memoire disponible des stations etaient sous dimensionnees ; des applis,
> et particulierement X sont gourmands en memoire, et les stations
> pouvaient etre multi-utilisateurs. Donc 8 ou meme 32 (voir 64Mo aussi)
> etaient largement limite. Le swap etait alors utilisee pour etendre la
> capacite de la memoire tout en autorisant une fragmentation (qui croit
> avec l'espace swap) a peu pres potable.
>
> D'ailleurs, "on" dit souvent qu'un systeme normal ne swap pas. Dans le
> cas contraire, il est sous-dimensionne. Mais la memoire coute
> chere (ou coutait ?) ...


Pas exactement. Un systeme est sous-dimmensionne quand il "s'arrete"
pour swapper. Autrement dit quand l'espace disponible devient
suffisament petit pour rendre l'execution du systeme hasardeuse. Le
swapping (ou paging) "leger" -- autrement dit de basse prioriter, sans
effet sur l'interactivite du systeme -- en operation est une situation
tout a fait normale.

A+
--
Francois-Xavier 'FiX' KOWALSKI