64GB de RAM en un sistema operativo de 32 bits

Varias veces dije (¡ups!) y escuchado decir que por las limitaciones de un sistema operativo de 32 bits, no es posible utilizar más de 3GB o 3,5GB de RAM. Esto no es del todo cierto, y -desde la época de los Pentium Pro- ni siquiera es una limitación de hardware, sino que es una limitación impuesta en algunos sistemas operativos de Microsoft.

En este post veremos cómo aprovechar los megabytes de RAM por arriba de los 3GB utilizando PAE, una característica de la mayoría de los procesadores modernos, sin necesidad de instalar un sistema operativo de 64 bits. Veremos también algunas consideraciones a tener en cuenta a la hora de poner en la balanza desperdiciar la memoria RAM por encima de los 3GB, habilitar PAE en un sistema operativo de 32 bits, o de utilizar un sistema de 64 bits.

PAE

PAE (Physical Address Extension, Extensión de dirección física) es una característica de la mayoría de los procesadores x86 y x86-64, que
permite que sistemas de 32 bits puedan utilizar hasta 64GB de RAM. Esto es posible ampliando la cantidad de bits utilizados para direccionar memoria de 32 a 36 bits y por esto, la cantidad de memoria direccionable máxima pasa de 4GB (2^32) a 64GB (2^36).

PAE en Windows

Lo más importante a destacar si de Windows hablamos, es que el uso de PAE para extender el espacio de direccionamiento de memoria no está habilitado en ninguna versión “consumer” de Windows, por lo que hay que recurrir a una versión de servidor (NT, 2003, etc.). En realidad, en Windows XP SP1 se permitió habilitar PAE, pero en SP2 se restringió nuevamente, siendo la principal causa de esta restricción los problemas de compatibilidad e inestabilidad de los drivers de los dispositivos. Estos problemas se daban porque en la programación de dichos drivers se asumen cosas que al direccionar la memoria utilizando PAE dejan de ser ciertas (ver la parte de More information de éste artículo).

En la siguiente tabla se muestran los máximos de memoria RAM física soportados por cada versión de Windows:

Sistema operativo – Memoria máxima soportada con PAE
Windows 2000 Advanced Server – 8 GB de RAM física
Windows 2000 Datacenter Server – 32 GB de RAM física
Windows XP (todas las versiones) – 4 GB de RAM física*
Windows Server 2003 (y SP1), Standard Edition – 4 GB de RAM física*
Windows Server 2003, Enterprise Edition – 32 GB de RAM física
Windows Server 2003, Datacenter Edition – 64 GB de RAM física
Windows Server 2003 SP1, Enterprise Edition – 64 GB de RAM física
Windows Server 2003 SP1, Datacenter Edition – 128 GB de RAM física

* El espacio físico de memoria está limitado a 4 GB en estas versiones de Windows.

PAE en Linux

La historia con Linux es diferente, ya que contando con un kernel 2.6+ que tenga habilitado el soporte para PAE, se abre la posibilidad de usar hasta 64GB de RAM en sistemas de 32 bits. Los kernels 2.4
soportan hasta 4GB de memoria RAM física.

Veamos algunos ejemplos de configuración:

Habilitar PAE en Ubuntu

Para habilitar PAE en Ubuntu basta con instalar algunos paquetes que reemplazan el kernel genérico por uno con soporte para PAE. Estoy en un sistema con 4GB de RAM, con el kernel por defecto, y Ubuntu versión 9.04 para x86 (32 bits). La memoria RAM disponible anda en los 3GB:

jarrarte@nb-jarrarte:~$ free -m
total       used       free     shared    buffers     cached
Mem:          3023        428       2594          0         26        176
-/+ buffers/cache:        225       2797
Swap:         1906          0       1906

Mi kernel:

jarrarte@nb-jarrarte:~$ uname -a
Linux nb-jarrarte 2.6.28-15-generic #49-Ubuntu SMP Tue Aug 18 18:40:08 UTC 2009 i686 GNU/Linux

Para instalar el soporte para PAE (este punto también se puede hacer desde el gestor de paquetes gráfico):

jarrarte@nb-
jarrarte:~$ sudo sudo apt-get install linux-headers-server linux-image-server linux-server

Luego de reinciar con el nuevo kernel, vemos que la actualización surgió efecto:

jarrarte@nb-jarrarte:~$ free -m
total       used       free     shared    buffers     cached
Mem:          4021        389       3631          0         26        166
-/+ buffers/cache:        196       3824
Swap:         1906          0       1906
jarrarte@nb-jarrarte:~$ uname -a
Linux nb-jarrarte 2.6.28-15-server #49-Ubuntu SMP Tue Aug 18 19:30:06 UTC 2009 i686 GNU/Linux

Habilitar PAE en Gentoo

Para habilitar el soporte para PAE en Gentoo, debemos recompilar el kernel con la opción de “High memory support” activada. Para ello, ejecutamos

server ~ # cd /usr/src/linux
server linux # make menuconfig

Encontraremos esta configuración bajo Processor type and features —> High Memory
Support
:

Processor type and features  --->
 High Memory Support  --->
  ( ) off
  ( ) 4GB
  (X) 64GB

La opción de 64GB activa el soporte para PAE. Luego de seleccionada, debemos recompilar el kernel, y reiniciar el sistema utilizando este nuevo kernel.

Habilitar PAE en CentOS, Fedora y similares

En estos sabores de Linux podemos habilitar el soporte para PAE instalando “kernel-PAE” utilizando el comando yum:

# yum install kernel-PAE

Luego de instalado, debemos reiniciar el sistema utilizando este nuevo kernel.

¿PAE o sistema operativo de 64 bits?

Creo que la desición de utilizar un sistema operativo de 32 bits con PAE habilitado o de utilizar uno de 64 bits va un poco más allá de la dificultad o facilidad técnica de utilizar uno u otro; como generalmente pasa, “depende” será la mejor respuesta a la hora de hacernos esa pregunta:

  • Como primer punto, dependerá del tipo de
    aplicaciones que se vayan a correr, teniendo en cuenta especialmente si existen versiones optimizadas para CPUs de 64 bits. Si nos estamos planteando este cambio en un servidor de base de datos o de procesamiento multimedia, es muy posible que veamos incrementos de performance con un sistema operativo de 64 bits, ya sea porque aprovechan los registros más grandes, los registros adicionales, las nuevas instrucciones de 64 bits o los espacios de direccionamiento de memoria para los procesos mucho más grandes (pasan de 4GB a 1TB).
  • Por otro lado, también hay que poner en la balanza que una aplicación compilada para 64 bits va a ocupar más espacio en disco y más memoria, por tener que manejar variables y punteros del doble de tamaño. Este incremento en el tamaño repercute en un incremento en el ancho de banda ocupado entre el CPU y la memoria, que a su vez puede repercutir en una degradación de performance si no es bien aprovechado.
  • El no tener drivers de 64 bits para los dispositivos de
    nuestro sistema puede ser una razón de peso bastante importante para no poder pasarnos de arquitectura de 64 bits. También puede pasar que los drivers de 32 bits no funcionen bien con PAE habilitado.
  • Si tenemos un sistema Linux de 32 bits corriendo hace tiempo, aplicaciones instaladas, configuraciones personalizadas, etc. hay que ver si vale la pena reinstalar todo de cero para pasarnos a un sistema de 64 bits y aprovechar un poco más de RAM (si tenemos 4GB instalados, pasarmos a ver unos 800MB adicionales, menos el incremento de uso de memoria de las aplicaciones que vimos 2 puntos más arriba). En mi caso, cambiar el kernel de Ubuntu para aprovechar los 4GB completos implicó unos minutos bajando e instalando el paquete, y una reiniciada al sistema. Hasta ahora no he tenido problemas utilizando 32 bits con PAE.
  • Como último punto, el no poder pasar a sistemas de 64 bits por política organizacional también puede ser una respuesta válida a la pregunta. Si tenemos licencias de algunas
    aplicaciones que puedan tener problemas o directamente no corran en un servidor de 64 bits, la desición está tomada antes de plantearla (especialmente si estamos hablando de costos elevados o de aplicaciones críticas para el negocio de la organización).

Referencias

Etiquetado , . Bookmark the permalink.

Una respuesta a 64GB de RAM en un sistema operativo de 32 bits

  1. Pablo Sánchez says:

    Todo un mito esto de la RAM, muy buena la aclaración!!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>