Em que escala ou medida a “pressão de memória” de Mavericks e Yosemite se adere?


57

O Monitor de Atividade do Mavericks (e também o de Yosemite) mostra um novo diagrama, a pressão da memória . Infelizmente, seu texto de ajuda apenas explica vagamente o que exatamente ele mede. Como é calculada a pressão da memória?

Mavericks Activity Monitor - memória

Os exemplos de imagens vão para esta resposta a partir de uma pergunta da enquete sobre o melhor novo recurso do Mavericks.

Respostas:


51

A pressão da memória não é um simples medidor de porcentagem de memória livre e parece ser um gráfico de 0 a 100%. O sysctlvalor de vm.memory_pressureé calculado em relação a um destino calculado que rastreia a proporção entre as páginas de memória livre e inativa e as páginas com fio e ativas. Os contadores absolutos são visualizados usando a vm_statferramenta de linha de comando para inspecionar a alocação detalhada da memória virtual. Jonathan Levin tem uma excelente documentação em http://newosxbook.com/articles/MemoryPressure.html, cobrindo a memória virtual do macOS e iOS e como eles calculam a pressão da memória, bem como as ações tomadas quando o índice de pressão é alto.

A memória virtual relevante (vm) que alimenta o cálculo de vm.memory_pressuresão:

  • vm.page_free_count - uma contagem absoluta de páginas gratuitas
  • vm.vm_page_free_target - uma meta ou meta calculada para uma situação "sem pressão"
  • vm.page_free_wanted - o que o sistema vm gostaria de liberar para aliviar o atual índice de pressão calculado

Portanto - se você estiver acompanhando sua pressão de memória com o Monitor de atividades (ou verificando os valores sysctl programaticamente ou no shell da linha de comando), seria bom examinar esses quatro valores:

sysctl -a vm | egrep "page_free|pressure"

Há um novo comando memory_pressureintroduzido no Mavericks e quando eu o executo para colocar o subsistema de memória em um estado de aviso - você pode ver a pressão da memória aumentar para uma faixa amarela.

resultados do monitor de atividades de <code> sudo memory_pressure -l warn </code>

A ferramenta alocados cerca de 4 GB de memória para a ferramenta como o gráfico pressão aumentou de forma constante a este estado, onde aparentemente o nível de "alerta" é representada graficamente: sudo memory_pressure -l warn. Como você pode ver, o sistema anterior à pressão usava 5,9 GB e depois usava até 7,99 GB, o que nem precisa ser adicionado devido à troca e compactação.

Depois de observar como vm_stat 15o aviso mostrava o resultado em nenhuma paginação mensurável, fechei a ferramenta (Control-C) e executei novamente a ferramenta para tornar a pressão da memória crítica:sudo memory_pressure -l critical

Eu não deixei isso funcionar por mais de alguns minutos quando a paginação estava sendo iniciada e, uma vez que a ferramenta dizia que eu tinha 5 GB de RAM paginada em disco, não queria encher minha unidade e sair da ferramenta.

resultados do monitor de atividades de <code> sudo memory_pressure -l critical </code>

Você pode observar a rapidez com que o sistema liberou a RAM após o término do aviso e também como ele entrou no território "vermelho" para mostrar que o sistema de memória virtual não pôde compactar páginas suficientes para evitar a troca para o disco. Meu palpite educado é que vermelho, a pressão indica troca e superalocação dramática e / ou um momento em que as páginas gratuitas ficam abaixo da quantidade preferida pelo sistema e está eliminando ativamente as páginas inativas e / ou as páginas de troca que se espera que sejam usadas na troca. Da mesma forma, o sistema se recupera rapidamente quando as alocações são liberadas e a pressão é retirada do sistema de memória virtual.


Obrigado pelo esclarecimento. Gostaria de saber se existe um comando (ou conjunto de comandos) que calcula os parâmetros de memória virtual, cache de arquivos e memória de aplicativos na captura de tela acima.
Muhammad Hassan Nasr

@MuhammadHassan A resposta abaixo aborda um bom resumo da engenharia reversa do algoritmo e mostra onde procurar em xnucódigo aberto os internos. Eu retirei os quatro valores abordados que são mais relevantes para a exibição da pressão da GUI.
bmike

30

Para esclarecer um pouco e tornar esse palpite mais preciso: pressão da memória é uma métrica usada pelo kernel (xnu) com um encadeamento dedicado chamado memory_status (anteriormente conhecido como Jetsam). Esse segmento é responsável por detectar quando a RAM disponível é baixa - o que no OS X pode forçar a troca e no iOS mata o aplicativo que consome mais memória (pois não há troca). No Mavericks, os dois sistemas operacionais estão mais próximos. O Memorystatus emite uma nota do kernel, que o tempo de execução do Obj-C eventualmente converte em um appDidReceiveLowMemoryWarning. Os aplicativos devem limpar a memória não utilizada ou estranha (por exemplo, caches). A libC de Darwin também limpa a memória automaticamente.

Há uma chamada de sistema específica (embora não documentada), vm_pressure_monitor (# 296, se bem me lembro), que permite que um cliente ouça eventos de pressão e veja quantas páginas físicas podem ser recuperadas.

Você pode visualizar eventos de pressão no Mavericks usando o Process Explorer para OS X - disponível para download em http://newosxbook.com/index.php?page=downloads . Isso mostra o "manômetro" de pressão, bem como os eventos de pressão.


Esse site também tem um artigo detalhado - newosxbook.com/articles/MemoryPressure.html - detalhando a pressão de memória e manipulação no OS X e iOS
user61711

Detalhes impressionantes sobre as semelhanças e diferenças entre o Mavericks e o kernel do iOS. Obrigado pelo link para o Process Explorer.
bmike

14

A pressão da memória é definida por dois contadores que Mach mantém internamente:

  • vm_page_free_count: Quantas páginas de RAM estão atualmente livres
  • vm_page_free_target: Quantas páginas de RAM, no mínimo, devem estar idealmente livres.

Você pode vê-los facilmente usando o sysctl:

morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243

se a quantidade de páginas gratuitas ficar abaixo da quantidade desejada - temos uma situação de pressão.


Em http://newosxbook.com/articles/MemoryPressure.html

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.