GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi mon système n'affiche-t-il que 3,2 Go de RAM alors que j'ai définitivement 4,0 Go

Un espace d'adressage de 32 bits signifie que vous disposez d'un espace pour 4 Go d'adresses. Idéalement, le noyau aime pouvoir mapper toute la mémoire physique, toute la mémoire de la tâche en cours et toute sa propre mémoire. Si la mémoire physique occupe à elle seule tous les 4 Go disponibles, cela ne fonctionnera pas. Ainsi, la mémoire physique est divisée en mémoire basse, qui est mappée en permanence, et en mémoire haute, qui doit être mappée lors de son utilisation. À moins que vous n'exécutiez un noyau corrigé, sur l'architecture ix86, 128 Mo d'espace d'adressage sont consacrés au code du noyau et aux structures de données, et 896 Mo sont consacrés au mappage de la mémoire physique (pour un total de 1 Go).

Lecture de fond sur les complexités de la gestion de la mémoire lorsque votre espace d'adressage n'est pas confortablement plus grand que votre mémoire totale :

  • Mémoire élevée sur le wiki du gestionnaire de mémoire Linux
  • Mémoire élevée dans le noyau Linux sur Kernel Trap
  • Chapitre sur le mappage de la mémoire dans LDD3

Extraits de vos journaux de noyau :

BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
BIOS-e820: 00000000cdce0000 - 00000000cdce3000 (ACPI NVS)
BIOS-e820: 00000000cdce3000 - 00000000cdcf0000 (ACPI data)
BIOS-e820: 00000000cdcf0000 - 00000000cdd00000 (reserved)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
2404MB HIGHMEM available.
887MB LOWMEM available.
Zone PFN ranges:
DMA      0x00000000 -> 0x00001000
Normal   0x00001000 -> 0x000377fe
HighMem  0x000377fe -> 0x000cdce0

Ici, vous avez 887 Mo de mémoire faible :le maximum théorique de 896 Mo moins quelques Mo de tampons DMA (zones de mémoire utilisées pour communiquer avec les périphériques matériels).

De votre mémoire physique, 3328 Mo sont mappés à des adresses inférieures à 4 Go et 768 Mo sont mappés à des adresses supérieures à 4 Go (la plage 0x100000000–0x130000000). Vous n'avez pas accès à ces 768 Mo, ce qui explique pourquoi vous n'avez que 3242 Mo disponibles (4096 Mo de RAM moins 768 Mo inaccessibles moins 9 Mo de tampons DMA moins 75 Mo utilisés par le noyau lui-même pour le code et les données). Je ne sais pas pourquoi le BIOS mappe une partie de la RAM au-dessus de la barre des 4 Go, mais en tant que point de données, je poste ceci à partir d'un PC avec 4 Go de RAM qui a également une RAM mappée à 0x100000000–0x130000000.

Le mappage de la mémoire physique au-dessus de 4 Go nécessite l'utilisation de PAE. PAE entraîne une légère surcharge de performances (en particulier, il nécessite de plus grandes structures de données dans le gestionnaire de mémoire), il n'est donc pas systématiquement activé. Le noyau Ubuntu par défaut est compilé sans prise en charge PAE. Obtenez le -generic-pae noyau pour pouvoir accéder jusqu'à 64 Go de RAM.

TL, DR :Linux fonctionne comme prévu. Le firmware n'est pas si utile. Obtenez un noyau compatible PAE.


Linux
  1. Dans `while Ifs=Read..`, Pourquoi Ifs n'a-t-il aucun effet ?

  2. Linux – Le système se bloque lorsqu'il manque de mémoire ?

  3. Pourquoi mon système Linux bégaie-t-il à moins que je ne supprime continuellement les caches ?

  4. Pourquoi la commande free et dmidecode affichent-elles des valeurs différentes pour la RAM ?

  5. Pourquoi MemTotal dans /proc/meminfo change-t-il ?

Pourquoi "ls -all" affiche-t-il l'heure pour certains fichiers mais seulement l'année pour d'autres ?

Pourquoi Shotwell a-t-il inversé les positions X et Y lors de l'utilisation du recadrage ?

Pourquoi yum updateinfo n'affiche-t-il pas toutes les mises à jour ?

Le système se bloque lorsqu'il manque de mémoire

Combien de RAM le noyau utilise-t-il ?

quels tueurs de processus Linux a-t-il?