• [^] # Re: C'est moi ou ?

    Posté par (site web personnel) . En réponse à la dépêche Debian 8 : Jessie l’écuyère est en selle !. Évalué à 10.

    Non, ce n'est pas KSM qui fait ça. Ce dont on parle, c'est :

    1. le fait que, quand un processus mmap un fichier dans son espace d'adressage, tant que les pages ne sont pas modifiées, elles sont partagées avec tous les autres processus (ce qui fait que le code d'un fichier ELF soit partagé entre tous les processus qui l'utilisent) ;

    2. quand un process fork, il partage les pages mémoire avec son fils (jusqu'à ce que l'un des deux modifie la page ce qui entraîne une duplication de la page ou jusqu'à ce que l'un des process ne fasse un fork).

    Bref, il s'agit d'éviter de dupliquer des pages.

    Ceci est géré est déclenché par :

    1. le code de gestion d'ELF du noyau qui se charge de mapper le linker dynamique (ld.so) en mémoire ;

    2. le code du linker dynamique qui va mmap les autres fichiers ELF en mémoire (avec MAP_PRIVATE).

    KSM est un mécanisme optionnel (en général ce n'est pas utilisé) qui permet de dédupliquer des pages qui sont identiques. Par défaut, il est en général désactivé dans le système (cat /sys/kernel/mm/ksm/run) et, de toute manière, il ne fonctionne que pour les pages qui ont été marquées MADV_MERGEABLE (pas le cas par défaut). Il indexe le contenu des pages physiques et tente de trouver des pages ayant le même contenu : dans ce cas, les pages sont dédupliquées/fusionnées (et les déduplique à nouveau si jamais l'une est modifiée). Ce processus de détection de pages peut consommer pas mal de temps CPU et cause des fautes de pages supplémentaires lorsque les pages dédupliquées sont modifiées.

    Voir mes essais d'utilisation de KSM si ça intéresse quelqu'un.