Acabo de leer aquí :
- hasta 128TiB de espacio de direcciones virtuales por proceso (en lugar de 2GiB)
- Soporte de memoria física de 64TiB en lugar de 4GiB (o 64GiB con la extensión PAE)
¿Porqué es eso? Quiero decir, ¿el soporte de memoria física está limitado por el núcleo o por el hardware actual?
¿Por qué necesitaría el doble del espacio de memoria virtual que la memoria física que realmente puede abordar?
debian
linux-kernel
virtual-memory
gsi-frank
fuente
fuente
Respuestas:
Esos límites no provienen de Debian o Linux, provienen del hardware. Las diferentes arquitecturas (procesador y bus de memoria) tienen diferentes limitaciones.
En los procesadores de PC x86-64 actuales, la MMU permite 48 bits de espacio de direcciones virtuales . Eso significa que el espacio de direcciones está limitado a 256 TB. Con un bit para distinguir las direcciones de kernel de las direcciones de usuario, eso deja 128TB para el espacio de direcciones de un proceso.
En los procesadores x86-64 actuales, las direcciones físicas pueden usar hasta 48 bits , lo que significa que puede tener hasta 256 TB. El límite ha aumentado progresivamente desde que se introdujo la arquitectura amd64 (de 40 bits si recuerdo correctamente). Cada bit de espacio de direcciones cuesta algo de lógica de cableado y decodificación (lo que hace que el procesador sea más caro, más lento y más caliente), por lo que los fabricantes de hardware tienen un incentivo para mantener el tamaño bajo.
Linux solo permite que las direcciones físicas suban a 2 ^ 46 (por lo que solo puede tener hasta 64 TB) porque permite que la memoria física se asigne por completo en el espacio del kernel. Recuerde que hay 48 bits de espacio de direcciones; un bit para kernel / user deja 47 bits para el espacio de direcciones del kernel. La mitad de eso en la mayoría de los casos se dirige directamente a la memoria física, y la otra mitad permite que el núcleo asigne lo que necesite. (Linux puede hacer frente a la memoria física que no se puede asignar en su totalidad al mismo tiempo, pero que introduce una complejidad adicional, por lo que solo se hace en plataformas donde es necesario, como x86-32 con PAE y armv7 con LPAE).
Es útil que la memoria virtual sea más grande que la memoria física por varias razones:
fuente
No sé por qué, pero puedo pensar en siete razones por las que sería útil admitir el doble de espacio de direcciones que la memoria física.
fuente
Esas son limitaciones de hardware. El hardware actual x86_64 / amd64 permite direcciones virtuales de 48 bits y varios tamaños (depende de la implementación; por ejemplo, mi estación de trabajo aquí solo admite 36 bits) direcciones físicas. El kernel de Linux divide el espacio de direcciones virtuales a la mitad (usando la mitad para el kernel, la mitad para el espacio de usuario, tal como lo hace en x86).
Entonces obtienes:
2⁴⁸ bytes ÷ 2 = 2⁴⁷ bytes = 128 TiB
El tamaño de la dirección física a menudo es menor porque en realidad es físico. Ocupa pines / pads, transistores, conexiones, etc., en / en la CPU y traza líneas en la placa. Probablemente también lo mismo en los chipsets. No tiene sentido admitir una cantidad de RAM que es inconcebible durante la vida útil de diseño del núcleo del procesador o del zócalo; todas esas cosas cuestan dinero. (Incluso con 32 ranuras DIMM y 64GiB DIMM en cada una, todavía tiene solo 2TiB. Incluso si la capacidad DIMM se duplica anualmente, estamos a 5 años de 64TiB.
Como señala Peter Cordes , las personas ahora están conectando almacenamiento no volátil, como 3D XPoint, al bus de memoria, lo que hace que se quede sin espacio de direcciones. Los procesadores más nuevos han ampliado el espacio de direcciones físicas a 48 bits; Es posible que el wiki de Debian no haya sido actualizado.
fuente
clflush
eclflushopt
instrucciones.