Desativa o dynamic_pager do Mac?

6

Eu li este post sobre o gerenciamento de memória no Mac OS X: link

Eu gostaria da sua opinião sobre o assunto.

Eu tenho "apenas" 4GB de memória, então existe a possibilidade de um pânico no kernel.

Eu tenho um disco giratório (ao contrário de um SSD) e vejo bolas de praia ocasionais, às vezes até girando meu HD externo antes de continuar.

Ele diz que nenhuma troca é usada no momento. Isso significa que desabilitar o dynamic_pager não fará nada? Ele tem algumas páginas.

Quão seguro é apenas experimentá-lo? Eu poderia talvez escrever um script que reabilite o pager quando a memória fica baixa?

[update]: Fim do dia, 26MB de swap, muito mais entradas e saídas de páginas e muita memória inativa.

    
por Pepijn 27.04.2012 / 13:04

1 resposta

8

OS X tem três problemas que contribuem para isso:

  1. Por padrão, todos os dados gravados ou lidos do disco são armazenados em cache na RAM com uma prioridade mais alta do que os dados recentes do programa. Os aplicativos podem desabilitar isso em uma base por descritor com a opção F_NOCACHE para fcntl() , mas poucos o fazem. Como resultado, grandes quantidades de atividade de disco causam a perda de memória que não está sendo usada naquele momento. Isso cria mais atividade de disco tanto para a troca quanto para a leitura da memória em momentos posteriores, além da atividade original do disco.

  2. O HFS + não manipula bem o acesso simultâneo a arquivos. Em particular, abrir e fechar muitos arquivos diferentes de uma só vez cria uma contenção tremenda e praticamente apenas uma operação de abertura / fechamento pode acontecer de cada vez.

  3. Vários aplicativos do OS X distribuem o acesso ao disco em vários arquivos pequenos.

Como resultado, quando dois ou mais aplicativos estão tentando acessar vários arquivos de uma vez, a carga de E / S do disco aumenta exponencialmente à medida que a atividade de troca compete com os aplicativos de E / S.

Desativar o paginador dinâmico pode impedir a parte inicial dessa curva exponencial, removendo a capacidade de enviar páginas de aplicativos particulares / sujos para o disco. Em vez disso, o sistema provavelmente removerá páginas de arquivos mapeados públicos / limpos (executáveis, bibliotecas etc.) e dos dados do arquivo em cache que provavelmente não deveriam ter sido armazenados em cache. Se isso realmente melhora ou não o desempenho, dependerá muito de quais aplicativos você está usando. O Safari, por exemplo, é extremamente ruim em gerenciar seu disco de E / S, então imagino que isso ajudaria.

O problema ocorreria se a quantidade de memória RAM necessária realmente exceda a quantidade disponível: uma pane de pânico é uma maneira muito abrupta de encerrar o dia. Mas se você não estiver editando arquivos grandes ou fazendo coisas inerentemente de memória intensiva, isso pode ser raro o suficiente para considerar o risco.

A propósito, você pode usar o comando lsof para ver quais arquivos são abertos por quais processos e o comando fs_usage para ver um log em execução das operações de arquivo. Ambos funcionam melhor quando são executados como root ou via sudo .

    
por 01.05.2012 / 22:32