Académique Documents
Professionnel Documents
Culture Documents
Le Swapping (va-et-vient)
L'espace d'échange, aussi appelé par son terme anglais swap space ou simplement
swap, est une zone d'un disque dur faisant partie de la mémoire virtuelle1) de
votre ordinateur. Il est utilisé pour décharger la mémoire vive physique (RAM) de
votre ordinateur lorsque celle-ci arrive à saturation. L'espace d'échange, dans
Ubuntu, se trouve généralement sous une forme de partition de disque dur on parle
alors de partition d'échange. Il peut aussi se présenter sous forme de fichier – on
parle alors de fichier d'échange.
Sur Ubuntu dépuis la version 17.04, le swap n'est plus une partition mais un
fichier situé dans /swapfile sauf si une ancienne partition swap est détectée à
l'installation : dans ce cas, celle-ci est intégrée au fichier /etc/fstab et le
fichier /swapfile n'est pas créé. Si une ancienne partition swap existe mais qu'on
ne veut pas l'utiliser, il faut configurer cette partition swap à l'installation :
cliquer sur la partition swap, et choisir ne pas utiliser cette partition, dans le
menu déroulant. Dans ce dernier cas, le fichier /swapfile sera créé .
Le swappiness : il ne gère pas seulement la tendance du noyau à échanger des pages
entre la RAM et le swap, mais surtout l'équilibre entre le cache disque et
l'utilisation de la mémoire par les applications.
Régler le déclenchement du fichier d'échange dès que la mémoire est utilisée à 95%
L'application de cette procédure avec une valeur faible du swappiness n'est pas
conseillée :
• Sur un poste multi-utilisateurs,
• Sur un ordinateur partageant une(des) ressource(s) au sein d'un réseau,
• En cas d'utilisation d'applications demandant d'importantes ressources
mémoire (cf §2.1),
La valeur de 60 définie par les concepteurs du système garantit un fonctionnement
correct quelle que soit votre configuration. La valeur minimale conseillée par
canonical [source ?] est swappiness=10. La valeur de 5 apporte un gain notable en
vélocité, surtout sur les machines peu dotées en RAM. La valeur de zéro provoque le
gel du système quand la RAM est utilisée à 100% et ne suffit plus.
• vm.swappiness=5 déclenche l'utilisation de la swap quand il ne reste plus que
5% de RAM.
• vm.vfs_cache_pressure=50 permet de garder plus de liens vers les fichiers en
mémoire, pour accélérer l’accès aux fichiers.
echo vm.swappiness=5 | sudo tee /etc/sysctl.d/99-swappiness.conf
echo vm.vfs_cache_pressure=50 | sudo tee -a /etc/sysctl.d/99-swappiness.conf
sudo sysctl -p /etc/sysctl.d/99-swappiness.conf
sudo service procps restart
sudo service procps restart
Ensuite désactivez puis réactivez la swap pour que les changements deviennent
actifs :
De plus, chacun de ces espaces peut être utilisé de manière inégale. Pour connaître
les espaces d'échange actuellement activés dans votre système Ubuntu et leur niveau
d'utilisation, utilisez la commande swapon de la façon suivante :
swapon -s
Le terminal vous affiche le résultat de cette commande sous forme de tableau. Ce
tableau retourne les informations suivantes :
Les fichiers d'échange ont quelques avantages par rapport aux partitions d'échange.
Pour commencer, leur ajout ou suppression n'a pas d'impact sur la table des
partitions du disque dur, ce qui limite les possibles pertes de données liées à la
modification à posteriori du système de partitions d'un disque dur. Par conséquent,
il est aisé d'attribuer à la volée plus ou moins d'espace d'échange selon les
besoins, qu'ils soient temporaires ou non. Enfin, même s'ils sont stockés dans un
système de fichiers, les fichiers d'échange sont exploités directement par le noyau
Linux; l'utilisation d'un espace d'échange, sous forme de partition ou de fichier,
devrait être identique quant aux performances.
Pour créer un fichier d'échange :
Depuis un compte d'administrateur, ouvrez un terminal ;
Utilisez fallocate pour réserver un bloc d'espace disque à attribuer à votre espace
d'échange :
sudo fallocate -l <taille du fichier en octets> <nom du fichier>
• Le paramètre -l indique la taille (length) en octets qui doit être réservée
pour l'espace d'échange. fallocate reconnaît aussi quelques suffixes, tels m et g,
pour préciser des tailles en mibi-octets ou gibioctets. Par exemple, pour réserver
512 Mio, indiquez 512m ; pour réservez 1 Gio, indiquer 1g ;
• Le nom du fichier doit contenir le chemin absolu vers l'emplacement de celui-
ci. Sinon, il sera créé dans le répertoire courant ;
• Exemple : pour créer un fichier de 512 Mio nommé file.swap et situé à la
racine d'Ubuntu, on utilisera la commande suivante :
sudo fallocate -l 512m /file.swap
sudo chmod 600 <nom du fichier>
• Encore une fois, <nom du fichier> représente le nom du fichier qui vient
d'être créé, avec son chemin absolu si nécessaire ;
• Par exemple, pour changer les permissions sur le fichier file.swap situé à la
racine d'Ubuntu, on utilisera la commande suivante :
sudo chmod 600 /file.swap
• Par exemple, pour définir un espace d'échange sur le fichier file.swap situé
à la racine d'Ubuntu, on utilisera la commande suivante :
sudo mkswap /file.swap
Les adresses générées par programme ou processeur sont appelées des adresses
virtuelles.
L'espace d’adressage virtuel est divisé en unités appelées pages. Les unités
correspondantes dans la mémoire physique sont appelées cadres de pages (page
frames). Les pages et les cadres de pages sont toujours de même taille.Le
gestionnaire de mémoire virtuelle est un circuit électronique (MMU) qui permet de
réaliser le mécanisme de la mémoire virtuelle, à savoir le translation des adresses
virtuelles en adresses physiques . Le concept de mémoire virtuelle est assez
ancien, il a été implémenté dans les années 1960 et il est toujours très utilisé,
son but est augmenter la taille de la mémoire utilisable, de mettre en place des
mécanismes de protection et de faciliter l’allocation de la mémoire utilisée par un
processus en simplifiant le travail des développeurs. L'origine de cette découverte
est la différenciation entre l'espace d'adressage virtuel et l'espace d'adressage
physique .
Même si les mécanismes mis en jeu rendent de grands services, ils ont un coût en
matière de performance, celle-ci est un enjeu important actuellement ; les
internautes sont très sensibilisés aux temps de réponse. Le paradoxe est le suivant
: Les applications sont de plus en plus complexes et demandeuses de mémoire
toutefois, les utilisateurs sont de plus en plus exigeants en ce qui concerne la
performance.
L'autre défi majeur relevé par la mémoire virtuelle, c'est la protection de la
mémoire. De fait, une étanchéité entre les différents programmes doit être assurée.
Le problème actuel est de garantir cette sécurité face aux différentes attaques
(attaques par relais, par codes arbitraires).
Principe de base : toutes les informations d’un programme ne peuvent être
référencées par le processeur que lorsqu’elles se trouvent en Mémoire centrale.
L’information qui a besoin d’être référencée rapidement doit résider en mémoire
centrale et toutes les autres informations doivent être en mémoire auxiliaire
(mémoire de masse). Il serait trop coûteux en ressource de charger l'intégralité
des programmes exécutés par un ordinateur en mémoire, c'est une des raisons pour
lesquelles le procédé de mémoire virtuelle a été mis au point à la fin des années
1950 . La mémoire physique correspond à la mémoire physiquement installée, c'est-à-
dire principalement à la mémoire vive dynamique, la RAM. Il s'agit d'une zone de
stockage temporaire, une mémoire de travail, dans laquelle sont chargés les données
et les programmes qui seront traitées par le processeur. On utilise également
d'autres dispositifs, tels que les disques durs, les disques SSD comme espace
d'échange (zone de swap). Les mémoires vives (RAM) sont dites volatiles et
possèdent un temps d'accès aux données de quelques dizaines de nanosecondes, et les
mémoires comme celle du disque dur ont des accès plus lents : quelques
millisecondes, on les appelle aussi Mémoire de masse.
L'espace adressable par le processeur se distingue de l'espace réellement
adressable dans la mémoire physique :
L'espace d'adressage virtuel (Virtual address space) est généré par le processeur
au moment de l’exécution des instructions. C'est l'espace accessible, qui dépend
donc du nombre de bits utilisés par le processeur pour coder les adresses. Cet
espace d’adressage est constitué du code, des données, de la pile d’exécution
(stack) ;
L'espace d'adressage physique (Physical address space) correspond aux adresses
chargées réellement en mémoire centrale, physique, pour qu'un programme puisse
s'exécuter.
Un processus pour qu'il puisse s'exécuter doit être chargé en mémoire centrale. Si
plusieurs programmes sont concurrents, il est nécessaire :
Le TLB mémorise les dernières correspondances entre les adresses virtuelles et les
adresses physiques pages, cadres utilisées par un processus.
Cette mémoire cache contient les numéros de page ainsi que l'adresse de la case
contenant la plus récemment accédée. La MMU cherche en premier lieu dans le cache
s'il existe une déjà une correspondance entre la page et l'adresse d’implantation
de la case.
La Pagination
Les données sont organisées dans la mémoire virtuelle sous forme de pages, Dans la
mémoire physique elles sont organisées sous forme de cadres, une page correspond à
un cadre. Donc quand un programme a besoin d'être chargé en mémoire centrale, il
faut donc placer les pages dans n’importe quelle case (ou cadre) disponible. La
taille d'une page est en moyenne de 4Ko. Les adresses des données dans une page
sont constituées d'un couple numéro de page et déplacement à partir du début de
cette page. La MMU permet d'associer une adresse virtuelle à une adresse mémoire
physique16. Elle reçoit en entrée une adresse virtuelle et vérifie qu'elle
correspond bien à une adresse physique si c'est le cas, elle transmet l'information
à la mémoire physique sinon il se produit ce qu'on appelle un défaut de page .
S'il n'existe plus de cases mémoire disponibles en mémoire physique, la mémoire
virtuelle peut combiner ces mécanismes avec le swapping, pour trouver de la
disponibilité mémoire sur le disque .
La MMU a aussi pour rôle de protéger le Système d'exploitation des accès non
autorisés à des zones de la mémoire.
Dans la table des pages, on trouve pour chaque entrée, un bit de validité qui
indique s'il existe bien une page physique correspondant à la page virtuelle
demandée, ainsi que des informations sur les droits d'accès en écriture ou en
exécution, à l'accès autorisé en mode utilisateur ou non.
Le mécanisme de conversion d'adresse s'effectue grâce à la table des pages. Dès
qu'un processus est chargé en mémoire principale sa table de page est chargée
aussi, son rôle est de conserver l'information suivante : les adresses de pages
(numéro de page + numéro de déplacement dans la page) et les adresses de cadres
correspondant à ce même processus, il faut noter qu'on se sert du numéro de page
comme index dans la table des pages .
Si aucune correspondance n'est trouvée (TLB miss), il faut alors se rendre dans la
table de pages pour déterminer l'adresse physique26,13.
• R = Le Bit de Référence
• M = Le Bit de Modification
Le Bit R est positionné à 1 lorsqu'une page est Référencée et 0 lorsque la page
n'est pas référencée. Le bit M est positionné à 1 lorsque la page est Modifiée et 0
lorsqu'elle ne l'est pas.
Quand un défaut de page intervient l'algorithme NRU retire en premier la page non
référencée et non modifiée en premier :
• R=0 et M=0
sinon la page non référencée et modifiée :
• R=0 et M=1
sinon la page référencée et non modifiée :
• R=1 et M=0
sinon il retire la page référencée et modifiée ;
• R=1 et M=1
Dans ce dernier cas la page sera sauvegardée sur disque avant d'être transférée en
mémoire