Счетчик производительности против ETW
Являются ли счетчики производительности частью ETW? Если нет, то в чем разница между этими двумя?
2 ответа
Счетчики производительности и ETW - это разные технологии. Счетчики производительности не выставляются через ETW.
Основное отличие: счетчики производительности предоставляют высокоуровневые показатели поведения системы (например, считывание таймеров и байтов и выделение объектов), тогда как ETW является средством диагностики и ведения журнала (например, Debug.WriteLine
сообщения, но более богатые и более структурированные).
В настоящее время как ETW, так и счетчики производительности имеют полную поддержку со стороны Windows, и, как разработчик, вы можете написать код для создания и использования данных для обеих технологий.
Счетчики производительности
Счетчики производительности, также известные как счетчики производительности PDH (Performance Data Helper), представляют собой простые числовые метрики, которые дают общее представление о том, как ведет себя конкретная система. Например, % Processor Time
является счетчиком производительности, который сообщает вам, сколько времени процессора используется для выполнения кода пользовательского режима. В качестве более сложного примера,# of Methods Jitted
в.NET CLR Jit
Категория говорит вам, сколько методов.NET были скомпилированы JIT с момента запуска приложения.
Счетчики производительности обычно используются для мониторинга работоспособности системы и диагностики определенных проблем с производительностью. Они являются хорошим индикатором проблем, когда что-то идет не так, как надо, но они не дают вам подробной информации о том, почему происходит конкретная проблема.
Чтобы просмотреть счетчики производительности Windows, вы можете просто запуститьperfmon
, В Vista+ вам может потребоваться щелкнуть узел "Performance Monitor", чтобы увидеть диаграмму счетчиков. Чтобы программно получить доступ к счетчикам производительности, посмотрите наSystem.Diagnostics.PerformanceCounter
класс в.NET или библиотека PDH для собственного кода.
Трассировка событий для Windows (ETW)
ETW - это система отслеживания, встроенная в Windows. По сути, любой компонент (например, пользовательское приложение или даже само ядро Windows) может отправлять диагностическую трассировочную информацию о конкретных событиях, которые происходят, о которых заботится компонент. Например, ядро отправляет события ETW, когда процесс запускается и останавливается, когда изображение (например, DLL) загружается и выгружается, когда поток создается или уничтожается, или даже когда поток выполняет переключение контекста. Зарегистрированные данные представлены в сериализованном формате, который описывается компонентом в другом месте, что позволяет диагностическим инструментам читать и понимать события ETW, записанные во время сеанса. Смотрите здесь для диаграмм блоков и линий того, как все работает вместе.
ETW должен быть быстрым и не должен существенно влиять на производительность системы, когда регистрация не включена. Начиная с Vista, ETW широко распространен в Windows и предназначен для использования разработчиками приложений (то есть, в частности, ваше приложение может быть провайдером ETW, который регистрирует события). ETW является основой для журнала событий и может использоваться профилировщиками производительности, отладчиками или системными мониторами.
См. Мой другой пост SO здесь для некоторых ресурсов по взаимодействию с ETW.
Казалось бы, на основе этого документа, начиная с Vista+, счетчики производительности имеют фасад ETW, поэтому их можно использовать точно так же, как и ETW.
Новая библиотека счетчиков производительности (PERFLIB версии 2.0), включенная в Windows Vista®, предлагает разработчику ряд преимуществ, в том числе:
Стандартный механизм межпроцессного взаимодействия (IPC) между поставщиком и потребителем, основанный на уведомлении Event Tracing for Windows (ETW) и приводящий к упрощенной разработке и более унифицированному и надежному коду.