O Linux não descarta os Caches FS. Em vez disso, a memória começa a trocar

4

Estou bastante confuso sobre esse comportamento de cache de memória do Linux.

             total       used       free     shared    buffers     cached
Mem:         15953      14188       1765         64         37      11504
-/+ buffers/cache:       2645      13308
Swap:         2047       1332        715

Não deve ter prioridade de memória não cache contra caches? Em outras palavras: Por que a máquina está trocando para o disco, em vez de abandonar caches.

Posso mudar esse comportamento? Se sim, como?

    
por noqqe 27.05.2015 / 12:39

1 resposta

8

O algoritmo de troca de linux funciona com o conceito de "últimas páginas usadas recentemente". Cada página na memória virtual tem uma idade associada a ela. Se a página estiver sendo acessada com frequência, essa página deverá ter uma idade relativamente pequena, enquanto se uma página não estiver sendo acessada, essa página ficará mais antiga. Quanto mais antigas as páginas ficarem, maior a probabilidade de serem trocadas.

Então, se o kernel troca coisas, é porque a idade dessas páginas é (em comparação com as outras) antigas. Se houver memória física suficiente para todas as páginas, independentemente da idade, nada será trocado.

O kernel está configurado para lidar com seus recursos, como memória e swap, da maneira mais eficiente possível.

Eu não acho que você deva mudar esse comportamento. Mas, se você quiser, você pode alterar o swap do sistema. Uma configuração de troca de 0 significa que o disco será evitado a menos que seja absolutamente necessário (você fica sem memória).

Na Documentação do Kernel sobre o valor de swappiness :

This control is used to define how aggressive the kernel will swap memory pages. Higher values will increase agressiveness, lower values decrease the amount of swap. A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone.

No código-fonte do kernel do Linux, o arquivo vmscan.c manipula o valor do swappiness . Aqui está a parte interessting:

2018         /*
2019          * With swappiness at 100, anonymous and file have the same priority.
2020          * This scanning priority is essentially the inverse of IO cost.
2021          */
2022         anon_prio = swappiness;
2023         file_prio = 200 - anon_prio;
  • Páginas anônimas são mapeamentos de memória sem nenhum arquivo ou dispositivo. É assim que os programas alocam memória do sistema operacional para uso de coisas como pilha e heap.
  • As páginas de arquivo espelham o conteúdo de um arquivo existente.

Como você vê no snippet do código fonte acima, a prioridade para trocar páginas de arquivos é (com um valor padrão de 60) maior do que trocar páginas anônimas. Mas, se definido como 100, os dois valores terão a mesma prioridade. Se definido como 0, a diferença de prioridade será a maior possível.

Você pode definir o swappiness da seguinte maneira:

echo n >/proc/sys/vm/swappiness

... onde n é o valor de 0 a 100.

    
por 27.05.2015 / 14:07