Logo Hardware.com.br
angeloshimabuko
angeloshimab... Veterano Registrado
933 Mensagens 67 Curtidas

Como funciona o gerenciamento de memória no Linux

#1 Por angeloshimab... 05/08/2007 - 12:21
sifion disse:
mto bom!!! parabens!!!

alguém sabe me dizer, que diretivas o sistema usa para a alocação de memória swap? quer dizer, se o sistema já está utilizando toda a memória física e mais uma parte da swap... q critérios o sistema utiliza para decidir qual informação vai para a swap e qual vai para a memória física?

abraço...


Primeiro, para facilitar o entendimento, seja a seguinte nomenclatura: (i) a memória física principal (RAM) é dividida em blocos chamados molduras de página (page frames); (ii) o espaço ocupado por um processo é dividido em blocos chamados páginas (pages). Assim, uma página pode ou não estar contida em uma moldura, i.e., pode ou não estar na memória principal.

No Linux, o algoritmo utilizado para atender às solicitações de memória feitas pelos processos (aplicações) chama-se page frame reclaiming algorithm - PFRA. Esse algoritmo foi desenhado para permitir a alocação de molduras de página em várias situações: muita memória disponível, pouca memória disponível e situação crítica (quando não é possível alocar molduras para um determinado processo). Como o jqueiroz já citou, esse algorimo baseia-se numa método chamado LRU (least recently used - menos recentemente usado).

Simplificadamente, método LRU é implementado usando-se duas listas encadeadas: (i) inactive_list e (ii) active_list. Quando uma página, ao ser varrida pelo gerenciador de memória (mm), é identificada como inativa, uma marca (flag) é colocada na respectiva tabela de páginas; se receber duas marcas, irá para a lista inactive_list. Quando o gerenciador de memória (normalmente um serviço do kernel denominado kswapd) necessita de memória, irá escolher as molduras que estão no fim da lista para transferir seu conteúdo para o espaço de troca (swap space).

O algoritmo PFRA leva em consideração vários fatores para paginação, tais como se a página está compartilhada entre vários processos, se pertence ao buffer ou à cache, se é reservada, etc.

Se uma condição crítica ocorre, i.e., não é possível alocar uma moldura de página para um processo, e o espaço de troca também está totalmente ocupado, o kernel utiliza uma função chamada out of memory killer, que irá escolher um processo e matá-lo, para liberar suas páginas. Essa escolha não é aleatória, e utiliza certos parâmetros, como: não pode ser uma kernel thread, o processo init (pid 1) ou o swapper (pid 0); não deve ser um processo que esteja acessando determinados tipos de hardware, como o servidor X; não deve ser um processo iniciado pelo root; e assim por diante.

Em condições normais o processo kswapd irá tentar manter um certo número de molduras disponíveis - esse número normalmente estará entre dois valores - pages_low e pages_high - calculados a partir de outro valor, chamado pages_min (pages_low = (5/4) * pages_min e pages_high = (3/2) * pages_min) que é determinado na inicialização do kernel e que depende da quantidade de memória física instalada.
angeloshimabuko
angeloshimab... Veterano Registrado
933 Mensagens 67 Curtidas
#16 Por angeloshimab...
28/08/2007 - 10:45
sifion disse:
mto bom!!! parabens!!!

alguém sabe me dizer, que diretivas o sistema usa para a alocação de memória swap? quer dizer, se o sistema já está utilizando toda a memória física e mais uma parte da swap... q critérios o sistema utiliza para decidir qual informação vai para a swap e qual vai para a memória física?

abraço...


Primeiro, para facilitar o entendimento, seja a seguinte nomenclatura: (i) a memória física principal (RAM) é dividida em blocos chamados molduras de página (page frames); (ii) o espaço ocupado por um processo é dividido em blocos chamados páginas (pages). Assim, uma página pode ou não estar contida em uma moldura, i.e., pode ou não estar na memória principal.

No Linux, o algoritmo utilizado para atender às solicitações de memória feitas pelos processos (aplicações) chama-se page frame reclaiming algorithm - PFRA. Esse algoritmo foi desenhado para permitir a alocação de molduras de página em várias situações: muita memória disponível, pouca memória disponível e situação crítica (quando não é possível alocar molduras para um determinado processo). Como o jqueiroz já citou, esse algorimo baseia-se numa método chamado LRU (least recently used - menos recentemente usado).

Simplificadamente, método LRU é implementado usando-se duas listas encadeadas: (i) inactive_list e (ii) active_list. Quando uma página, ao ser varrida pelo gerenciador de memória (mm), é identificada como inativa, uma marca (flag) é colocada na respectiva tabela de páginas; se receber duas marcas, irá para a lista inactive_list. Quando o gerenciador de memória (normalmente um serviço do kernel denominado kswapd) necessita de memória, irá escolher as molduras que estão no fim da lista para transferir seu conteúdo para o espaço de troca (swap space).

O algoritmo PFRA leva em consideração vários fatores para paginação, tais como se a página está compartilhada entre vários processos, se pertence ao buffer ou à cache, se é reservada, etc.

Se uma condição crítica ocorre, i.e., não é possível alocar uma moldura de página para um processo, e o espaço de troca também está totalmente ocupado, o kernel utiliza uma função chamada out of memory killer, que irá escolher um processo e matá-lo, para liberar suas páginas. Essa escolha não é aleatória, e utiliza certos parâmetros, como: não pode ser uma kernel thread, o processo init (pid 1) ou o swapper (pid 0); não deve ser um processo que esteja acessando determinados tipos de hardware, como o servidor X; não deve ser um processo iniciado pelo root; e assim por diante.

Em condições normais o processo kswapd irá tentar manter um certo número de molduras disponíveis - esse número normalmente estará entre dois valores - pages_low e pages_high - calculados a partir de outro valor, chamado pages_min (pages_low = (5/4) * pages_min e pages_high = (3/2) * pages_min) que é determinado na inicialização do kernel e que depende da quantidade de memória física instalada.
wuemura
wuemura Tô em todas Registrado
1.1K Mensagens 83 Curtidas
#18 Por wuemura
21/09/2007 - 00:18
Não sei como funciona nas outras distribuições, mas em distribuições baseadas em Red Hat não é necessário fazer o comando echo "20" > /proc/sys/vm/swappiness, que é uma herança do 2.2 e 2.4 big_green.png

Todas as opções estão disponíveis via sysctl, por exemplo:
[root@tompc etc]# sysctl -A|grep swappiness
vm.swappiness = 10
Agora adicione o comando no /etc/sysctl.conf, ex:
vm.swappiness = 10
emtudo
emtudo Super Participante Registrado
851 Mensagens 4 Curtidas
#19 Por emtudo
21/11/2007 - 00:11
ótima dica...
so me trouxe confusao no topico se era uma pergunta ou uma dica, se vc editar e colocar "[dica]" antes no titulo do topico fica mais facil de entender?

mas ficou otimo, bom eu gostei...

eu tenho 2025 Giga de memoria fisica, e o meu arquivo tinha um valor de 60, foi bom, pq eu tinha estranhando uma certa vez ele usar a swap ao inves de deletar arquivos do cache. mas agora eu acho que entendi, coloquei apenas 20 neste arquivo, para diminuir a prioridade da swap
mahapra
mahapra Novo Membro Registrado
4 Mensagens 0 Curtidas
#20 Por mahapra
23/02/2008 - 01:01
Pessoal desculpem colocar mais uma pergunta aqui após 95 dias de inatividade deste tópico mas é que acho que vai completar este assunto se pudermos encerrar falando algo sobre os buffers e também sobre o comando vmstat.

Abaixo mostro a saida de um comando "vmstat" o qual exibe 03 situações da RAM em intervalos de 1 segundo.

Tenho 512MB/RAM com 1GB de partição de swap. Podemos ver que 209,232MB esta sendo usado como cache (cache de disco). Como já foi explicado acima, isso é útil pois agiliza muito a recarga de programas usados recentemente, caso contrário teriam que ser lidos novamente no disco ou na partição de swap.

A questão é : Pra que serve aquela parte destinada a buffers ?
seriam por acaso buffers de arquivos abertos? ou o que mais?



:$ vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 209020 15028 209232 0 0 36 9 378 185 3 0 96 1
0 0 0 209020 15028 209232 0 0 0 0 359 237 1 0 99 0
0 0 0 209020 15036 209224 0 0 0 12 354 212 0 0 100 0

Descrição dos campos:
r: The number of processes waiting for run time.
b: The number of processes in uninterruptible sleep.

swpd: quantidade de memória virtual usada
free: quantidade de memória livre
buff: quantidade de memória usada como buffers
cache: quantidade de memória usada como cache
inact: quantidade de memória inativa (exibido com a opção -a)
active: quantidade de memória ativa (exibido com a opção -a)

si: "swapped in" quantidade de memória trazida do swap em disco.
so: "swapped out" quantidade de memória armazenada no swap em disco.



Outro teste: Eu judiei, abri trocentas janelas de aplicativos pra ver se o bicho abria o bico... mas mesmo assim, é muito difícil ver alguma indicação de uso da área de swap, parece que os 512MB dão conta do recado sem precisar recorrer ao swap em disco!!!
" Êta gerenciamento bão! " cap_feceiro.png:

agradeço a todos!
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal