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