Re: Nettoyer le swap ?
On Sat, 2003-01-25 at 10:22, François Boisson wrote:
> On 25 Jan 2003 03:01:08 +0100
> Peix Fabrice <fabrice.peix@sophia.inria.fr> wrote:
>
> > On Fri, 2003-01-24 at 14:09, François Boisson wrote:
> > > On Fri, 24 Jan 2003 09:59:05 +0100
> > > Emmanuel.Dubois@linedata.com wrote:
> > >
> > > > Salut la liste.
> > > >
> > > > En démarrant mon système (sarge, noyau 2.4.18, enlightement, ni
> > > > gnome, ni kde), un
> ...
> > > exemple utilisées seulement à l'initialisation restent sur le swap. Il
> > > faut se méfier des interprétations de l'occupation mémoire,
> > > rapidement, toute la mémoire est utilisée mais une partie souvent
> > > importante sert en fait de cache pour les entrées/sorties. Bref, faire
> > > confiance au noyau sur ce point et penser que ce système de mémoire
> > > virtuelle, source de polémique d'ailleurs pour le noyau 2.4, commence
> > > à être sérieusement au point.
> > Plus precisement le noyau cache aussi le swap.
>
> Je ne comprends pas ce que cela peut vouloir dire: le swap est constitué
> de plages mémoires provisoirement écrites sur le disque afin de libérer de
> la RAM, cacher le swap signifierait
>
> 1) conserver en mémoire une image disque d'une plage mémoire que l'on
> veut récupérer la place: démarche idiote...
>
> ou bien
>
> 2) Le mécanisme du swap prévoirait systématiquement de mettre sur disque
> une plage mémoire où il n'a a pas eu d'accès depuis un certain temps (ce
> n'est pas le cas à mon avis mais bon), cacher le swap signifierait dans ce
> cas conserver qd même cette plage tant qu'il y a de la place. Démarche
> compliquée...
>
> Peux tu m'expliquer?
>
En fait lorsque le noyau decide de swapper une page si la page est
partage par plusieurs processus elle est mise dans le swap_cache.
Ceci est du au fait que cela serait trop couteux de charger l'ensemble
des descripteurs memoire des processus qui partagent cette page.
Il semblerait que cela pourrait changer dans le noyau 2.5 ou en patchant
le 2.4 (L'idee est de chainer les descripteur de page)
> > > Par contre, j'aimerai savoir comment le noyau procède en cas de
> > > grosse demande d'un seul coup: Gèle-t-il des processus et bascule
> > > l'ensemble sur Swap? et bien sûr, il reste la question sempiternelle:
> > Les pages ne sont pas alloue a la demande mais lorsque l'on ecrit
> > dedans.
>
> Oui, c'est ce que j'entendais par "demande" mais l'écriture n'est pas
> obligatoire: Lorsqu'on fait un malloc, la mémoire est systématiquement
> initialisée à 0 (voir source du noyau, c'est pour éviter de pouvoir lire
> indirectement le contenu de la mémoire vive), donc si on fait
>
> tab = (char *) malloc(10000000);
> c = tab[3141592];
>
> la simple consultation de la plage mémoire demandée commence par une
> initialisation à 0 et donc par une écriture par le noyau; la page est crée
> bien qu'il n'y ait pas eu d'écriture à proprement parler.
>
Il me semblait que cela n'etait pas fait par defaut (sans patcher le
noyau). la norme POSIX n'impose pas que les zones alloue soit mises a
zero.
> > > pourquoi le swap doit-il faite deux fois la taille de la mémoire vive?
> > > (beaucoup de réponses mais aucune claires, il semble effectivement que
> > > en cas de grosse demande, le swap soit sollicité très brusquement et
> > > que ça bloque pour un swap trop petit (c'est le cas chez moi) mais
> > > c'est juste une constatation).
>
> Francois Boisson
--
Peix Fabrice <fabrice.peix@sophia.inria.fr>
Reply to: