web-dev-qa-db-fra.com

comment la taille de la page est-elle déterminée dans l'espace d'adressage virtuel?

Linux utilise un système de mémoire virtuelle où toutes les adresses sont des adresses virtuelles et non des adresses physiques. Ces adresses virtuelles sont converties en adresses physiques par le processeur.

Pour faciliter cette traduction, la mémoire virtuelle et physique est divisée en pages. Chacune de ces pages porte un numéro unique; le numéro du cadre de la page.

Certaines tailles de page peuvent être de 2 Ko, 4 Ko, etc. Mais comment ce numéro de taille de page est-il déterminé? Est-il influencé par la taille de l'architecture? Par exemple, un bus 32 bits aura un espace d'adressage de 4 Go.

44
JohnMerlino

Vous pouvez connaître la taille de page par défaut d'un système en interrogeant sa configuration via la commande getconf:

$ getconf PAGE_SIZE
4096

ou

$ getconf PAGESIZE
4096

REMARQUE: Les unités ci-dessus sont généralement en octets, donc le 4096 équivaut à 4096 octets ou 4 Ko.

Ceci est câblé dans la source du noyau Linux ici:

Exemple

$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */

#define PAGE_SHIFT  12
#ifdef __Assembly__
#define PAGE_SIZE   (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE   (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK   (~(PAGE_SIZE-1))

Comment le changement vous donne-t-il 4096?

Lorsque vous décalez des bits, vous effectuez une multiplication binaire par 2. Donc, en fait, un décalage des bits vers la gauche (1 << PAGE_SHIFT) fait la multiplication de 2 ^ 12 = 4096.

$ echo "2^12" | bc
4096
58
slm

Le matériel (en particulier, le MMU , qui fait partie du processeur) détermine les tailles de page possibles. Il n'y a aucune relation avec la taille du registre du processeur et seulement une relation indirecte avec la taille de l'espace d'adressage (en ce que le MMU détermine les deux).

Presque toutes les architectures prennent en charge une taille de page de 4 Ko. Certaines architectures prennent en charge des pages plus grandes (et certaines prennent également en charge des pages plus petites), mais 4 Ko sont une valeur par défaut très répandue.

Linux prend en charge deux tailles de page:

  • Pages de taille normale, qui je crois sont de 4 Ko par défaut sur toutes les architectures, bien que certaines architectures autorisent d'autres valeurs, par exemple 16 Ko sur ARM64 ou 8 Ko, 16 Ko ou 64 Ko sur IA64 . Ceux-ci correspondent au niveau le plus profond de descripteurs sur le MMU (ce que Linux appelle PTE ).
  • Pages énormes , si compilé en (CONFIG_HUGETLB_PAGE est nécessaire et CONFIG_HUGETLBFS également pour la plupart des utilisations). Cela correspond au deuxième niveau le plus profond des descripteurs MMU (ce que Linux appelle PMD) (ou du moins il le fait généralement, je ne sais pas si cela s'applique à toutes les architectures).

La taille de la page est un compromis entre l'utilisation de la mémoire, l'utilisation de la mémoire et la vitesse.

  • Une taille de page plus grande signifie plus de gaspillage lorsqu'une page est partiellement utilisée, de sorte que le système manque de mémoire plus tôt.
  • Un niveau de descripteur plus profond MMU signifie plus de mémoire du noyau pour les tables de pages.
  • Un niveau de descripteur plus profond MMU signifie plus de temps consacré à la traversée de la table des pages.

Les gains de pages de plus grande taille sont minimes pour la plupart des applications, alors que le coût est substantiel. C'est pourquoi la plupart des systèmes n'utilisent que des pages de taille normale.

Vous pouvez interroger la taille de page (normale) sur votre système avec l'utilitaire getconf ou la fonction C sysconf .

$ getconf PAGE_SIZE
4096

tiliser des pages énormes nécessite le montage des fichiers hugetlbfs et mmapping.

La taille de la page dépend principalement de l'architecture du processeur. Sur x86, depuis l'époque du processeur 386 qui a introduit le mode protégé, la taille de la page a été de 4 Ko.

En mode x64, il peut également y avoir d'énormes pages de 2 Mo. Cependant, leur utilisation est un peu compliquée.

Vous pouvez trouver plus d'informations sur la taille de la page dans article Wikipedia

0
Tero Kilkanen

Le processeur détermine les tailles de page disponibles. Dans la plupart des cas, la taille de page implémentée par le matériel sur les processeurs x86 et x86_64 est de 4 Ko. Cependant, le système d'exploitation peut allouer plus d'une page à la fois s'il le souhaite, et ainsi implémenter efficacement des pages de 8 Ko, 16 Ko ou 32 Ko dans le logiciel.

Les processeurs x86 et x86_64 peuvent respectivement également mélanger des pages de 4 Mo et 2 Mo avec les pages standard de 4 Ko. Si cette capacité est utilisée, elle serait principalement utilisée pour allouer de l'espace au noyau.

0
Leslie