Je viens de tomber sur une curiosité que je ne m'explique pas :
Je travaille sur une station qui a 2 Go de RAM. Aucn doute, tout est bien
reconnu et utilisé. Par exemple, 'top' me l'indique correctement. De toute
façon, vu les applications que je fais tourner et par comparaison avec
d'autres machines, j'ai bien mes 2 Go de RAM.
Là où ça devient amusant, c'est ici :
$ ls -lh /proc/kcore
-r-------- 1 root root 897M 2004-12-03 17:37 /proc/kcore
(même résultat que je sois root ou non, mais ça, c'est normal)
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la
taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM,
je n'en ai que 510 dans kcore), mais là, se tromper du simple au double,
c'est quand même étonnant.
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Nicolas George
Remi Moyen wrote in message :
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM, je n'en ai que 510 dans kcore), mais là, se tromper du simple au double, c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de l'accès habituel (ça demande une option particulière à la compilation ; d'ailleurs, quand cette option est activée, l'accès habituel ne concerne plus que 750 Mo).
Remi Moyen wrote in message
<Pine.LNX.4.61.0412031737330.9265@pbeanf.raft.vacy-anapl.se>:
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la
taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM,
je n'en ai que 510 dans kcore), mais là, se tromper du simple au double,
c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de
l'accès habituel (ça demande une option particulière à la compilation ;
d'ailleurs, quand cette option est activée, l'accès habituel ne concerne
plus que 750 Mo).
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM, je n'en ai que 510 dans kcore), mais là, se tromper du simple au double, c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de l'accès habituel (ça demande une option particulière à la compilation ; d'ailleurs, quand cette option est activée, l'accès habituel ne concerne plus que 750 Mo).
no_spam
On Fri, 03 Dec 2004 19:51:50 +0000, Nicolas George wrote:
Remi Moyen wrote in message :
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM, je n'en ai que 510 dans kcore), mais là, se tromper du simple au double, c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de l'accès habituel (ça demande une option particulière à la compilation ; d'ailleurs, quand cette option est activée, l'accès habituel ne concerne plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez parlant...). Attention, cette option touche tout le kernel, il faut donc réinstaller le kernel et tous les modules.
On Fri, 03 Dec 2004 19:51:50 +0000, Nicolas George wrote:
Remi Moyen wrote in message
<Pine.LNX.4.61.0412031737330.9265@pbeanf.raft.vacy-anapl.se>:
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la
taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM,
je n'en ai que 510 dans kcore), mais là, se tromper du simple au double,
c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de
l'accès habituel (ça demande une option particulière à la compilation ;
d'ailleurs, quand cette option est activée, l'accès habituel ne concerne
plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez parlant...).
Attention, cette option touche tout le kernel, il faut donc réinstaller
le kernel et tous les modules.
On Fri, 03 Dec 2004 19:51:50 +0000, Nicolas George wrote:
Remi Moyen wrote in message :
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM, je n'en ai que 510 dans kcore), mais là, se tromper du simple au double, c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de l'accès habituel (ça demande une option particulière à la compilation ; d'ailleurs, quand cette option est activée, l'accès habituel ne concerne plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez parlant...). Attention, cette option touche tout le kernel, il faut donc réinstaller le kernel et tous les modules.
Remi Moyen
On Sat, 4 Dec 2004, no_spam wrote:
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM, je n'en ai que 510 dans kcore), mais là, se tromper du simple au double, c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de l'accès habituel (ça demande une option particulière à la compilation ; d'ailleurs, quand cette option est activée, l'accès habituel ne concerne plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez parlant...). Attention, cette option touche tout le kernel, il faut donc réinstaller le kernel et tous les modules.
Ben, euh... Je ne sais pas trop si elle y est où pas, cette option, vu que j'utilise un noyau standard Debian, et pas un que j'ai recompilé moi-même (et j'avoue ne jamais avoir eu l'idée d'aller fouiller les options...).
Ceci dit, si cette option n'était pas activée, d'après ce que je sais, *aucun* programme ne devrait voir plus de 1 Go de RAM, non ? Donc, par exemple, top ne devrait m'indiquer que 1 Go et pas 2, etc.
Parce que sinon, ça veut dire que HIGHMEM ne contrôle que la taille de kcore et pas de la mémoire réellement accessible, ce qui serait un peu naze :-) -- Rémi Moyen "Malgré les apparences, le temps est très varié à Nancy : pluie, nuages, neige, brouillard, grêle, ..."
On Sat, 4 Dec 2004, no_spam wrote:
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la
taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM,
je n'en ai que 510 dans kcore), mais là, se tromper du simple au double,
c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de
l'accès habituel (ça demande une option particulière à la compilation ;
d'ailleurs, quand cette option est activée, l'accès habituel ne concerne
plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez parlant...).
Attention, cette option touche tout le kernel, il faut donc réinstaller
le kernel et tous les modules.
Ben, euh... Je ne sais pas trop si elle y est où pas, cette option, vu que
j'utilise un noyau standard Debian, et pas un que j'ai recompilé moi-même
(et j'avoue ne jamais avoir eu l'idée d'aller fouiller les options...).
Ceci dit, si cette option n'était pas activée, d'après ce que je sais,
*aucun* programme ne devrait voir plus de 1 Go de RAM, non ? Donc, par
exemple, top ne devrait m'indiquer que 1 Go et pas 2, etc.
Parce que sinon, ça veut dire que HIGHMEM ne contrôle que la taille de
kcore et pas de la mémoire réellement accessible, ce qui serait un peu
naze :-)
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM, je n'en ai que 510 dans kcore), mais là, se tromper du simple au double, c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de l'accès habituel (ça demande une option particulière à la compilation ; d'ailleurs, quand cette option est activée, l'accès habituel ne concerne plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez parlant...). Attention, cette option touche tout le kernel, il faut donc réinstaller le kernel et tous les modules.
Ben, euh... Je ne sais pas trop si elle y est où pas, cette option, vu que j'utilise un noyau standard Debian, et pas un que j'ai recompilé moi-même (et j'avoue ne jamais avoir eu l'idée d'aller fouiller les options...).
Ceci dit, si cette option n'était pas activée, d'après ce que je sais, *aucun* programme ne devrait voir plus de 1 Go de RAM, non ? Donc, par exemple, top ne devrait m'indiquer que 1 Go et pas 2, etc.
Parce que sinon, ça veut dire que HIGHMEM ne contrôle que la taille de kcore et pas de la mémoire réellement accessible, ce qui serait un peu naze :-) -- Rémi Moyen "Malgré les apparences, le temps est très varié à Nancy : pluie, nuages, neige, brouillard, grêle, ..."
Remi Moyen
On Sat, 4 Dec 2004, no_spam wrote:
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM, je n'en ai que 510 dans kcore), mais là, se tromper du simple au double, c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de l'accès habituel (ça demande une option particulière à la compilation ; d'ailleurs, quand cette option est activée, l'accès habituel ne concerne plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez parlant...). Attention, cette option touche tout le kernel, il faut donc réinstaller le kernel et tous les modules.
Ben, euh... Je ne sais pas trop si elle y est où pas, cette option, vu que j'utilise un noyau standard Debian, et pas un que j'ai recompilé moi-même (et j'avoue ne jamais avoir eu l'idée d'aller fouiller les options...).
Ceci dit, si cette option n'était pas activée, d'après ce que je sais, *aucun* programme ne devrait voir plus de 1 Go de RAM, non ? Donc, par exemple, top ne devrait m'indiquer que 1 Go et pas 2, etc.
Parce que sinon, ça veut dire que HIGHMEM ne contrôle que la taille de kcore et pas de la mémoire réellement accessible, ce qui serait un peu naze :-)
Et puis d'ailleurs, je viens de vérifier (d'où le supersedes), et ces options sont, fort logiquement, activées :
$ grep HIGHMEM /boot/config-2.4.27-1-686-smp # CONFIG_NOHIGHMEM is not set CONFIG_HIGHMEM4G=y # CONFIG_HIGHMEM64G is not set CONFIG_HIGHMEM=y # CONFIG_DEBUG_HIGHMEM is not set
Donc, ça ne vient pas de là. -- Rémi Moyen "Malgré les apparences, le temps est très varié à Nancy : pluie, nuages, neige, brouillard, grêle, ..."
On Sat, 4 Dec 2004, no_spam wrote:
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas
la taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo
de RAM, je n'en ai que 510 dans kcore), mais là, se tromper du
simple au double, c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de
l'accès habituel (ça demande une option particulière à la
compilation ; d'ailleurs, quand cette option est activée, l'accès
habituel ne concerne plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez
parlant...). Attention, cette option touche tout le kernel, il faut donc
réinstaller le kernel et tous les modules.
Ben, euh... Je ne sais pas trop si elle y est où pas, cette option, vu que
j'utilise un noyau standard Debian, et pas un que j'ai recompilé moi-même
(et j'avoue ne jamais avoir eu l'idée d'aller fouiller les options...).
Ceci dit, si cette option n'était pas activée, d'après ce que je sais,
*aucun* programme ne devrait voir plus de 1 Go de RAM, non ? Donc, par
exemple, top ne devrait m'indiquer que 1 Go et pas 2, etc.
Parce que sinon, ça veut dire que HIGHMEM ne contrôle que la taille de
kcore et pas de la mémoire réellement accessible, ce qui serait un peu
naze :-)
Et puis d'ailleurs, je viens de vérifier (d'où le supersedes), et ces
options sont, fort logiquement, activées :
$ grep HIGHMEM /boot/config-2.4.27-1-686-smp
# CONFIG_NOHIGHMEM is not set
CONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not set
CONFIG_HIGHMEM=y
# CONFIG_DEBUG_HIGHMEM is not set
Donc, ça ne vient pas de là.
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM, je n'en ai que 510 dans kcore), mais là, se tromper du simple au double, c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de l'accès habituel (ça demande une option particulière à la compilation ; d'ailleurs, quand cette option est activée, l'accès habituel ne concerne plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez parlant...). Attention, cette option touche tout le kernel, il faut donc réinstaller le kernel et tous les modules.
Ben, euh... Je ne sais pas trop si elle y est où pas, cette option, vu que j'utilise un noyau standard Debian, et pas un que j'ai recompilé moi-même (et j'avoue ne jamais avoir eu l'idée d'aller fouiller les options...).
Ceci dit, si cette option n'était pas activée, d'après ce que je sais, *aucun* programme ne devrait voir plus de 1 Go de RAM, non ? Donc, par exemple, top ne devrait m'indiquer que 1 Go et pas 2, etc.
Parce que sinon, ça veut dire que HIGHMEM ne contrôle que la taille de kcore et pas de la mémoire réellement accessible, ce qui serait un peu naze :-)
Et puis d'ailleurs, je viens de vérifier (d'où le supersedes), et ces options sont, fort logiquement, activées :
$ grep HIGHMEM /boot/config-2.4.27-1-686-smp # CONFIG_NOHIGHMEM is not set CONFIG_HIGHMEM4G=y # CONFIG_HIGHMEM64G is not set CONFIG_HIGHMEM=y # CONFIG_DEBUG_HIGHMEM is not set
Donc, ça ne vient pas de là. -- Rémi Moyen "Malgré les apparences, le temps est très varié à Nancy : pluie, nuages, neige, brouillard, grêle, ..."
Jerome Lambert
no_spam wrote:
On Fri, 03 Dec 2004 19:51:50 +0000, Nicolas George wrote:
Remi Moyen wrote in message :
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM, je n'en ai que 510 dans kcore), mais là, se tromper du simple au double, c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de l'accès habituel (ça demande une option particulière à la compilation ; d'ailleurs, quand cette option est activée, l'accès habituel ne concerne plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez parlant...). Attention, cette option touche tout le kernel, il faut donc réinstaller le kernel et tous les modules.
<Infos>
C'est spécifique aux architectures "Intel 386 et +"? J'ai un Amd64 et cette option n'apparait pas dans la configuration "générique" du noyau:
jerome $ grep HIGHMEM /usr/share/genkernel/x86/kernel-config-2.6 CONFIG_NOHIGHMEM=y # CONFIG_HIGHMEM4G is not set # CONFIG_HIGHMEM64G is not set jerome $ grep HIGHMEM /usr/share/genkernel/x86_64/kernel-config-2.6 jerome $
</>
no_spam wrote:
On Fri, 03 Dec 2004 19:51:50 +0000, Nicolas George wrote:
Remi Moyen wrote in message
<Pine.LNX.4.61.0412031737330.9265@pbeanf.raft.vacy-anapl.se>:
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la
taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM,
je n'en ai que 510 dans kcore), mais là, se tromper du simple au double,
c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de
l'accès habituel (ça demande une option particulière à la compilation ;
d'ailleurs, quand cette option est activée, l'accès habituel ne concerne
plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez parlant...).
Attention, cette option touche tout le kernel, il faut donc réinstaller
le kernel et tous les modules.
<Infos>
C'est spécifique aux architectures "Intel 386 et +"? J'ai un Amd64 et
cette option n'apparait pas dans la configuration "générique" du noyau:
jerome@Magellan jerome $ grep HIGHMEM
/usr/share/genkernel/x86/kernel-config-2.6
CONFIG_NOHIGHMEM=y
# CONFIG_HIGHMEM4G is not set
# CONFIG_HIGHMEM64G is not set
jerome@Magellan jerome $ grep HIGHMEM
/usr/share/genkernel/x86_64/kernel-config-2.6
jerome@Magellan jerome $
On Fri, 03 Dec 2004 19:51:50 +0000, Nicolas George wrote:
Remi Moyen wrote in message :
Tiens, seulement 900 Mo ?? J'ai l'habitude que kcore n'indique pas la taille exacte de la RAM à 1 Mo près (sur mon portable avec 512 Mo de RAM, je n'en ai que 510 dans kcore), mais là, se tromper du simple au double, c'est quand même étonnant.
L'accès à la RAM au delà de 960 Mo se fait d'une manière différente de l'accès habituel (ça demande une option particulière à la compilation ; d'ailleurs, quand cette option est activée, l'accès habituel ne concerne plus que 750 Mo).
C'est l'option HIGHMEM du kernel qu'il faut activer (c'est assez parlant...). Attention, cette option touche tout le kernel, il faut donc réinstaller le kernel et tous les modules.
<Infos>
C'est spécifique aux architectures "Intel 386 et +"? J'ai un Amd64 et cette option n'apparait pas dans la configuration "générique" du noyau:
jerome $ grep HIGHMEM /usr/share/genkernel/x86/kernel-config-2.6 CONFIG_NOHIGHMEM=y # CONFIG_HIGHMEM4G is not set # CONFIG_HIGHMEM64G is not set jerome $ grep HIGHMEM /usr/share/genkernel/x86_64/kernel-config-2.6 jerome $
</>
Nicolas George
Jerome Lambert wrote in message :
C'est spécifique aux architectures "Intel 386 et +"?
Je dirais : aux architectures 32 bits. Ce qui est somme toutes assez logique.
Jerome Lambert wrote in message <31f06nF33ubrhU1@individual.net>:
C'est spécifique aux architectures "Intel 386 et +"?
Je dirais : aux architectures 32 bits. Ce qui est somme toutes assez
logique.
Elles ne sont pas censées gérer 4Go sans problèmes?
Et le noyau a besoin de maper plusieurs fois la mémoire.
no_spam
On Sun, 05 Dec 2004 01:20:18 +0000, Nicolas George wrote:
Jerome Lambert wrote in message :
Elles ne sont pas censées gérer 4Go sans problèmes?
Et le noyau a besoin de maper plusieurs fois la mémoire.
C'est du au fait que le noyau utilise une astuce pour accéder plus vite à la RAM physique. Le noyau est mappé à l'addresse 0xC0000000. Les addresses virtuelles en dessous de 0xC0000000 sont utilisées par l'espace user et celles au dessus par l'espace kernel. Ainsi, contrairement à beaucoup d'autres OS, il n'a pas besoin de changer les mappings de la MMU pour accéder à l'espace mémoire du process en cours lors d'un appel système. Le kernel a donc 1 Go pour lui. Il se réserve une partie de cet espace pour son code et ses données et utilise le reste de ce Go pour mapper la RAM physique en RAM virtuelle. De cette façon, le noyau peut accéder à l'intégralité de la RAM physique toujours sans reprogrammer la MMU, ce qui accélère considérablement les accès. Par contre, ça impose que la RAM physique visible soit inférieure à 1Go, d'ou la limite de ~900 Mo de mémoire physique gérée par défaut sur les noyaux 32 bits. L'option highmem permet de contourner ce problème en mappant le surplus de RAM physique indirectement. L'accès à la RAM physique au dessus de 900 Mo par le noyau est donc plus lent. Mais comme il y a très peu d'accès à la RAM physique (généralement uniquement pour les drivers), il suffit de faire en sorte que les drivers ne se servent jamais de la HighMem pour parler aux périphériques et le tour est joué. Il existe un autre patch qui permet aux processes de mapper la quasi intégralité des 4Go (en fait, 16 Mo sont réservés...) mais ce patch à pour inconvénient de ralentir tous les appels systèmes.
On Sun, 05 Dec 2004 01:20:18 +0000, Nicolas George wrote:
Jerome Lambert wrote in message <31f4bvF392jmhU1@individual.net>:
Elles ne sont pas censées gérer 4Go sans problèmes?
Et le noyau a besoin de maper plusieurs fois la mémoire.
C'est du au fait que le noyau utilise une astuce pour accéder plus vite
à la RAM physique. Le noyau est mappé à l'addresse 0xC0000000. Les
addresses virtuelles en dessous de 0xC0000000 sont utilisées par l'espace
user et celles au dessus par l'espace kernel. Ainsi, contrairement à
beaucoup d'autres OS, il n'a pas besoin de changer les mappings de la MMU
pour accéder à l'espace mémoire du process en cours lors d'un appel
système. Le kernel a donc 1 Go pour lui. Il se réserve une partie de
cet espace pour son code et ses données et utilise le reste de ce Go
pour mapper la RAM physique en RAM virtuelle. De cette façon, le noyau
peut accéder à l'intégralité de la RAM physique toujours sans
reprogrammer la MMU, ce qui accélère considérablement les accès. Par
contre, ça impose que la RAM physique visible soit inférieure à 1Go,
d'ou la limite de ~900 Mo de mémoire physique gérée par défaut sur les
noyaux 32 bits. L'option highmem permet de contourner ce problème en
mappant le surplus de RAM physique indirectement. L'accès à la RAM
physique au dessus de 900 Mo par le noyau est donc plus lent. Mais comme
il y a très peu d'accès à la RAM physique (généralement uniquement
pour les drivers), il suffit de faire en sorte que les drivers ne se
servent jamais de la HighMem pour parler aux périphériques et le tour
est joué.
Il existe un autre patch qui permet aux processes de mapper la
quasi intégralité des 4Go (en fait, 16 Mo sont réservés...) mais ce
patch à pour inconvénient de ralentir tous les appels systèmes.
On Sun, 05 Dec 2004 01:20:18 +0000, Nicolas George wrote:
Jerome Lambert wrote in message :
Elles ne sont pas censées gérer 4Go sans problèmes?
Et le noyau a besoin de maper plusieurs fois la mémoire.
C'est du au fait que le noyau utilise une astuce pour accéder plus vite à la RAM physique. Le noyau est mappé à l'addresse 0xC0000000. Les addresses virtuelles en dessous de 0xC0000000 sont utilisées par l'espace user et celles au dessus par l'espace kernel. Ainsi, contrairement à beaucoup d'autres OS, il n'a pas besoin de changer les mappings de la MMU pour accéder à l'espace mémoire du process en cours lors d'un appel système. Le kernel a donc 1 Go pour lui. Il se réserve une partie de cet espace pour son code et ses données et utilise le reste de ce Go pour mapper la RAM physique en RAM virtuelle. De cette façon, le noyau peut accéder à l'intégralité de la RAM physique toujours sans reprogrammer la MMU, ce qui accélère considérablement les accès. Par contre, ça impose que la RAM physique visible soit inférieure à 1Go, d'ou la limite de ~900 Mo de mémoire physique gérée par défaut sur les noyaux 32 bits. L'option highmem permet de contourner ce problème en mappant le surplus de RAM physique indirectement. L'accès à la RAM physique au dessus de 900 Mo par le noyau est donc plus lent. Mais comme il y a très peu d'accès à la RAM physique (généralement uniquement pour les drivers), il suffit de faire en sorte que les drivers ne se servent jamais de la HighMem pour parler aux périphériques et le tour est joué. Il existe un autre patch qui permet aux processes de mapper la quasi intégralité des 4Go (en fait, 16 Mo sont réservés...) mais ce patch à pour inconvénient de ralentir tous les appels systèmes.