Como é calculado o valor Y do gráfico Pressão da memória no Activity Monitor?


41

Como vm.memory_pressureo valor do limite é / calculado no OS X 10.10.2 - Yosemite?

Eu pesquisei várias respostas para esta pergunta e estou tentando algumas coisas na linha de comando para obter valores exatos, em vez de olhar para os gráficos no Activity Monitor.

Com o sistema sob carga leve:

~ ❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 0
vm.page_free_count: 2683717
vm.memory_pressure: 0
kern.memorystatus_vm_pressure_level: 1

O kern.memorystatus_vm_pressure_level parece correto e parece ser o que ele usa para colorir o gráfico (verde para 1-NORMAL, amarelo para 2-WARN, vermelho para 4-CRITICAL). No entanto, vm.memory_pressure é 0 e o gráfico possui uma certa quantidade de verde e é irregular, o que significa que o valor está claramente mudando ao longo do tempo, e não apenas sentado em 0.

Sob carga pesada, fica assim:

❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 0
vm.page_free_count: 32572
vm.memory_pressure: 1693
kern.memorystatus_vm_pressure_level: 4

Ou isto...

~ ❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 0
vm.page_free_count: 5431
vm.memory_pressure: 277
kern.memorystatus_vm_pressure_level: 4

Ou isto...

~ ❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 3220
vm.page_free_count: 805
vm.memory_pressure: 1
kern.memorystatus_vm_pressure_level: 4

Aqui é onde estou confuso. Nenhum desses valores sozinho poderia ser o valor Y do gráfico por alguns motivos.

Primeiro, vm.memory_pressure fica em 0 quase o tempo todo sob carga normal e o gráfico não fica em 0.

Segundo, eles não são consistentes um com o outro. Observando o valor de memory_pressure, é mais baixo quando ele realmente tinha páginas desejadas (3220 desejadas e pressão de apenas 1) do que quando tinha 5431 livre e nenhuma desejada (a pressão era 277). E, de alguma forma, essa pressão é ainda mais baixa do que quando o 32572 estava livre (e o 1693 tinha pressão).

Então, quando ele plota esse gráfico, qual é o cálculo para o valor Y e como posso obter os dados necessários para calculá-los na linha de comando? Estou procurando criar uma ferramenta de linha de comando que cuspa uma porcentagem da altura da linha atual naquele gráfico, então preciso saber como calcular o valor a qualquer momento, bem como qual o intervalo de valores possíveis são.


7
Ótima pergunta. O Monitor de atividades mostra pressão em uma escala de 0% a 100%, mas não encontrei nenhuma referência nos comentários sobre a linha de comando. Vou ver se consigo descobrir o suficiente para responder esta semana. Podemos presumir que você está interessado apenas no 10.10.x?
bmike

3
Obrigado. E sim, eu estou no 10.10.2, então esse é o único que me preocupa com isso.
Raugturi 02/02

5
Pontos de dados fascinantes. Ainda não está claro para mim como o algoritmo é projetado ou codificado - ou mesmo se ele permanece o mesmo de versão para versão. Consulte apple.stackexchange.com/questions/107126/… para obter alguns bons comentários e mais dados sobre isso.
bmike

Respostas:


2

Atualmente, isso é apenas uma resposta parcial. Esta resposta não está completa até que esta frase seja removida.

A questão sobre essa questão é que, em face disso, o gráfico de Pressão da memória não faz muito sentido quando o compara com o que é relatado no Terminal ao usar o comando descrito pelo OP:

sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level

No entanto, o problema aqui é que esse comando limita os valores vm que está relatando de volta. Na verdade, existem 105 valores no total, mas este comando relata apenas os cinco valores a seguir:

vm.vm_page_free_target:
vm.page_free_wanted:
vm.page_free_count:
vm.memory_pressure:
kern.memorystatus_vm_pressure_level:

NOTA: Os valores numéricos normalmente apareceriam após os dois pontos (:), no entanto, eu não os incluí.

Obviamente, a grande maioria dos valores de 105 vm não faz parte do cálculo real que determina a pressão da memória, mas o problema aqui é que os cinco valores acima não são os únicos usados ​​para calcular a pressão da memória .

Por exemplo, embora a saída acima forneça alguns dos vários valores livres , ela não fornece nenhum dos valores inativos etc.

Esses valores são importantes porque o algoritmo de pressão de memória calcula uma razão entre esses valores e a relação entre esses valores não é aparente na saída produzida pelo comando na pergunta do OP.

Acho que posso ter alguma informação técnica que possa esclarecer mais isso. Vou atualizar esta resposta de qualquer maneira dentro de uma semana.

[ATUALIZAÇÃO DE STATUS]

Não consegui encontrar as informações técnicas que procurava. No entanto, tenho certeza de que ainda o tenho - provavelmente em alguns backups antigos de CDR / DVDR. Atualizarei esta resposta assim que a encontrar ou depois de ter certeza de que não a encontrarei.

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.