¿Por qué el límite teórico de RAM para RHEL 6 128 TB y cómo se determina?

8

Estoy estudiando para RHCSA y estoy confundido por una declaración que encontré en algún material de capacitación:

No hay RAM máxima práctica, ya que teóricamente, podría ejecutar 128 TB de RAM en RHEL 6. Pero eso es solo teoría. La RAM máxima admitida por Red Hat en RHEL 6 es de 16 GB en sistemas de 32 bits y 2 TB en sistemas de 64 bits.

¿Alguien puede explicar de dónde viene el límite teórico de 128 TB? Estoy confundido sobre cómo el autor sabe que el límite teórico existe si RHEL 6 define claramente otros límites máximos. ¿Esto solo tiene en cuenta los límites teóricos de la arquitectura de 64 bits? ¿O hay alguna otra razón aquí?

Mike B
fuente
3
Aquí está la respuesta. Puede reescribirlo e insertarlo como respuesta
dchirikov

Respuestas:

7

De la documentación del núcleo, en 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 bytes = 128TiB

Ignacio Vazquez-Abrams
fuente
2 ^ 48 = 256 TiB ;-)
Huygens
Respuesta muy concisa. Para obtener más información, consulte lwn.net/Articles/117783 35 bits para el índice de la tabla de páginas y 4096 bytes (2 ^ 12) es el tamaño de una página. Dando 2 ^ (35) * 2 ^ (12) = 2 ^ 47 = 128 TB
pveentjer
4

Respuesta corta

Cada proceso de Linux puede abordar como máximo 128 TB de memoria virtual . Sin embargo, esto es más de lo que el kernel de Linux puede manejar físicamente . Por lo tanto, este límite es teórico.

Probablemente ha sido elegido arbitrariamente, en base a un supuesto escenario de uso del "peor de los casos".

Respuesta elaborada

En realidad, no puede usar más RAM de la que permite su hardware (48 bits = 256 TB es común en estos días), y luego estará limitado por la cantidad de memoria física que el núcleo de Linux puede manejar.

Por ejemplo, en la arquitectura Intel x86 de 64 bits , Linux no puede usar más de 64 TB de memoria física (desde la versión 2.6.30 , pero era de 16 TB justo antes). Tenga en cuenta que RHEL 6 usa un núcleo 2.6.32 .

En la arquitectura s390 de 64 bits , se aplica el mismo límite (desde 2.6.28 ). Sin embargo, si usa 32 bits, el límite es de 4 GB , pero con un truco extraño llamado PAE , puede subir a 64 GB (a menudo usado en x86).

Creo que otras arquitecturas de 64 bits tienen límites más bajos.

Consulte la tabla de límites de Red Hat para obtener más información (gracias Huygens ).

Totor
fuente
1
El límite de 48 bits en x86-64 es en gran medida un límite de hardware en este punto. en.wikipedia.org/wiki/X86-64#Virtual_address_space_details
Mat
Claro, pero esto depende de la implementación y puede cambiar en el futuro. La pregunta es sobre un límite teórico . Aunque actualicé mi respuesta.
Totor
2
Esto depende de la implementación del hardware. La arquitectura actual de AMD e Intel x86_64 admite solo 48 bits de espacio de direcciones. Esta arquitectura podría evolucionar en el futuro.
Huygens
1

Uno no debe mezclar la memoria virtual y la memoria física volátil. El primero es específico de la arquitectura de la CPU y se asignará a la memoria volátil y no volátil. Este último, también conocido como RAM, debe ser independiente de la arquitectura de la CPU desde el punto de vista del kernel.

La implementación actual de AMD e Intel x86_64 solo admite 48 bits de memoria virtual direccionable. Lo que significa que el núcleo puede abordar 2 ^ 48 = 256 TiB por proceso VM.
El kernel de Linux en la arquitectura x86_64 divide el espacio de VM direccionable en 2, 128 TiB para espacio de usuario y 128 TiB para espacio de kernel. Por lo tanto, un proceso puede abordar teóricamente un total de 128 TiB de memoria virtual.

El máximo de memoria física volátil que el núcleo puede manejar es un aspecto diferente, pero no conozco esta información.

Con respecto a la declaración del autor RHCSA

El autor de la declaración "No hay RAM máxima práctica, ya que teóricamente, podría ejecutar 128 TB de RAM en RHEL 6". está utilizando una terminología incorrecta o incomprendida. Aquí está la tabla del sitio web de Red Hat que resume las capacidades de RHEL 3, 4, 5 y 6 . Y establecen claramente "Máximo x86_64 por espacio virtual de direcciones por proceso [...] 128TB [para RHEL 6]"

La misma página indica que RHEL 6 admite un máximo de 2TB / 64TB RAM (memoria física volátil). Supongo que significa que está certificado para una RAM máxima de 2TB, y en teoría podría llegar a 64TB. SLES es mucho más claro a este respecto .

Huygens
fuente
Usted dice que un proceso puede abordar 128 TB, pero todo el sistema (varios procesos) puede tener y usar más, por lo que la oración "podría ejecutar 128 TB de RAM en RHEL 6" me parece incómoda, especialmente dado el hecho de que el funcionario El kernel de Linux no puede ...
Totor
¿Podría proporcionar el puntero al lugar donde encontró la declaración "podría ejecutar 128 TB de RAM en RHEL 6"? ¡Dudo que sea de Red Hat ellos mismos! El autor confunde la memoria física y la memoria virtual.
Huygens
@Totor Acabo de actualizar mi respuesta con un enlace al sitio web de Red Hat que no confirma la declaración de RHCSA.
Huygens
@Totor: en el kernel de Linux, HIGHMEM no se ha portado a 64 bits. Sin HIGHMEM, toda la RAM se asigna al espacio de direcciones del núcleo, que es de 128 TB, de ahí el límite.
Yuhong Bao
0

La otra razón es teórica es la falta de experiencia en implementación.

Es común que los programadores evalúen las variables con mucha anticipación de lo que el hardware es capaz de hacer, de modo que el núcleo no necesite programación arriesgada para extraer y reemplazar, ya que el hardware de esa capacidad aparece una década o más después.

Sin embargo, el tamaño variable no es el único límite. Las estructuras de datos y sus algoritmos imponen sus propios límites. Imagine por un momento un recorrido lineal de una estructura de datos que describe cada página de 4KB de ese 128TB. Hay algunas respuestas obvias: no use páginas de 4KB, no use una estructura de datos lineal, no acceda a esas estructuras de datos con frecuencia, descargue todo lo posible en el hardware. Pero hay limitaciones más sutiles de estructura de datos + algoritmo que no sabremos hasta que las encontremos.

Sabemos que si descubrimos mágicamente una PC de 128TB mañana e intentamos arrancar Linux en ella, funcionará terriblemente, y tal vez tan terriblemente como para no comenzar. Pero arreglar los algoritmos es trivial, arreglar las estructuras de datos es un trabajo pero aún mucho menos trabajo que arreglar el tamaño de una variable ampliamente entendida. Entonces veremos cambios de esa naturaleza a medida que crece el tamaño de la memoria.

vk5tu
fuente