Можно ли использовать ETW (отслеживание событий для окон) для сбора статистики памяти?

Возможно ли использовать ETW для получения статистики памяти всех процессов и системы? Под статистикой памяти я имею в виду: например, закомментированные байты, приватные байты, выгружаемый пул, рабочий набор,...

Я не могу найти ничего об использовании xperf для получения и просмотра статистики памяти. Это всегда о процессоре, диске, сети.

Вероятно, можно использовать счетчики производительности для получения такого рода информации, но как можно графически наложить статистику на одном графике (как соотнести / синхронизировать временные метки)?

2 ответа

Наилучшим выбором для Windows 8.1 и выше является поставщик Microsoft-Windows-Kernel-Memory, который записывает информацию о памяти для каждого процесса каждые 0,5 с. Подробнее см. https://github.com/google/UIforETW/issues/80. UIforETW включает это по умолчанию, когда оно доступно.

Вы также можете попробовать провайдера MEMINFO. Это дает общесистемный обзор давления памяти. Он отображает активный список (в настоящее время используется память), резервный список ("полезные" страницы, которые в данный момент не используются, например, кэш-память на диске), а также списки "Ноль" и "Свободно" (действительно свободная память). Это, по крайней мере, позволяет вам определить, не хватает ли системе памяти.

Вы также можете попробовать MEMINFO_WS и CONTMEMGEN, но они недокументированы, поэтому я действительно не знаю, что они делают. Они отображаются в xperf -providers k, но когда я записываю их, я не вижу новых графиков. Очевидно, Microsoft поставляет этих провайдеров, но у них нет возможности их просмотреть. Вздох...

Если вы хотите получить больше информации о памяти в Windows 7, например, рабочие наборы для каждого процесса, лучше всего запускать процесс, который периодически запрашивает эти данные и отправляет их в пользовательских событиях ETW. Это доступно в предварительно упакованной форме в UIforETW, которая может запрашивать рабочий набор указанного набора процессов раз в секунду. См. Объявление о том, как получить UIforETW: https://randomascii.wordpress.com/2015/04/14/uiforetw-windows-performance-made-easier/

Данные рабочего набора UIforETW для Windows 7 отображаются в общих событиях под именем задачи == WorkingSet. В Windows 8.1 данные рабочего набора ОС (более подробные, более эффективно записанные) отображаются в разделе "Память-> Снимки виртуальной памяти".

Вы можете отслеживать использование памяти с ReferenceSet группа ядра. Включает в себя следующие трассировочные флаги:

PROC_THREAD+LOADER+HARD_FAULTS+MEMORY+FOOTPRINT+VIRT_ALLOC+MEMINFO+VAMAP+SESSION+REFSET+MEMINFO_WS

ПАМЯТЬ = трассировка памяти

FOOTPRINT+REFSET = Поддержка анализа следа

MEMINFO = Информация о списке памяти (активные, резервные и другие, которые вы видите в ResMon)

VIRT_ALLOC = Виртуальное резервирование и освобождение

VAMAP = информация о сопоставленных файлах

MEMINFO_WS = Информация о рабочем наборе

Как вы можете видеть, xperf может захватывать много данных из памяти, когда вы используете правильные флаги.

Другие вопросы по тегам