CODEDS Ensino e Consultoria

Como funciona o gerenciamento de memória no Linux

Como funciona o gerenciamento de memória no Linux

Vou mostrar neste artigo como funciona o gerenciamento de memória no Linux, inclusive com dicas para administrar a memória SWAP.

O Linux tem uma forma bastante interessante de gerenciar a memória. O sistema de fato não necessita de muita memória para sua operação e conforme os programas vão sendo abertos, mais memória vai sendo alocada de forma mais eficiente. O sistema lida bem em casos de sobras de memória, utilizando os MBytes livres dos módulos como cache de disco. Cache de disco são porções da memória RAM usadas por arquivos e bibliotecas lidos do HD que têm uma maior probabilidade de serem acessados, uma espécie de Prefetch, o que melhora o desempenho do sistema. 

É fácil comprovar a eficiência o cache de disco: abra um programa como o Firefox ou o OpenOffice; o primeiro carregamento é demorado, certo? Agora feche o programa e abra-o novamente: levou muito menos tempo, né? Esse recurso está presente também no Windows e no Vista ele foi melhorado. Por isso não se assuste se no Ksysguard do KDE você verificar que sua memória RAM estiver quase que totalmente ocupada, mesmo com poucos programas abertos: é o cache de disco que está em ação usando parte da memória livre que você dispõe. 

 Além do Ksysguard, temos o Monitor do sistema no Gnome como programas gráficos de monitoramento dos recursos do sistema. Via terminal temos o top e o free. O top detalha os processos em execução além de outras informações como o estado dos processos, memória consumida por cada um, uptime do sistema e recursos de memória. O free (o parâmetro -m exibe as informações em MBytes) exibe informações precisas sobre o uso dos recursos de memória do sistema. Vamos ver ele na prática, no meu caso tenho 2,25GB de RAM física, 2 GB de espaço em disco para a partição SWAP e poucos programas abertos. A distribuição usada é o Debian Etch Kernel 2.6.18-4.

 No momento que foi tirada esta SS, 591MB de memória física estavam sendo utilizados, mas na verdade eu não tinha 591MB utilizados pelos programas abertos e pelo sistema em geral. 347 MB estavam sendo cacheados, ou seja, sendo usados para cache de disco (cached) e 51MB estavam sendo usado para buffers de memória. Fazendo as contas, descontando os buffers e cache do sistema, a memória utilizada para o uso e manutenção do funcionamento do sistema no momento era de 193 MB:

591 (memória física utilizada) - 398 (buffers + cache) = 193 MB
 
Se eu abrir o Monitor do sistema do Gnome (um front-end para o comando top), serão reportados 193MB em uso pelo sistema.

 

Ao contrário do Ksysguard, o Monitor do sistema do Gnome reporta a memória em uso, não incluindo a memória utilizada como cache de disco.
 
Conforme mais memória é requisitada, o sistema passa a abrir mão do cache de disco e passa a mover arquivos e bibliotecas não usadas há algum tempo da memória RAM para a memória virtual ou swap, liberando memória física para os aplicativos. Há um pequeno impasse no uso de memória SWAP no Linux. O Swap é visto com maus olhos por causa do Windows 98, que gerencia a memória virtual de forma totalmente errádica. No 98, mesmo com memória física sobrando o sistema teima em fazer swap, que é feito no arquivo Win386.swp, prejudicando o desempenho, já que a leitura dos dados da memória SWAP (que é feita em um arquivo no HD no caso do Windows) é mais morosa do que a leitura na memória RAM. Era possível corrigir essa deficiência com a instrução "ConservativeSwapfileUsage=1" no System.ini, mas mesmo assim o Windows 98 (e Me) é péssimo para gerenciar a memória. Na família NT o gerenciamento de memória é mais eficiente e o uso do arquivo de SWAP é mais racional, aliás no Windows NT4/2000/XP/2003/Vista e 2008 o arquivo de paginação (pagefile.sys) é utilizado também para uso interno do sistema, como as informações de despejo de memória.
 
O Linux possui algoritmos refinados que administram o uso de memória SWAP somente quando necessário, especialmente no Kernel 2.6. Numa máquina com 512MB ou mais o uso de SWAP não é requisitado o tempo todo, o que não acontece numa máquina com 256 MB. Mesmo assim em algumas distros fazem o uso do SWAP em máquinas com fartura de memória, mesmo que em pequena quantidade. No caso dos dados movidos para o SWAP sejam de repente requisitados, haverá uma pequena demora na leitura, pois como já dito, a leitura no HD é mais demorada do que o acesso na memória física.
 
Vou transcrever aqui um trecho de um dos livros do Carlos E. Morimoto que ensina como administrar o uso do SWAP apenas quando necessário.
 
"...
 
Ainda assim (ao usar uma distribuição com o Kernel 2.6), você pode configurar o comportamento do sistema em relação à memória SWAP através de um parâmetro do Kernel, definindo através do arquivo "/proc/sys/vm/swappiness". Este arquivo contém um número de 0 a 100, que determina a predisposição do sistema a usar swap. Um número baixo faz com que ele deixe para usar swap apenas em situações extremas (configuração adequada a micros com muita RAM), enquanto um número mais alto faz com que ele use mais swap, o que mantém mais memória RAM livre para uso do cache de disco, melhorando o desempenho em micros com pouca memória.
 
Se você tem um micro com 1 GB de RAM e quer que o sistema quase nunca use swap, use:
 
# echo "20" > /proc/sys/vm/swappiness
 
Em micros com 256 MB ou menos, aumentar o uso de swap mantém mais memória disponível para abrir novos aplicativos e fazer cache de disco. O programa que está sendo usado no momento e novos programas abertos ficam mais rápidos mas, em troca, programas minimizados a muito tempo são movidos para a swap e demoram mais para responder quando reativados. Para aumentar o uso de swap, use:
 
# echo "80" > /proc/sys/vm/swappiness
 
Para tornar a alteração definitiva, adicione o comando em algum arquivo de inicialização do sistema, como o "/etc/rc.d/rc.local" ou "/etc/init.d/bootmisc.sh".
 
..."
Linux Ferramentas Técnicas 2ª Edição - pág 112.
 
Pessoalmente, recomendo o uso de uma partição SWAP, mesmo que seja de 512MB para uso em casos de falta de memória, principalmente para as máquinas usadas em aplicações pesadas como edição de áudio, vídeo e imagem. Claro que em situações de fartura, digamos a partir de 1GB, a partição de SWAP pode ter uns 256 a 512MB reservados. Nos casos de máquinas que possuam menos de 512MB, recomendo o uso de SWAP com tamanho a partir de 1GB para que o sistema tenha para onde correr no caso de falta de memória física, já que na falta de memória RAM para os aplicativos e a ausência de uma partição SWAP, o sistema não terá para onde recorrer e os programas começarão a serem fechados por falta de memória; na pior das hipóteses o travamento do sistema nestas condições é inevitável.
 
Caso você tenha se arrependido em não ter criado uma partição SWAP e agora se vê numa situação delicada, é possível criar um arquivo de SWAP na raiz do sistema. Digamos que você queira 512MB de memória SWAP, abra um terminal como root e digite:
 
# dd if=/dev/zero of=/swap bs=1024 count=524288
# mkswap /swap
# swapon /swap
 
O valor de "count" não precisa ser exato (524288 equivalem a 512MB), poderia ser o valor 500000 (500000 = ~488MB). Esta é uma solução temporária e menos eficiente, já que estamos criando um arquivo de swap que funciona de forma semelhante ao que é encontrado no Windows, embora de forma mais eficiente. Uma partição SWAP já é organizada especificamente para a tarefa de memória virtual

 

Deixe uma resposta

Fechar Menu