GNU/Linux >> Tutoriels Linux >  >> Linux

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

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

$ getconf PAGE_SIZE
4096

ou

$ getconf PAGESIZE
4096

REMARQUE : Les unités ci-dessus sont généralement en octets, donc 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 décalage vous donne-t-il 4 096 ?

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

$ echo "2^12" | bc
4096

Le matériel (en particulier, la 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 sens que la 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 quelques-unes prennent également en charge des pages plus petites), mais 4 Ko est une valeur par défaut très répandue.

Linux prend en charge deux tailles de page :

  • Des pages de taille normale, qui, je crois, font 4 Ko par défaut sur toutes les architectures, bien que certaines architectures autorisent d'autres valeurs, par ex. 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 la MMU (ce que Linux appelle PTE).
  • Pages volumineuses, si elles sont compilées 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 c'est généralement le cas, 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 MMU plus profond signifie plus de mémoire noyau pour les tables de pages.
  • Un niveau de descripteur MMU plus profond signifie plus de temps passé à parcourir la table des pages.

Les gains de tailles de page plus grandes 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 le getconf utilitaire ou la fonction C sysconf .

$ getconf PAGE_SIZE
4096

L'utilisation de pages volumineuses nécessite le montage du hugetlbfs système de fichiers et mmap ping ici.


Linux
  1. Comment trier la sortie par taille ?

  2. Combien d'espace d'échange à ajouter pour la base de données Oracle sous Linux

  3. Comment accéder aux adresses physiques depuis l'espace utilisateur sous Linux ?

  4. Comment allouer de la mémoire alignée sur la taille de la page ?

  5. Compilation du noyau Linux, quelle taille est nécessaire ?

Comment trouver une adresse IP sous Linux

Comment augmenter l'espace disque virtuel de la machine virtuelle sur VirtualBox

Comment augmenter la taille du disque de vos machines virtuelles existantes dans VirtualBox

Comment changer l'adresse IP sous Linux

Linux - Comment un espace d'adressage virtuel de processus 64 bits est-il divisé sous Linux ?

Comment augmenter l'espace disque virtuel de la machine virtuelle sur VirtualBox et VMware