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
[email protected]



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






_______________________________________________
gull mailing list
[email protected]
https://forum.linux-gull.ch/mailman/listinfo/gull

Répondre à