Как рассчитывается значение Y для графика давления памяти в Activity Monitor?

41

Как vm.memory_pressureзначение ограничено / рассчитано в OS X 10.10.2 - Yosemite?

Я исследовал несколько ответов на этот вопрос и пробую несколько вещей в командной строке, чтобы получить точные значения, а не смотреть графики в Activity Monitor.

С системой под небольшой нагрузкой:

~ ❯❯❯ 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

Kern.memorystatus_vm_pressure_level выглядит правильно и, по-видимому, используется для окрашивания графика (зеленый для 1-NORMAL, желтый для 2-WARN, красный для 4-CRITICAL). Тем не менее, vm.memory_pressure равно 0, и на графике есть некоторое количество зеленого, и оно зазубрено, что означает, что значение явно меняется со временем, а не просто сидит в 0.

Под большой нагрузкой это выглядит так:

❯❯❯ 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

Или это...

~ ❯❯❯ 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

Или это...

~ ❯❯❯ 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

Вот где я запутался. Ни одно из этих значений не может быть значением Y графика по нескольким причинам.

Во-первых, vm.memory_pressure просто находится в 0 почти все время при нормальной нагрузке, а график не сидит в 0.

Во-вторых, они не соответствуют друг другу. Если посмотреть на значение memory_pressure, оно ниже, когда ему действительно нужны страницы (3220 разыскиваемых и давление только 1), чем когда у него было 5431 свободное и ни одного разыскиваемого (давление было 277). И почему-то это даже более низкое давление, чем когда у него было 32572 свободных (и было 1693 давления).

Итак, когда он строит этот график, как рассчитывается значение Y и как я могу получить данные, необходимые для его вычисления из командной строки? Я хочу создать инструмент командной строки, который будет отображать процент от высоты текущей строки на этом графике, поэтому мне нужно знать, как рассчитать значение в любой момент времени, а также каков диапазон значений. Возможные значения

Raugturi
источник
7
Отличный вопрос Монитор активности показывает давление в масштабе от 0% до 100%, но я не нашел никаких ссылок на комментарии командной строки этого. Я посмотрю, смогу ли я выкопать достаточно для ответа на этой неделе. Можем ли мы предположить, что вы заинтересованы только в 10.10.x?
bmike
3
Спасибо. И да, я на 10.10.2, так что это единственный вопрос, который меня интересует.
Raugturi
5
Увлекательные точки данных. Мне все еще не ясно, как алгоритм разработан или закодирован - или даже если он остается неизменным от версии к версии. См. Apple.stackexchange.com/questions/107126/…, чтобы получить хороший комментарий и больше информации об этом.
Bmike

Ответы:

2

В настоящее время это только частичный ответ. Этот ответ не завершен, пока это предложение не будет удалено.

Суть этого вопроса в том, что график давления памяти не имеет смысла, если сравнивать его с тем, что сообщается в терминале, при использовании команды, описанной в OP:

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

Однако проблема в том, что эта команда ограничивает значения vm, о которых она сообщает. На самом деле всего 105 значений, но эта команда сообщает только о следующих пяти значениях:

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

ПРИМЕЧАНИЕ. Числовые значения обычно появляются после двоеточия (:), однако я не включил их.

Очевидно, что подавляющее большинство значений 105 vm не являются частью фактического расчета, который определяет нагрузку на память, но проблема здесь заключается в том, что пять приведенных выше значений не являются единственными, используемыми для вычисления давления в памяти .

Например, хотя вышеприведенный вывод предоставляет некоторые из различных свободных значений, он не предоставляет никаких неактивных значений и т. Д.

Эти значения важны, потому что алгоритм давления памяти вычисляет соотношение между этими значениями, и связь между этими значениями не очевидна из результатов, полученных командой в вопросе OP.

Я думаю, что у меня есть некоторая техническая информация, которая может пролить больше света на это. Я буду обновлять этот ответ в любом случае в течение недели.

[ОБНОВЛЕНИЕ СТАТУСА]

Я не смог найти техническую информацию, которую искал. Тем не менее, я вполне уверен, что у меня все еще есть - вероятно, на некоторых старых резервных копий CDR / DVDR. Я обновлю этот ответ, как только найду его, или когда буду уверен, что не найду его.

Мономет
источник