[gull] (resolu) kernel x86 PAE + PCI Hole = 3Go

Frederic Dumas f.dumas at ellis.siteparc.fr
Mon Aug 19 19:57:07 CEST 2019


Bonjour à tous,

Après quelques recherches, j'arrive à la conclusion que le problème est 
hardware, et n'a pas de solution au niveau du kernel, peu importe qu'il 
soit x86 PAE ou même x64. J'écrivais à tort:

> Je n'ai pas vu dans le BIOS d'option spécifique au contournement de la 
> barrière des 3Go de RAM. Et de toute façon, ça ne serait pas utile sur 
> un OS compatible PAE. Alors, qu'est-ce qui peut provoquer le problème?


C'est le contraire qui est vrai. Pour qu'un kernel x86 PAE puisse 
accéder à la totalité de 4Go de RAM physique et en même temps™ aux 
adresses réservées au même endroit pour les ports d'entrées-sorties des 
périphériques PCI (aka "PCI hole" [1]), il **faut** que le chipset et le 
BIOS de la carte mère translatent sur des adresses situées plus haut, au 
choix:

- soit les adresses de la RAM qui se trouve physiquement entre 3 et 4Go;

- soit les adresses d'entrées/sorties du bus PCI, qui se trouvent elles
   aussi au même endroit, entre 3 et 4Go.

Ce qui au passage risque de provoquer des incompatibilités avec les 
pilotes de périphériques existant.

Autrement, les deux ressources habitant aux mêmes adresses, et 
l'architecture x86 ne faisant pas de différence entre les adresses 
mémoires et les adresses d'entrées/sorties, l'une des deux ressources 
doit nécessairement être sacrifiée. Et c'est le mémoire. L'adressage 
36bits PAE n'y change rien.


Un article facile à lire explique les bases du problème avec quelques 
détails:


> So what actually happens if you go out and buy 4GB of memory for 
> your PC? Well, it's just like the DOS days - there's a hole in your
> memory map for the IO. (Now it's only 25% of the total address space,
> but it's still a big hole.) So the bottom 3GB of your memory will be
> available, but there's an issue with that last 1GB.
> 
> If you're lucky, your PC will be able to do something clever. The 
> usual solution is to make that last gigabyte appear further up in
> the memory map.

[SNIP]

> So your memory's all still available, it just happens not to be 
> contiguous. The first 3GB are present where you'd expect to find
> them, then there's a 1GB hole, reserved for devices, and the 4th GB
> of memory appears in the 5th GB of address space. Since Pentiums can
> address 64GB of physical address space, there's no problem with this
> 32 bit processor addressing stuff that requires 33 bits to reach.
> 
> So if you chose your motherboard wisely/flukily, all 4GB will be 
> available to you. However, if you're unlucky you'll (...) notice
> that only 3GB of the 4GB that you purchased made it into the memory
> map. So that last 1GB is unavailable to you. And don't think you can
> dust off that old copy of QEMM - this isn't memory which is hiding
> somewhere, and which you can coerce the OS into using, like in the
> good old days. Well...the old days. No, this memory is quite simply 
> invisible to the CPU. If your motherboard is in this category, there
> is no physical way the CPU can get access to that memory.

Source :http://www.interact-sw.co.uk/iangblog/2005/08/05/is3gbenough


La carte mère de cette machine appartient à la dernière catégorie 
décrite ci-dessus, son chipset Intel i945G ne fait pas de translation 
d'adresses; sa documentation précise en page 211:


> The (G)MCH does not remap APIC or PCI Express memory space. This 
> means that as the amount of physical memory populated in the system
> reaches 4 GB (2 GB for the 82945GC/82945GZ/82945PL), there will be
> physical memory that exists yet is non- addressable and therefore
> unusable by the system.

Source: https://www.intel.com/Assets/PDF/datasheet/307502.pdf


Tout ça m'a permis de comprendre un truc : l'espace mémoire 
supplémentaire que peut exploiter le noyau Linux x86 PAE, c'est celui se 
situant au-delà des 4 premiers Go, ce n'est pas la totalité de celui se 
trouvant à l'intérieur des 4 premiers Go. Avec une carte mère supportant 
8Go par exemple, le kernel pourrait voir les 3 premiers giga, un trou, 
puis les 4 derniers. Soit 7Go au total.

Le meilleur, c'est que le problème se posera tout pareillement pour 
Linux en 64bits natif !



L'informatique, c'est comme les assurances, il faut lire les clauses en 
petit caractères.





Mots clés, si ce post peut être utile à d'autres: Ubuntu 32bits , linux 
kernel PAE , chipset Intel 82945 i945 , Asrock P4i945GC , 4GB , PCI hole



[1] https://en.wikipedia.org/wiki/PCI_hole

--
Frédéric Dumas
f.dumas at ellis.siteparc.fr



Le 17/08/2019 à 10:00, Frederic Dumas a écrit :
> Au redémarrage toujours, le système ne voit que 3,1Go sur les 4Go 
> installés. Classique problème d'adressage mémoire 32bits, les 
> périphériques du bus PCI utilisant une partie du range disponible.
> 
> Pourtant, c'est bien un noyau avec la fonction PAE qui est installé:
> 
>> $ cat /boot/config-4.15.0-54-generic | grep PAE
>> CONFIG_X86_PAE=y






-------------- next part --------------
A non-text attachment was scrubbed...
Name: PCI hole.png
Type: image/png
Size: 11921 bytes
Desc: not available
URL: <http://forum.linux-gull.ch/pipermail/gull/attachments/20190819/ac291708/attachment.png>


More information about the gull mailing list