Soporte a mas de 4GB de RAM en GNU/Linux Ubuntu de 32 bits

Introducción.

Es conocido que la arquitectura de 32 bits (i686) no puede direccionar 4GB o mas de memoria RAM (~2.8GB) aunque esta se encuentre físicamente instalada en la máquina.

Una solución para este problema consiste en utilizar un sistema operativo basado en una arquitectura de 64 bits (x64), la cual le permite direccionar una cantidad mayor de memoria.  El uso de esta arquitectura trae consigo algunos problemas que pueden ser incómodos en equipos de escritorio mas no en servidores.

  • El gasto de memoria RAM del sistema operativo es mayor.
  • Algunas aplicaciones de 32 bits no funcionan correctamente, por ejemplo el plugin de Flash.
  • Algunas aplicaciones y librerías que se distribuyen de manera binaria no se encuentran disponibles para 64 bits.

Finalmente he llegado a la conclusión que sólo debe utilizarse un sistema de 64 bits cuando realmente se amerite, en cualquier otro caso se deberá utilizar uno de 32 bits.

  • Servidores en producción.
  • Equipos que contengan máquinas virtuales sobre las cuales se ejecuten sistemas operativos de 64 bits.
  • Equipos con 4GB o mas de memoria RAM.

El último caso incluía también a las máquinas de escritorio que contaban con 4GB o mas de memoria RAM, es decir, era necesario instalarles un sistema operativo de 64 bits de lo contrario no podrían utilizar la totalidad de la memoria disponible.

Para evitar esto es posible utilizar un kernel con soporte para PAE (Physical Address Extension) sobre un sistema operativo de 32 bits.  Con esto se amplía el espacio de direcciones hasta 36 bits lo que permite direccionar hasta 64GB de memoria RAM.

A continuación se detallan los pasos necesarios para instalar el kernel con soporte para PAE en un computador de escritorio que utiliza GNU/Linux Ubuntu 10.10 de 32 bits como sistema operativo.

Procedimiento.

Inicialmente se cuenta con el kernel de 32 bits instalado por defecto.

$ uname -a

Linux jimezam-ultra 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 i686 GNU/Linux

Este kernel no permite direccionar la totalidad de la memoria RAM a pesar de que el equipo cuenta con 4GB instalados físicamente.

$ free -m

total       used       free     shared    buffers     cached
Mem:          2926 762       2163          0         50        404
-/+ buffers/cache:        307       2618
Swap:         4769          0       4769

Se procede con la instalación del kernel con soporte para PAE.

$ sudo aptitude install linux-generic-pae linux-headers-generic-pae linux-image-generic-pae

Es necesario reiniciar la máquina para que el nuevo kernel recién instalado sea tenido en cuenta.

$ sudo reboot

El nuevo kernel sigue siendo de 32 bits pero ahora incluye el soporte para PAE.

$ uname -a

Linux jimezam-ultra 2.6.35-25-generic-pae #44-Ubuntu SMP Fri Jan 21 19:01:46 UTC 2011 i686 GNU/Linux

Ahora es posible apreciar como la memoria direccionada es mayor en comparación con el kernel original.

$ free -m

total       used       free     shared    buffers     cached
Mem:          3922 898       3024          0         52        527
-/+ buffers/cache:        317       3604
Swap:         4769          0       4769

Enlaces.