Kernel: Ativando o suporte a mais de 1 GB de memória RAM

Kernel: Ativando o suporte a mais de 1 GB de memória RAM

Tradicionalmente, os processadores x86 utilizam uma tabela de 32 bits para o endereçamento da memória RAM, e por isso são capazes de endereçar até 4 GB de memória (dois elevado à 32º potência são 4.294.967.296 endereços, um por byte de memória).

Esta limitação existe desde o 386. Na época, ninguém se importava muito com isso, pois a memória RAM era muito cara e era incomum alguém usar mais do que 8 ou 16 MB.

A partir da década de 90, os 4 GB começaram a ser um limitante para servidores de bancos de dados e outras aplicações de grande porte, que consomem grandes quantidades de memória. Surgiu então o PAE (Physical Address Extension), um hack implementado pela Intel em alguns processadores a partir do Pentium Pro. O PAE consiste numa segunda tabela de endereços, com 4 bits adicionais, que permitem endereçar 16 páginas de memória, cada uma com 4 GB.

Com o PAE, passa a ser possível endereçar até 64 GB de memória. A desvantagem é que o processador continua sendo capaz de acessar apenas 4 GB por vez e o chaveamento entre diferentes páginas de memória toma um certo tempo, que acaba prejudicando bastante o desempenho.

Mesmo usando o PAE, a maioria dos aplicativos continua tendo acesso a 4 GB, a vantagem é que passa a ser possível executar vários aplicativos diferentes, cada um consumindo até 4 GB de memória sem o uso de memória virtual. Apenas alguns aplicativos cuidadosamente desenvolvidos são capazes de distribuir dados entre diferentes páginas de memória, realmente aproveitando a memória adicional.

O PAE pode ser encontrado apenas em alguns processadores Intel destinados a servidores, basicamente apenas o Pentium Pro e o Xeon. Para que funcione, é necessário que exista suporte também no chipset da placa mãe e no sistema operacional usado.

A solução definitiva para quem precisa de mais de 4 GB de memória é usar um processador de 64 bits, que trabalham com tabelas de endereçamento de 64 bits e por isso são capazes de acessar quantidades praticamente ilimitadas de memória.

Ao utilizar um processador de 32 bits, o Linux oferece suporte nativo a até 4 GB de memória usando o modo normal de operação do processador e a até 64 GB usando o PAE. Ou seja, ele simplesmente acompanha o suporte disponível no hardware, sem nenhuma limitação adicional.

Para melhorar o desempenho do sistema em máquinas antigas, que utilizam 1 GB de memória ou menos, existe uma terceira opção, onde o Kernel endereça apenas 1 GB de memória, sendo que 960 MB ficam disponíveis para os aplicativos e o restante é reservado para uso do Kernel. Neste modo de operação, o comando “free” vai reportar que existem apenas 960 MB de memória disponíveis, mesmo que você possua 1 GB ou mais.

É possível escolher entre as três opções ao compilar o Kernel, na opção “Processor Type and Features > High Memory Support”. Até pouco tempo, a maioria das distribuições vinha com o suporte a apenas 1 GB ativado por padrão. Nestes casos você precisa recompilar o Kernel, usando a opção “4 GB”.

Note que ao recompilar o Kernel padrão da distribuição (sem alterar a versão), você pode apenas gerar o executável principal e fazer as modificações necessárias na configuração do lilo ou grub para que ele seja inicializável, sem precisar gerar os módulos.

qconf

A desvantagem de ativar o suporte a 4 GB é que o sistema ficará um pouco mais lento em micros com menos de 1 GB de memória (justamente por isso existe a primeira opção). O suporte a 64 GB só pode ser ativado caso você esteja usando um Intel Xeon ou outro processador com suporte ao PAE. Um Kernel gerado com esta opção não vai dar boot em processadores que não são compatíveis com o recurso.

A partir daí, o sistema deve ser capaz de ativar toda a memória instalada. Em caso de problemas, você pode forçar o uso de toda a memória disponível adicionando a opção “mem=2048M” (onde o 2048 indica a quantidade de memória instalada) na linha append do “/etc/lilo.conf”:

append=”mem=2048″

Ao usar o Grub, use a opção na linha referente ao novo Kernel no arquivo “/boot/grub/menu.lst“, como em:

kernel /boot/vmlinuz-2.6.8hm root=/dev/hda1 ro mem=2048

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X