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.

Jens Erat
fonte

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.

bmike
fonte
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.

Apenas ajudando
fonte
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

Não
fonte