Vous n'êtes pas identifié.
Salut,
J'ai vu une offre chez un hoster qui propose un serveur avec 12 GB de mémoire vive. La machine est équipé d'un processeur intel i7 920. Est-ce qu'il n'y a pas une limite de 4 GB pour la gestion de la mémoire vive avec linux?
Meilleures salutations.
Hors ligne
Salut Jean,
en effet, les noyaux i386 sont limités à 4 Gb, mais ce n'est pas le cas des noyaux compilés spécialement (-pae je crois) et de l'architecture amd64…
++,
OdyX
Hors ligne
il y a une limite à 4 Go sur les platformes 32bits. (il existe un hacks sous linux pour dépasser cette limite)
Mais c'est un processeur 64 bits, donc avec un kernel approprié la limite est désormais a 16Eo (1Eo = 1000 Pétaoctet).
Hors ligne
Salut,
Merci. Donc si j'achète un ordinateur 64 bits et que j'installe le noyau 64 bits, je peux dépasser les 4 GB de mémoire vive?
Meilleures salutations.
Hors ligne
jean@adimp.ch a écrit:
Salut,
Merci. Donc si j'achète un ordinateur 64 bits et que j'installe le noyau 64 bits, je peux dépasser les 4 GB de mémoire vive?
Meilleures salutations.
Merci de lire les réponses :
sebseb01 a écrit:
Mais c'est un processeur 64 bits, donc avec un kernel approprié la limite est désormais a 16Eo (1Eo = 1000 Pétaoctet).
16 Eo = 16 Exaoctets = 16 000 000 000 gigaoctets, donc tu peux allègrement dépasser 4 Go
Hors ligne
Salut,
J'avais lu. Merci de la confirmation, je ne comprends pas bien les conditions qui font que je peux dépasser ces 4 GB. Le simple fait d'avoir une architecture 64 bits suffit? Comment vous arrivez au 16 EO , pourquoi pas 16 GB ( 4 GB * 4 GB )?
Meilleures salutations.
Hors ligne
les 16 Eo sont la limite maximum que peut supporter l'architecture 64bits
Hors ligne
En fait l'adressage se fait par octets, donc c'est 4x10^9 o * 4x10^9 o = 16x10^18 o. Sur une architecture qui adresserait par mots, ca serait un peu plus grand.
Note que ce n'est pas un problème spécifique à Linux. Windows 32bits ne peut pas non plus adresser plus de 4Go de mémoire. Le hack 32bits sur Linux permet a l'OS d'adresser un total plus grand, mais chaque processus est quand même limité à 4Go, alors qu'en 64bit un processus peut en demander plus.
Hors ligne
La limite c'est juste le nombre d'adresses mémoire que tu peux coder avec 64 bits
2^64 = 18446744073709551616 o
2^32 = 4294967296 o
Plus d'info sur wikipédia : http://fr.wikipedia.org/wiki/Processeur_64_bits
Hors ligne
Parce que justement, 4Gio * 4 Gio, ça fait pas 16 Gio, mais bien 16 Eio.
Démo :
* 4 Gio = 4 gibi octets = 4 * 2³⁰ octets
* 4 * 2³⁰ * 4 * 2³⁰ = 16 * 2⁶⁰ = 16 exbi octets = 16 Eio
CQFD
Hors ligne
Salut,
Merci pour vos précisions. OK pour 4 GB * 4 GB = 16 GB^2 = 16 EB
Meilleures salutations.
Hors ligne
jean@adimp.ch a écrit:
je ne comprends pas bien les conditions qui font que je peux dépasser ces 4 GB.
Ben, 4 Gio, c'est la limite d'adressage pour un processeur 32 bits, soit 2^32.
Le simple fait d'avoir une architecture 64 bits suffit?
Par définition oui, si c'est compilé en 64 bits.
En détail, sur wikipédia :
http://fr.wikipedia.org/wiki/64_bits
http://fr.wikipedia.org/wiki/Octet
http://fr.wikipedia.org/wiki/Pr%C3%A9fi … ernational
http://fr.wikipedia.org/wiki/IEC_60027-2
[EDIT]
Ah, Zut, je suis trop lent...
Hors ligne
Salut,
Sur l'article de wikipedia ils attirent l'attention sur le fait qu'il faut disposer de pilotes 64 bits et des logiciels 64 bits. Si je veux faire un serveur web avec une architecture 64 bits, est-ce que je dois disposer d'un apache 64 bits ou bien il me suffit d'avoir un linux 64 bits?
Meilleures salutations.
Hors ligne
Salut,
le mieux est d'installer une distribution et de suivre ce qu'elle propose… Par exemple (c'est ce que je connais), sous Debian amd64, tout est compilé en 64 bits.
++, OdyX
Hors ligne
Hello,
"Faire un serveur web avec une architecture 64bits" ça veut pas dire grand chose.
Si tu as beaucoup de contenu statique et que tu veux exploiter ta quantité de mémoire importante pour en mettre en cache un maximum, avoir un noyau 64bits suffira.
Concernant Apache lui-même, la différence sera certainement marginale, un serveur HTTP est plutôt limité par les E/S en général.
Hors ligne
Salut,
Merci pour vos réponses. J'aimerais encore comprendre plus : si j'ai un noyau 64 bits, avec gcc 64 bits et que je compile manuellement les applications et les pilotes, je suis alors sûr que tout est 64 bits ou bien en fonction de certaines librairies je n'ai pas accès au "64 bits"?
Meilleures salutations.
Hors ligne
Si le target de ton compiler (ou cross-compiler) est x86_64-linux-gnu alors il fera du 64 bits par défaut. T'as toujours moyen de forcer du 32 avec le flag -m32.
`gcc -v`pour voir le target.
Hors ligne
La limite du 2^64 il totalement théorique, il y a des énormes problèmes avec le demand paging bien avant cette limite.
Sur 32 bits, on les répartit comme ca (en général) : 10 (premier niveau),10 (deuxième niveau) ,12 (offset => 4KB / page).
Sur 64 bits, il faudrait 5 niveaux, ce qui est trop lent. Donc les pages tables sont mit dans un hash.
Donc je pense que si l'on met des trop de mémoires, on obtient beaucoup de collisions donc cela devient lent.
Attention, ce sont des considérations théoriques, je sais pas quelle est la limite ou les problèmes apparaissent.
Dernière modification par tguillod (12 Aug 2009 18:51:13)
Hors ligne
fbianco a écrit:
La limite c'est juste le nombre d'adresses mémoire que tu peux coder avec 64 bits
2^64 = 18446744073709551616 o
2^32 = 4294967296 o
Plus d'info sur wikipédia : http://fr.wikipedia.org/wiki/Processeur_64_bits
Ça dépend les génération car la première implémentation des amd64 ne dépassaient pas 48 bits pour l'adressage virtuel. Aucun idée pour les processeurs récents. D'ailleurs c'est visible avec le /proc/cpuinfo.. par exemple avec un X2 3800 (les tout premiers):
address sizes : 40 bits physical, 48 bits virtual
Hors ligne
Je sais pas maintenant, mais avant les adresses de 48 bits était pour la segmentation, il s'agit donc d'adresse logique.
48 bits => segmentation => 32 bits logiques => pagination => 32 bits physiques
Donc cela ne limite pas la taille des adresses physiques. Mais cela a du changer.
Hors ligne
jean@adimp.ch a écrit:
Salut,
Merci pour vos réponses. J'aimerais encore comprendre plus : si j'ai un noyau 64 bits, avec gcc 64 bits et que je compile manuellement les applications et les pilotes, je suis alors sûr que tout est 64 bits ou bien en fonction de certaines librairies je n'ai pas accès au "64 bits"?
Meilleures salutations.
C'est tout le problème que j'avais eu : je voulais compiler un noyeau pour un processeur 32 bits, mais pour être plus rapide je l'ai fait sur un quadri core qui était en 64 bits, alors par défaut, ça m'a compilé en 64 bits
Un autre problème que tu vas rencontrer avec le 64 bits, c'est que dès que tu veux un programme hors de ta distribution mais en 64 bits tu ne trouvera peut-être pas.
Hors ligne
Trim a écrit:
Un autre problème que tu vas rencontrer avec le 64 bits, c'est que dès que tu veux un programme hors de ta distribution mais en 64 bits tu ne trouvera peut-être pas.
C'est aussi pour ça qu'il y a les lib32 packagées avec les distribs 64 bits.
Hors ligne
[GO]Skywalker13 a écrit:
C'est aussi pour ça qu'il y a les lib32 packagées avec les distribs 64 bits.
Ah bon, je ne savais pas ça. J'avais essayé de faire tourner à la main un jeu en 32 bits, mais je n'avais pas réussi (il y avait trop de dépendances): je recherchais à la main les librairies 32 bits. Si j'avais su que ces paquets existaient, je serais peut-être resté en 64 bits.
Dernière modification par Trim (12 Aug 2009 23:52:01)
Hors ligne
Salut,
Merci pour vos explications. Est-ce que le fait d'utiliser un librairie compilée en 32 bits ne "nuit" pas au système? C'est a dire que le système n'a plus accès au 16 EB?
Meilleures salutations.
Hors ligne
Si tu utilises une lib32 c'est que l'application qui l'utilise est elle même en 32. Ce n'est pas du mix entre le 32 et le 64.
Ce qui veut dire que les libs sont à doubles.. en 32 et en 64. Pour autant que t'installes les lib32. Par exemple la libc6 sur mon systeme:
schroeterm@athlonium:~$ ldd /lib32/libc.so.6 /lib32/ld-linux.so.2 (0xf7e22000) linux-gate.so.1 => (0xf7e21000) schroeterm@athlonium:~$ ldd /lib/libc.so.6 /lib64/ld-linux-x86-64.so.2 (0x00007f4cc4764000) linux-vdso.so.1 => (0x00007fffccbfe000) schroeterm@athlonium:~$ file /lib32/libc-2.9.so /lib32/libc-2.9.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped schroeterm@athlonium:~$ file /lib/libc-2.9.so /lib/libc-2.9.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
Les applications 32 et 64 peuvent cohabiter ensemble sans problème. Mais une application 32 ne pourra jamais accéder à plus juste parce que le noyau est 64 bits. Si tu ne trouves pas certaines app en 64 mais qu'elles sont libres.. alors compile les en 64. C'est pas bien compliqué. Et c'est bien mieux que d'utiliser les lib32.
Quoi qu'il en soit, si t'as un processeur 64 bits il n'y a aucune bonne raison de ne pas l'utiliser en 64 (a part des apps proprio qui seraient dispo qu'en 32, ou alors d'être un novice absolu et de ne pas savoir où tu tapes). En 64 le processeur à accès à un peu plus du double de registre (la RAM ce n'est pas le seul intérêt, de loin pas). L'utiliser en 32 bits c'est comme brider une maserati de 250 chevaux à 80 km/h. C'est du gâchis.
Hors ligne