Como desativar o Mac OS X de usar swap quando ainda há memória “Inativa”?

Como desativar o Mac OS X de usar swap quando ainda há memória “Inativa”?

Um fenômeno comum no meu uso diário (e em vários outros de acordo com vários posts na internet) do OS X, o sistema parece ficar lento sempre que não há mais memória "Livre" disponível. Supostamente, isso se deve à troca, já que a atividade intensa do disco é aparente e o vm_stat relata muitas páginas. (Corrija-me do errado)

No entanto, a quantidade de memória RAM "Inativa" é normalmente em torno de 12,5% -25% de toda a memória disponível (^1.) quando a troca inicia/ocorre/termina.

De acordo comhttp://support.apple.com/kb/ht1342:

Memória inativa

Essas informações na memória não estão sendo usadas ativamente, mas foram usadas recentemente.

Por exemplo, se você estiver usando o Mail e depois sair dele, a RAM que o Mail estava usando será marcada como memória inativa. Esta memória inativa está disponível para uso por outro aplicativo, assim como a memória livre. No entanto, se você abrir o Mail antes que sua memória inativa seja usada por um aplicativo diferente, o Mail abrirá mais rapidamente porque sua memória inativa será convertida em memória ativa, em vez de carregar o Mail do disco rígido mais lento.

E de acordo comhttp://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html:

A lista inativa contém páginas que residem atualmente na memória física, mas que não foram acessadas recentemente. Estas páginas contêm dados válidos, maspode ser liberado da memória a qualquer momento.

Então, basicamente: Quando um programa é encerrado, sua memória fica marcada como Inativa e pode ser reivindicada a qualquer momento. Ainda assim, o OS X preferirá começar a trocar a memória para o arquivo Swap em vez de apenas reivindicar essa memória, sempre que a memória "Livre" ficar baixa.

Por que? Qual é a vantagem desse comportamento em relação, digamos, à liberação instantânea da memória inativa e nem mesmo ao toque no arquivo de troca? Algumas fontes (^2.) indicam que o OS X paginaria a memória "Inativa" para trocar antes de liberá-la, mas isso não faz sentido agora, faz se a memóriapode ser liberado da memória a qualquer momento? Trocar é caro, liberar é barato, né?

Esse comportamento pode ser alterado usando alguma preferência ou hack conhecido? (De preferência um que não inclua a desativação completa do swap/dynamic_pager e a reinicialização...)

Eu aprecio opurgacomando, bem como o conceito de reparar permissões de disco para forçar alguma memória livre, mas essas são maneiras de forçar dolorosamente mais memória livre do que realmente consertar a lógica de decisão de troca/liberação ...

Aliás, uma pergunta semelhante foi feita aqui:http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/e aqui:http://hintsforums.macworld.com/showthread.php?t=87688mas mesmo que os OPs tenham feito novamente a pergunta central, nenhuma das respostas aborda uma resposta a ela...

^1.ATUALIZAÇÃO 17 de março de 2012Desde que postei esta pergunta pela primeira vez, passei de 4 GB para 8 GB de RAM instalada e o problema permanece. A quantidade de RAM "Inativa" era de 0,5 GB a 1,0 GB antes e agora está normalmente em torno de 1,0 a 2,0 GB quando a troca inicia/ocorre/termina, ou seja, parece que cerca de 12,5% a 25% da RAM é preservada como Inativa pelo osx lógica do kernel.

^2. Por exemplohttps://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work-day:

Depois que toda a sua memória for usada (a memória livre é 0), o sistema operacional gravará a memória inativa no arquivo de troca para liberar mais espaço na memória ativa.

ATUALIZAÇÃO 17 de março de 2012

Aqui está um resumo dos métodos que foram sugeridos para ajudar até agora:

Opurgacomando

"Usado para aproximar as condições iniciais de inicialização com um cache de buffer de disco frio para análise de desempenho. Não afeta a memória anônima que foi alocada por meio de malloc, vm_allocate, etc".

Isso é útil para evitar que o osx troque o cache do disco (o que é ridículo que o osx realmente faça isso em primeiro lugar), mas com a desvantagem de que o cache do disco seja liberado, o que significa que se o cache do disco não estiver prestes a ser trocado, simplesmente acabaria com um cache de buffer de disco frio, provavelmente afetando negativamente o desempenho.

OAplicativo FreeMemorye/ouReparando permissões de disco para forçar alguma memória livre

Não ajudaliberandoqualquer memória, movendo apenas alguns gigabytes de conteúdo de memória da RAM para o HD. No final, isso causa muitas trocas quando tento usar os aplicativos que estavam abertos enquanto liberava memória, já que muitas de suas VMs agora estão em troca.

Acelerando a alocação de swap usandoDynamicpagerwrapper

Parece uma boa coisa a fazer para acelerar o uso da troca, mas não resolve o problema da troca do osx enquanto ainda há memória inativa.

Desativando a troca desabilitandopager dinâmicoe reiniciando

Isso forçará o osx a não usar swap devido ao preço do sistema travar quando toda a memória for usada. Não é uma alternativa viável...

Desativando swap usandoum Dynamicpager hackeado

Semelhante à desativação do dynamicpager acima, alguns trechos dos comentários da postagem do blog indicam que esta não é uma solução viável: "A memória inativa está alta como sempre". "quando seu sistema está ficando sem memória, todo o sistema trava...", "se você consumir toda a memória do mac, a máquina provavelmente irá travar"

Resumindo, ainda não conheço uma maneira de desabilitar o Mac OS X de usar swap quando ainda há memória "Inativa". Se não for possível, talvez pelo menos haja uma explicação em algum lugar de por que o osx prefere trocar a memória quepode ser liberado da memória a qualquer momento?

Responder1

Por definição, memória inativa é a memória que está pronta para ser paginada, e paginá-la pode envolver gravá-la em swap.Isso não é nenhum tipo de problemaou questão que deve ser otimizada; é de fatoOS X funcionando conforme projetado.

Infelizmente, os redatores de suporte técnico não são desenvolvedores de kernel, e a citação do artigo de suporte da Base de Conhecimento da Apple está errada quando afirma que a memória inativa é a memória não utilizada pelos programas. Quando você sai de um programa, toda a sua memória residente fica livre; não para em Inativo. No entanto, o segundo link para osite do desenvolvedordescrever como funciona o gerenciamento de memória é um bom recurso, se for lido na íntegra.

Existem muitos equívocos sobre o que significa "memória inativa" no OS X. Ao contrário dos equívocos, nem toda memória inativa está vazia, não utilizada, em cache ou eliminável. Na verdade, a memória ativa também pode ser armazenada em cache ou eliminada, se tiver sido acessada recentemente. Grande parte da memória inativa também contém dados que não podem ser simplesmente descartados. Se fosse descartado, os programas travariam, porque as páginas descartadas conteriam dados válidos (como diz a citação do desenvolvedor do OS X) e os programas esperam que os dados armazenados na memória (virtual) não simplesmente desapareçam.

A memória inativa contém os mesmos tipos de dados que a memória ativa. A única diferença é que o OS X notou que alguns pedaços de memória não foram lidos ou gravados há algum tempo.

A razão pela qual o OS X classifica algumas memórias como inativas e outras regiões como "ativas" tem a ver com a paginação. Quando a memória ficar fraca, você terá que paginar alguns dados. A questão é: quais dados? Se você paginar os dados que um programa precisa imediatamente novamente, ele perderá tempo e não realizará nada. Então você deseja paginar a memória que um programa não precisará usar novamente imediatamente.

Antecipar quais páginas provavelmente serão desnecessárias no futuro é difícil porque um programa pode usar sua memória virtual da maneira que quiser e não informar nada ao sistema operacional sobre quais são seus planos. Mas, como heurística, a maioria dos programas é "pegajosa" no uso da memória; se eles não usam alguma memória há algum tempo, provavelmente continuarão sem usar essa memória e provavelmente continuarão usando a memória que usaram recentemente.

Portanto, quando o sistema operacional decide paginar alguns dados, é necessária a estratégia de trocar páginas que não foram usadas recentemente. É por isso que o OS X classifica a memória ocupada pelos programas em duas pilhas de “ativa” e “inativa”. Olink postado acimaao site do desenvolvedor, se lido na íntegra, informa como esse processo acontece:

  • Quando a memória começa a ficar fraca, o sistema operacional começa a percorrer as páginas de memória ativa e define um sinalizador em cada uma.
  • Se um programa lê ou grava em uma página, o sinalizador é desmarcado.
  • Se, após algum atraso, o sinalizador não for apagado, essa página será classificada na pilha "inativa".
  • Se uma página “inativa” for acessada por seu programa, ela será colocada de volta na pilha “ativa”.
  • Quando a memória acaba, as páginas "inativas" são paginadas.

Observe que esse processo de classificação para decidir qual memória trocar é semelhante em todos os sistemas operacionais modernos. O Linux tem as mesmas duas listas de páginas ativas e inativas, conforme descrito emCompreendendo o gerenciador de memória virtual Linux. O Windows pode usar algo um pouco diferente com mais de duas classes de atualidade; Não consigo encontrar uma descrição técnica recente e confiável no momento. Mais implementações são discutidas na página da Wikipedia intitulada"Algoritmo de substituição de página". A única diferença com o OS X era como as estatísticas eram mostradas: alguém decidiu que seria uma boa ideia mostrar números separados para ativos e inativos no topMonitor de atividades. Em retrospectiva, esta provavelmente não foi uma ideia tão boa (e isso mudou no OS X 10.9).

Este processo de configuração e limpeza de sinalizadores e manutenção de heaps ativos/inativos consome um pouco de energia do processador. Por esse motivo, o OS X não faz isso quando há muita memória livre. Portanto, os primeiros programas que você iniciar aparecerão como memória "ativa" até que a memória livre comece a ficar baixa.

Portanto, à medida que você começa do zero e abre mais e mais programas, pode esperar ver a seguinte progressão no Activity Monitor:

  • Primeiro, há muita memória “livre” e muito pouca memória inativa. Isso ocorre porque o sinalizador de memória ainda não começou a ser executado.
  • À medida que a quantidade de memória livre diminui, o OS X começará a executar seu sinalizador de memória e você começará a ver a quantidade de "inativos" aumentando. Cada bit “inativo” estava anteriormente “ativo”.
  • Quando você ficar sem memória livre, as páginas da pilha "inativas" serão paginadas. O sinalizador de memória também estará funcionando a todo vapor, classificando a memória em ativa e inativa. Normalmente, você verá muitos "inativos" enquanto o swap está sendo gravado, indicando que o sinalizador de memória está fazendo o que deveria.

Páginasdeveser classificados como inativos antes de serem trocados. Isso é o que significa a citação do site Apple Developer quando diz “Essas páginas contêm dados válidos, mas podem ser liberadas da memória a qualquer momento”. Isso se opõe às páginas Ativas, que não serão liberadas até serem rebaixadas para Inativas. Existem várias formas de liberar páginas; se a página foi mapeada a partir de um arquivo e não foi modificada, ela pode ser excluída imediatamente e relida sob demanda. Da mesma forma, se for uma memória que foi trocada anteriormente e não modificada desde que foi trocada. Os programas também podem alocar explicitamente cache e memória purgável, para armazenar dados que podem ser esquecidos e recriados sob demanda (mas a razão pela qual um programa alocaria cache é se levar um tempo significativo para recriar esses dados.) Mas grande parte da memória inativa é memória na qual os programas gravaram dados válidos, e a paginação desses dados requer gravação para troca.

Portanto, observar a quantidade de memória "inativa" no Activity Monitor e ver que há muita memória inativa ao mesmo tempo em que o computador está gravando para swap, apenas informa que o sistema está funcionando conforme projetado.

Também existe uma confusão entre memória inativa e cache de arquivos. Não sei por que existe essa confusão, porque o Activity Monitor já os lista em títulos separados. Cache é a memória usada para armazenar dados recentes que foram lidos ou gravados no sistema de arquivos, caso precisem ser acessados ​​novamente. Quando a memória está baixa, o OS X tende a se livrar do cache primeiro. Se você tiver swap thrashing e o Monitor de atividades mostrar uma grande pilha de cache (NÃO inativo), entãoqueseria um problema. Mas a memória inativa é uma coisa diferente.

Em caso de dúvida, ignore a distinção entre “inativo” e “ativo”. Considere-os como um pedaço de "memória usada por programas" e some os dois números. Isso é o que todos os outros sistemas operacionais fazem quando informam sobre o uso de memória.

NOTA para OS X 10.9:O Mavericks introduziu a “compressão de memória” que é, mais ou menos, outra camada de troca. As páginas ativas agora são classificadas como inativas, depois compactadas (que podem aparecer como memória do Kernel dependendo das ferramentas que você está usando) e depois gravadas para troca conforme o uso da memória aumenta. O Mavericks também parou de mostrar números separados para ativos e inativos no Activity Monitor, uma vez que não é algo útil de se olhar, especialmente devido aos equívocos que o cercam.

Responder2

Atualmente não há uma maneira fácil de ajustar o comportamento de troca (ou assim é chamado) do macos X. Existem alguns hacks disponíveis (requer conta de desenvolvedor e SDK):

http://cestdelamerde.com/archives/22-Killing-Mac-OS-X-Swapping-How-To-Disable-dynamic_pager.html

http://dropsafe.crypticide.com/article/3848

Boa sorte!

Pós-escrito. Acho que você pode querer ler esta resposta (também minha) para ter uma revisão mais geral de quais memórias ativas, inativas e outras no MacOSX:Memória com fio vs. memória ativa no OS X

Responder3

Não é uma solução permanente, mas pelo menos pode ajudar a recuperar alguma memória inativa, evitando potencialmente a temida troca:http://itunes.apple.com/nz/app/freememory/id460931672?mt=12

A ferramenta é gratuita e muito fácil de usar. Uma vez iniciado, selecione a opção "Liberar memória" na barra de ferramentas/menu do sistema.

Ao contrário da exibição de memória do ActivityMonitor, ele mostra apenas memória livre, o que parece ser um melhor indicador de troca acontecendo ou não.

Responder4

Aposto que não há resposta certa para isso. O mesmo acontece com a memória que permanece ativa quando você coloca o Mac para dormir, ela simplesmente cresce a cada sono que você dorme.

No lado "divertido" (também conhecido como caro), você pode atualizar sua memória ou substituir o HDD por um SSD, para que a troca não seja um impacto no desempenho. Escolhi a primeira opção, pois a memória Corsair agora está disponível a um preço razoável.

16 GB de RAM

informação relacionada