Pourquoi la limite RAM théorique pour RHEL 6 128 To et comment est-elle déterminée?

8

J'étudie pour RHCSA et je suis confus par une déclaration que j'ai rencontrée dans du matériel de formation:

Il n'y a pas de RAM maximale pratique, car théoriquement, vous pourriez exécuter 128 To de RAM sur RHEL 6. Mais ce n'est qu'une théorie. La RAM maximale prise en charge par Red Hat sur RHEL 6 est de 16 Go sur les systèmes 32 bits et de 2 To sur les systèmes 64 bits.

Quelqu'un peut-il expliquer d'où vient la limite théorique de 128 To? Je suis confus sur la façon dont l'auteur sait que la limite théorique existe si RHEL 6 définit clairement d'autres limites maximales. Est-ce simplement prendre en compte les limites théoriques de l'architecture 64 bits? Ou y a-t-il une autre raison ici?

Mike B
la source
3
Voici la réponse. Vous pouvez le réécrire et insérer comme réponse
dchirikov

Réponses:

7

De la documentation du noyau, dans Documentation/x86/x86_64/mm.txt:

Virtual memory map with 4 level page tables:

0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm

2 47 octets = 128 To

Ignacio Vazquez-Abrams
la source
2 ^ 48 = 256 TiB ;-)
Huygens
Réponse très concise. Pour plus d'informations, voir lwn.net/Articles/117783 35 bits pour l'index de table de pages et 4096 octets (2 ^ 12) est la taille d'une page. Donner 2 ^ (35) * 2 ^ (12) = 2 ^ 47 = 128 To
pveentjer
4

Réponse courte

Chaque processus Linux peut traiter au maximum 128 To de mémoire virtuelle . Cependant, c'est plus que ce que le noyau Linux peut gérer physiquement . Cette limite est donc théorique.

Il a probablement été choisi de façon arbitraire, sur la base d'un scénario d'utilisation supposé "pire des cas".

Réponse élaborée

Vous ne pouvez pas réellement utiliser plus de RAM que votre matériel ne le permet (48 bits = 256 To sont courants de nos jours), et vous serez alors limité par la quantité de mémoire physique que le noyau Linux peut gérer.

Par exemple, sur l' architecture Intel x86 64 bits , Linux ne peut pas utiliser plus de 64 To de mémoire physique (depuis la version 2.6.30 , mais c'était 16 To juste avant). Notez que RHEL 6 utilise un noyau 2.6.32 .

Sur l' architecture s390 64 bits , la même limite s'applique (depuis 2.6.28 ). Si vous utilisez 32 bits cependant, la limite est de 4 Go , mais en utilisant une étrange astuce appelée PAE , vous pouvez aller jusqu'à 64 Go (souvent utilisé sur x86).

Je pense que d'autres architectures 64 bits ont des limites inférieures.

Voir le tableau des limites de Red Hat pour plus d'informations (merci Huygens ).

Totor
la source
1
La limite de 48 bits sur x86-64 est très bien une limite matérielle à ce stade. en.wikipedia.org/wiki/X86-64#Virtual_address_space_details
Mat
Bien sûr, mais cela dépend de la mise en œuvre et peut changer à l'avenir. La question porte sur une limite théorique . J'ai cependant mis à jour ma réponse.
Totor
2
Cela dépend de l'implémentation matérielle. L'architecture AMD et Intel x86_64 d'aujourd'hui ne prend en charge que 48 bits d'espace d'adressage. Cette architecture pourrait évoluer dans le futur.
Huygens
1

Il ne faut pas mélanger la mémoire virtuelle et la mémoire physique volatile. Le premier est spécifique à l'architecture du processeur et sera mappé sur la mémoire volatile et non volatile. Ce dernier, alias RAM, devrait être indépendant de l'architecture CPU du point de vue du noyau.

L'implémentation AMD et Intel x86_64 d'aujourd'hui ne prend en charge que 48 bits de mémoire virtuelle adressable. Ce qui signifie que le noyau peut adresser 2 ^ 48 = 256 TiB par VM de processus.
Le noyau Linux sur l'architecture x86_64 a divisé l'espace VM adressable en 2, 128 TiB pour l'espace utilisateur et 128 TiB pour l'espace du noyau. Ainsi, un processus peut théoriquement adresser un total de 128 TiB de mémoire virtuelle.

Le maximum de mémoire physique volatile que le noyau peut gérer est un aspect différent, mais je ne connais pas ces informations.

Concernant la déclaration de l'auteur RHCSA

L'auteur de la déclaration "Il n'y a pas de RAM maximale pratique, car théoriquement, vous pouvez exécuter 128 To de RAM sur RHEL 6." utilise une terminologie erronée ou mal comprise. Voici le tableau du site Web de Red Hat résumant les capacités de RHEL 3, 4, 5 et 6 . Et ils indiquent clairement "Espace d'adressage virtuel x86_64 maximum par processus [...] 128 To [pour RHEL 6]"

La même page indique que RHEL 6 prend en charge un maximum de 2 To / 64 To de RAM (mémoire physique volatile). Je suppose que cela signifie qu'il est certifié pour une RAM maximale de 2 To, et pourrait théoriquement aller jusqu'à 64 To. SLES est beaucoup plus clair à cet égard .

Huygens
la source
Vous dites qu'un processus peut traiter 128 To, mais tout le système (plusieurs processus) peut en avoir et en utiliser plus, donc la phrase "vous pourriez exécuter 128 To de RAM sur RHEL 6" me semble maladroite, surtout compte tenu du fait que le fonctionnaire Le noyau Linux ne peut pas ...
Totor
Pourriez-vous fournir le pointeur vers l'endroit où vous avez trouvé la déclaration "vous pouvez exécuter 128 To de RAM sur RHEL 6"? Je doute que ce soit de Red Hat eux-mêmes! L'auteur confond la mémoire physique et la mémoire virtuelle.
Huygens
@Totor Je viens de mettre à jour ma réponse avec un lien vers le site Web de Red Hat qui ne confirme pas la déclaration RHCSA.
Huygens
@Totor: Sur le noyau Linux, HIGHMEM n'a pas été porté sur 64 bits. Sans HIGHMEM, toute la RAM est mappée dans l'espace d'adressage du noyau, qui est de 128 To, d'où la limite.
Yuhong Bao
0

L'autre raison pour laquelle il est théorique est le manque d'expérience de mise en œuvre.

Il est courant pour les programmeurs de dimensionner les variables bien à l'avance de ce dont le matériel est capable, de sorte que le noyau n'a pas besoin d'une programmation rip-and-replace risquée car le matériel de cette capacité apparaît une décennie ou plus plus tard.

Cependant, la taille variable n'est pas la seule limite. Les structures de données et leurs algorithmes imposent leurs propres limites. Imaginez un instant faire une marche linéaire d'une structure de données décrivant chaque page de 4 Ko de ces 128 To. Il y a des réponses évidentes: n'utilisez pas de pages de 4 Ko, n'utilisez pas de structure de données linéaire, n'accédez pas souvent à ces structures de données, déchargez autant que possible dans le matériel. Mais il y a une structure de données plus subtile + des limitations d'algorithme que nous ne saurons pas jusqu'à ce que nous les rencontrions.

Nous savons que si nous devions découvrir par magie un PC de 128 To demain et essayer de démarrer Linux dessus, il fonctionnera terriblement, et peut-être si terriblement qu'il ne démarrera pas. Mais la fixation des algorithmes est triviale, la fixation des structures de données est un travail mais encore beaucoup moins de travail que la fixation de la taille d'une variable largement comprise. Nous verrons donc des changements de cette nature à mesure que la taille de la mémoire augmente.

vk5tu
la source