54 votes

Pourquoi une mémoire vive partiellement pleine provoque-t-elle un décalage ?

Pourquoi une mémoire vive partiellement pleine (disons 80 %) rend l'appareil très lent, même s'il y a de l'espace disponible pour stocker davantage de données ? Ce que j'attends, c'est qu'il continue à fonctionner correctement jusqu'à 99 %.

Je le remarque plus sur le mobile que sur le PC, car la RAM est plus petite. Par exemple, mon mobile a 2 Go de RAM ; lorsque j'ai moins de 1 Go de RAM libre, il est très lent ! Pourquoi cela se produit-il, alors qu'il lui reste environ 1 Go à utiliser ?

71voto

LMiller7 Points 2365

Il y a beaucoup de choses à faire ici, mais je vais essayer de l'expliquer aussi simplement que possible et d'une manière applicable à presque tous les systèmes d'exploitation.

Il y a deux principes de base ici :

  1. La somme totale de tout ce qui doit être en RAM et des choses qui bénéficieraient d'être en RAM est presque toujours supérieure à la taille de la RAM. Les éléments qui gagneraient à être en RAM sont les ensembles de travail des processus et la liste de veille. Cette dernière contient des données et du code qui ont été utilisés par le passé mais qui sont devenus inactifs depuis. Une grande partie de ces éléments sera réutilisée, parfois très bientôt, et il est donc utile de les conserver en RAM. Cette mémoire agit comme une sorte de cache, mais elle n'est pas vraiment essentielle et fait partie de la catégorie de la mémoire disponible. Comme la mémoire libre, elle peut être rapidement mise à la disposition de tout programme qui en a besoin. Dans l'intérêt des performances, la mémoire de secours doit être importante.

  2. La fréquence d'utilisation des blocs de mémoire est loin d'être aléatoire mais peut être prédite avec une grande précision. La mémoire est divisée en blocs, souvent de 4K octets. Certains blocs sont accédés plusieurs fois par seconde alors que d'autres n'ont pas été accédés depuis plusieurs minutes, heures, jours, voire semaines si le système est resté en place assez longtemps. Il existe une large gamme d'utilisation entre ces deux extrêmes. Le gestionnaire de mémoire sait quels blocs ont été accédés récemment et ceux qui ne l'ont pas été. On peut raisonnablement supposer qu'un bloc de mémoire auquel on a accédé récemment sera de nouveau nécessaire sous peu. La mémoire qui n'a pas été accédée récemment ne sera probablement pas utilisée de sitôt. Une longue expérience a prouvé la validité de ce principe.

Le gestionnaire de mémoire tire parti du second principe pour atténuer largement les conséquences indésirables du premier. Pour ce faire, il fait un travail d'équilibriste en gardant les données récemment accédées en RAM tout en gardant les données rarement utilisées dans les fichiers originaux ou dans le pagefile.

Lorsque la RAM est abondante, cet exercice d'équilibrage est facile. La plupart des données utilisées moins récemment peuvent être conservées dans la RAM. C'est une bonne situation.

Les choses se compliquent lorsque la charge de travail augmente. La somme totale des données et du code utilisés est plus importante, mais la taille de la RAM reste la même. Cela signifie qu'un sous-ensemble plus petit de ces données peut être conservé en RAM. Certaines des données les moins récemment utilisées ne peuvent plus être conservées en RAM mais doivent être laissées sur le disque. Le gestionnaire de mémoire fait tout son possible pour maintenir un bon équilibre entre la mémoire utilisée et la mémoire disponible. Mais à mesure que la charge de travail augmente, le gestionnaire de mémoire sera contraint de donner plus de mémoire disponible aux processus en cours d'exécution. Ce n'est pas une bonne situation mais le gestionnaire de mémoire n'a pas le choix.

Le problème est que le déplacement des données vers et depuis la RAM pendant l'exécution des programmes prend du temps. Lorsque la RAM est abondante, cela ne se produit pas très souvent et ne se remarque même pas. Mais lorsque l'utilisation de la RAM atteint des niveaux élevés, cela se produit beaucoup plus souvent. La situation peut devenir si grave que l'on passe plus de temps à déplacer des données vers et depuis la RAM qu'à l'utiliser réellement. C'est ce qu'on appelle le thrashing, un phénomène que le gestionnaire de mémoire s'efforce d'éviter, mais qui est souvent inévitable lorsque la charge de travail est élevée.

Le gestionnaire de mémoire est à vos côtés, il fait toujours de son mieux pour maintenir des performances optimales, même dans des conditions défavorables. Mais lorsque la charge de travail est importante et que la mémoire disponible vient à manquer, il doit faire de mauvaises choses afin de continuer à fonctionner. C'est en fait la chose la plus importante. La priorité est d'abord de faire fonctionner les choses, puis de les rendre aussi rapides que possible.

28voto

Tyler Griffiths Points 11

Tous les systèmes d'exploitation modernes utilisent de la mémoire inutilisée pour mettre en cache des données afin de pouvoir y accéder à partir de la RAM rapide au lieu du stockage plus lent. Ils considèrent généralement qu'il s'agit de mémoire libre, puisque les applications peuvent vider le cache et l'utiliser si nécessaire, mais elle est toujours utilisée. Moins il y en a, moins les données peuvent être mises en cache, et plus l'ordinateur est lent.

4voto

Will Points 137

Cette réponse a été en grande partie réécrite pour réorganiser la structure et rendre le message plus clair. Je l'ai également ouverte en tant que réponse wiki communautaire ; n'hésitez pas à la modifier.

La pagination est un schéma de gestion de la mémoire par lequel des blocs de mémoire de taille fixe se voient attribuer des processus. Lorsque l'utilisation de la mémoire atteint un niveau élevé (c'est-à-dire 80 % de sa capacité), la pagination commence à s'étendre de la RAM à la vRAM (RAM virtuelle).

La vRAM est située dans le stockage du système, généralement dans un disque dur, ou dans d'autres emplacements de stockage de taille importante.

Les processus se voient attribuer une partie de votre disque dur pour fonctionner comme mémoire et traiteront leur section comme de la RAM. Il s'agit d'un processus parfaitement normal. Toutefois, lorsque le temps passé à transférer des données vers et depuis la vRAM augmente, les performances du système diminuent.

Alors que la RAM dédiée est accessible directement par la carte mère depuis l'unité centrale, ce qui offre une connexion rapide, la RAM virtuelle doit traverser un câblage entre la carte et l'emplacement de la vRAM.

Cela n'entraîne toutefois qu'un léger impact sur les performances. Lorsque le taux de pagination vers la vRAM augmente de façon drastique (lorsque la RAM dédiée approche de sa capacité), il se produit un thrashing.

Le thrashing est la pratique consistant à transférer rapidement des pages de mémoire dans votre mémoire virtuelle. Cette pratique a un impact considérable sur les performances, car il faut passer plus de temps à récupérer et à adresser les données.

Disons que vous voulez écrire un nombre de 30 chiffres. Vous pouvez soit vous asseoir à côté de votre écran avec votre bloc-notes et l'écrire (en utilisant la mémoire dédiée), soit vous souvenir de morceaux de 5, courir dans la pièce voisine et l'écrire sur votre bloc-notes (en utilisant la mémoire virtuelle). Les deux font le travail, mais lequel sera le plus rapide ?

Pour en savoir plus sur le bruit ici !

Un grand merci aux personnes qui ont contribué à la rédaction de cette réponse, notamment Daniel B , xénoïde y Jon Bentley .

1voto

Gilles Lesire Points 121

C'est parce que le système d'exploitation doit effectuer de nombreuses opérations de pagination (chargement de parties de programmes actifs) et d'échange (déplacement de données de la RAM vers le disque dur et vice versa) pour assurer le fonctionnement de votre logiciel. Lorsque de nouvelles pages doivent être chargées et qu'elles nécessitent plus d'espace que les 20 % disponibles, le système d'exploitation doit échanger les pages existantes de la RAM qu'il considère comme moins susceptibles d'être utilisées prochainement. En particulier au démarrage d'autres programmes. L'échange de pages prend beaucoup de temps et ralentit considérablement les performances de votre PC car vous travaillez maintenant à la vitesse du disque dur et non de la RAM.

Cela aide un peu sur un disque dur pour créer une partition spéciale sur votre disque dur et l'assigner comme espace dédié au "swap" (ne l'utilisez pas pour les "vrais" fichiers) afin que le swapping soit moins affecté par la fragmentation du disque dur.

1voto

Machavity Points 611

Rappelez-vous, les disques durs sont un ordre de grandeur plus lent que la RAM, et la RAM elle-même n'est pas si rapide que ça (dans son architecture globale). Dans l'ordre de la vitesse d'accès (où chaque échelon est un ordre de grandeur plus lent que celui qui le précède) vous avez

  1. Registres du processeur - En termes pratiques, les registres sont disponibles dans un cycle du processeur . Si l'on considère que les processeurs effectuent des milliards de cycles par seconde (3 GHz = 3 milliards de cycles par seconde), c'est une vitesse folle.
  2. Cache du processeur - Cela dépend du niveau, mais ils sont toujours assez rapides (3-5 cycles de disponibilité pour le cache L1).
  3. Mémoire vive (RAM) - La partie aléatoire signifie que vous ne savez pas dans quel état il se trouve lorsque vous y accédez. Pensez à un livreur de colis qui doit s'arrêter, prendre le colis, marcher jusqu'à la porte, sonner à la porte et attendre une réponse. Peut-être n'attendez-vous pas du tout, ou peut-être attendez-vous une minute ou deux que Mme Smith se dirige vers la porte de l'arrière de la maison. En termes pratiques, nous parlons de 14 à 27 cycles (en fonction de l'état de la RAM lorsque nous y avons accédé).
  4. Disque dur - Il y a un processus physique en cours et pendant qu'il se déroule aussi vite que possible, vous attendez que les têtes bougent et que les pistes se déplacent sous ces têtes. En termes pratiques, un disque dur de 7 200 tours/minute peut effectuer une révolution en 4 ms environ. ou quelque part autour de 750 000 cycles pour un processeur de 3 GHz . C'est lent.

Le gestionnaire de mémoire virtuelle est un joueur. Il parie que vous n'avez pas besoin de toute votre RAM tout le temps, donc il fait une supposition éclairée et lance les dés que votre programme de document (qui a été en arrière-plan pendant les 10 dernières minutes pendant que vous lisez ceci) n'est pas vraiment important et il le pousse vers le disque dur.

Mais ensuite, vous cliquez à nouveau sur le document ! Maintenant la VMM doit recharger toutes ces données depuis le disque dur. Pire, si vous êtes à court de RAM, elle doit maintenant pousser d'autres données (plus de jeu) vers le disque dur pour libérer de l'espace utilisable. Linux aime vivre sur le fil du rasoir ici. Il remplira la grande majorité de la RAM avec des données fréquemment utilisées (idéal pour les serveurs avec peu de processus).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X