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í?
rhel
memory
linux-kernel
ram
virtual-memory
Mike B
fuente
fuente
Respuestas:
De la documentación del núcleo, en
Documentation/x86/x86_64/mm.txt
:2 47 bytes = 128TiB
fuente
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 ).
fuente
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 .
fuente
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.
fuente