Maison >Tutoriel système >Linux >Pourquoi la taille de page par défaut du système Linux est de 4 Ko
Comme nous le savons tous, Linux gère la mémoire en unités de pages. Qu'il s'agisse de charger des données du disque dans la mémoire ou d'écrire des données de la mémoire sur le disque, le système d'exploitation fonctionnera en unités de pages, ce qui signifie également que si nous n'écrivons qu'un octet de données sur le disque, le système d'exploitation doit également vider toutes les données de la page entière sur le disque.
Il convient de noter que sous Linux, nous pouvons utiliser soit des pages mémoire de taille normale pour les opérations, soit des pages mémoire énormes (Huge Page). Bien que la taille par défaut des pages mémoire sur la plupart des processeurs soit de 4 Ko, certains processeurs utiliseront 8 Ko, 16 Ko). , ou 64 Ko comme taille de page par défaut. En plus des tailles de page mémoire normales, différents processeurs prennent en charge différentes tailles de page énormes. Par exemple, sur un processeur x86, nous pouvons utiliser des pages mémoire d’une taille de 2 Mo.
Les pages mémoire de 4 Ko sont devenues une relique historique, cette taille de page a été largement adoptée à partir des années 1980 et reste encore aujourd'hui. Bien que le matériel d'aujourd'hui soit plus riche que par le passé, nous sommes toujours coincés avec la taille de page mémoire de 4 Ko transmise par le passé. Normalement, nous pouvons voir clairement les spécifications du module de mémoire lors de l'installation de la mémoire, comme le montre l'image ci-dessous :
Figure 1 – Mémoire à accès aléatoire
Aujourd'hui, une taille de page mémoire de 4 Ko n'est peut-être pas le meilleur choix, 8 Ko ou 16 Ko peuvent être un meilleur choix, mais il s'agit d'un compromis fait dans le passé dans certains scénarios. Dans cet article, nous ne devrions pas être trop obsédés par le nombre 4 Ko. Nous devrions accorder plus d'attention aux différents facteurs qui déterminent ce résultat, afin que lorsque nous rencontrons des scénarios similaires, nous puissions considérer le meilleur choix sous ces aspects. L'article présentera les deux facteurs suivants qui affectent la taille de la page mémoire :
Une taille de page trop petite entraînera des entrées de table de pages plus grandes, ce qui augmentera la vitesse de recherche et une surcharge supplémentaire du TLB (Tampon de recherche de traduction) lors de l'adressage ;
Une taille de page excessive gaspillera de l'espace mémoire, provoquera une fragmentation de la mémoire et réduira l'utilisation de la mémoire ;Au siècle dernier, les deux facteurs ci-dessus ont été pleinement pris en compte lors de la conception de la taille de la page mémoire, et finalement une page mémoire de 4 Ko a été sélectionnée comme taille de page la plus courante du système d'exploitation. Ensuite, nous présenterons en détail leur impact sur les performances. du système d’exploitation.
Afin de stocker les données mappées de la mémoire virtuelle de 128 TiB dans le système d'exploitation 64 bits, Linux a introduit une table de pages à quatre couches pour faciliter la traduction des adresses virtuelles dans la version 2.6.10, et une structure de table de pages à cinq couches a été introduite. dans la version 4.11. À l'avenir, davantage de couches de structures de tables de pages pourraient également être introduites pour prendre en charge les adresses virtuelles 64 bits.
Figure 2 – Structure de table de pages à quatre couchesDans la structure de table de pages à quatre niveaux, comme indiqué ci-dessus, le système d'exploitation utilisera les 12 bits les plus bas comme décalage de page, et les 36 bits restants seront divisés en quatre groupes pour représenter l'index du niveau actuel dans le niveau précédent. .Toutes les adresses virtuelles peuvent utiliser la table de pages multicouche mentionnée ci-dessus pour trouver l'adresse physique correspondante.
Étant donné que la taille de l'espace d'adressage virtuel du système d'exploitation est fixe, l'ensemble de l'espace d'adressage virtuel est divisé uniformément en N pages mémoire de même taille, de sorte que la taille de la page mémoire déterminera en fin de compte la structure hiérarchique de la table des pages. Plus précisément, plus la taille de la page virtuelle est petite, plus il y a d'entrées de table de pages et de pages virtuelles dans un seul processus.
PagesCount=VirtualMemory ÷ PageSizeÉtant donné que la taille actuelle de la page virtuelle est de 4096 octets, les 12 bits à la fin de l'adresse virtuelle peuvent représenter l'adresse dans la page virtuelle. Si la taille de la page virtuelle est réduite à 512 octets, alors la page originale à quatre niveaux. structure de table ou page à cinq niveaux La structure de la table deviendra cinq ou six couches, ce qui augmentera non seulement la surcharge supplémentaire d'accès à la mémoire, mais augmentera également la taille de la mémoire occupée par les entrées de la table de pages dans chaque processus.
Étant donné que le dispositif de mappage de mémoire fonctionne au niveau de la page mémoire, le système d'exploitation considère que la plus petite unité d'allocation de mémoire est la page virtuelle. Même si le programme utilisateur ne demande que 1 octet de mémoire, le système d'exploitation demandera une page virtuelle, comme le montre la figure ci-dessous. Si la taille de la page mémoire est de 24 Ko, la demande de 1 octet de mémoire sera appliquée. gaspiller ~99,9939% de l'espace.
Figure 3 – Fragmentation de la grande mémoire
À mesure que la taille des pages mémoire augmente, la fragmentation de la mémoire deviendra de plus en plus grave. Les petites pages mémoire réduiront la fragmentation de la mémoire dans l'espace mémoire et amélioreront l'utilisation de la mémoire. Au siècle dernier, les ressources mémoire n'étaient pas aussi abondantes qu'aujourd'hui. Dans la plupart des cas, la mémoire n'est pas une ressource qui limite l'exécution des programmes. La plupart des services en ligne nécessitent plus de processeurs, pas plus de mémoire. Cependant, la mémoire était en réalité une ressource rare au siècle dernier, donc améliorer l'utilisation de ressources rares est quelque chose que nous devons considérer :
Figure 4 – Prix de la mémoire
Les clés USB dans les années 1980 et 1990 ne faisaient que 512 Ko ou 2 Mo, et le prix était ridiculement élevé. Cependant, la mémoire de plusieurs Go est très courante aujourd'hui, donc même si l'utilisation de la mémoire est toujours très importante, le prix de la mémoire a considérablement baissé aujourd'hui. , la mémoire fragmentée n’est plus un problème clé à résoudre.
En plus de l'utilisation de la mémoire, des pages de mémoire plus grandes augmenteront également la surcharge supplémentaire de copie de mémoire. En raison du mécanisme de copie sur écriture sous Linux, lorsque plusieurs processus partagent la même mémoire, lorsque l'un des processus change, la mémoire virtuelle partagée sera partagée. déclencher la copie des pages mémoire À ce stade, plus la page mémoire du système d'exploitation est petite, plus la surcharge supplémentaire causée par la copie sur écriture est faible.
Résumé
Comme nous l'avons mentionné ci-dessus, une page de mémoire de 4 Ko est le paramètre par défaut décidé au siècle dernier, du point de vue actuel, c'est probablement un mauvais choix. Des architectures telles que arm64 et ia64 peuvent déjà prendre en charge 8 Ko, des pages de mémoire de 16 Ko et d'autres tailles. le prix de la mémoire devient de plus en plus bas et la mémoire système devient de plus en plus grande, une mémoire plus grande peut être un meilleur choix pour le système d'exploitation. Passons en revue les deux décisions concernant les éléments de taille de page :
.Comment la taille des blocs est-elle déterminée sous Linux ? Quelles sont les tailles courantes ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!