Поделиться через


Сведения о счетчиках производительности

Счетчики производительности Windows предоставляют высокий уровень абстракции с согласованным интерфейсом для сбора различных системных данных, таких как процессор, память и статистика использования дисков. Системные администраторы используют счетчики производительности для мониторинга проблем с производительностью или поведением. Разработчики программного обеспечения используют счетчики производительности для проверки использования ресурсов своих компонентов.

Важный

Счетчики производительности Windows оптимизированы для обнаружения и сбора административных и диагностических данных. Они не подходят для сбора данных высокой частоты или для профилирования приложений, так как они не предназначены для сбора более одного раза в секунду. Для получения системной информации с меньшими издержками отдайте предпочтение более прямым API, таким как вспомогательный модуль состояния процесса, GlobalMemoryStatusEx, GetSystemTimesили GetProcessTimes. Для профилирования можно собирать журналы ETW с данными профилирования системы с помощью tracelog.exe с -critsec, -dpcisr, -eflagили -ProfileSource параметров или использовать профилирование счетчиков оборудования.

Заметка

Не путайте счетчики производительности Windows с API QueryPerformanceCounter. Счетчики производительности Windows предоставляют высокоуровневую абстракцию для многих видов системных сведений. Функция QueryPerformanceCounter обеспечивает оптимизированный доступ к метке времени высокой точности.

Начало работы

  • Используйте средства счетчика производительности , если требуется собирать или просматривать данные о производительности из системы.
  • Используйте API-интерфейсы сбора счетчиков производительности , если требуется написать скрипт или программу, которая собирает данные о производительности из локальной системы.
  • Используйте классы счетчиков производительности WMI , если требуется собирать данные о производительности из локальной или удаленной системы с помощью WMI.
  • Используйте API-интерфейсы поставщика счетчиков производительности , если требуется опубликовать данные о производительности из компонента программного обеспечения.

Концепции

Система счетчиков производительности Windows организована в потребителей, поставщиков, наборов счетчиков, счетчиков, экземплярови значений счетчиков.

потребитель — это программный компонент, который использует данные о производительности. Windows включает несколько встроенных средств , которые используют данные о производительности. К ним относятся диспетчер задач, монитор ресурсов, монитор производительности, typeperf.exe, logman.exeи relog.exe. Разработчики могут создавать скрипты и приложения, которые обращаются к счетчикам производительности с помощью API счетчиков производительности .

Поставщик — это программный компонент, который создает и публикует данные о производительности. Поставщик будет публиковать данные для одного или нескольких наборов счетчиков . Например, система базы данных может зарегистрировать себя в качестве поставщика данных производительности.

  • Поставщик версии 1 — это программный компонент, который публикует данные о производительности с помощью библиотеки DLL производительности, которая выполняется в процессе потребителя. Поставщик версии 1 устанавливается в систему через файл .ini. Архитектура поставщика версии 1 устарела. Новые поставщики должны использовать архитектуру поставщика версии 2.
  • Поставщик версии 2 — это программный компонент, который публикует данные о производительности с помощью API поставщиков счетчиков производительности. Поставщик версии 2 устанавливается в систему через файл .man (XML-манифест).

Набор счетчиков — это группировка данных о производительности у поставщика. Набор счетчиков имеет имя и один или несколько счетчиков . Сбор данных из набора счетчиков возвращает количество экземпляров . В некоторых API Windows наборы счетчиков называются объектами производительности. Например, поставщик данных производительности для системы базы данных может предоставить набор счетчиков для статистики конкретной базы данных.

Счетчик — это определение одного показателя производительности. Счетчик имеет имя и тип. Например, набор счетчиков "статистика по базам данных" может содержать счетчик с именем "транзакции в секунду" с типом PERF_COUNTER_COUNTER.

Экземпляр — это сущность, о которой сообщаются данные о производительности. Экземпляр имеет имя (строковое значение) и одно или несколько значений счётчика . Например, счетчик "статистика по базам данных" может содержать один экземпляр для каждой базы данных. Имя экземпляра будет именем базы данных, и каждый экземпляр будет содержать значения для счетчиков "транзакции в секунду", "использование памяти" и "использование дисков".

Значение счетчика — это значение одного фрагмента данных счетчика производительности. Значение счетчика — это целое число без знака, 32-разрядное или 64-разрядное в зависимости от типа соответствующего счетчика. При разговоре о экземпляреиногда может вызываться значение счетчика или значение .

Совет

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

счетчики для одного экземпляра всегда содержат данные именно для одного экземпляра. Это обычно для наборов счетчиков, которые сообщают о глобальной статистике системы. Например, в Windows есть встроенный набор счетчиков с одним экземпляром под названием "Memory", который сообщает об использовании глобальной памяти.

Наборы счетчиков с несколькими экземплярами содержат данные для переменного числа экземпляров. Обычно это касается наборов счетчиков, отчитывающихся о сущностях в системе. Например, Windows имеет встроенный набор счетчиков с несколькими экземплярами с именем "Сведения о процессоре", который представляет собой один экземпляр для каждого установленного центрального процессора.

Потребители периодически собирают и записывают данные из набора счетчиков поставщика. Например, потребитель может собирать данные один раз в секунду или один раз в минуту. Собранные данные называются образцом . Выборка состоит из меток времени и данных для элементов набора счетчиков. Данные для каждого экземпляра включают имя экземпляра (строку) и набор значений счетчика (целые числа, одно значение для каждого счетчика в наборе счетчиков).

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

Заметка

По соображениям обратной совместимости счетчик "Process" возвращает не уникальные имена экземпляров на основании имени EXE-файла. Это может привести к запутанным результатам, особенно если процесс с не уникальным именем запускается или завершает работу, так как обычно это приведет к сбою данных из-за неправильного сопоставления имен экземпляров между примерами. Потребители счетчика Process должны иметь возможность терпеть эти не уникальные имена экземпляров и результирующий сбой данных. Начиная с Windows 11 и более поздних версий, можно использовать набор счетчиков Process V2, чтобы избежать этой проблемы.

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

Каждый счетчик имеет тип. Тип счетчика указывает тип необработанного значения счетчика (целое число без знака 32-разрядное или целое число без знака 64-разрядное). Тип счетчика также указывает, что представляет необработанное значение счетчика, которое определяет способ обработки необработанного значения для создания полезной статистики.

Хотя некоторые типы счетчиков просты и имеют необработанное значение, которое полезно напрямую, многие типы счетчиков требуют дополнительных обработки для создания полезного форматированного значения. Для создания форматированного значения некоторые типы счетчиков требуют необработанных значений из двух выборок, некоторые типы счетчиков требуют метки времени, а некоторые типы счетчиков требуют необработанных значений из нескольких счетчиков. Например:

  • PERF_COUNTER_LARGE_RAWCOUNT — это 64-разрядное необработанное значение, которое не требует полезной обработки. Оно подходит для значений на определенный момент времени, таких как "Байты используемой памяти".
  • PERF_COUNTER_RAWCOUNT_HEX — это 32-разрядное необработанное значение, которое требует использования только простого шестнадцатеричного форматирования. Он подходит для сведений о точках во времени или идентификации таких сведений, как "Флаги" или "Базовый адрес".
  • PERF_COUNTER_BULK_COUNT — это 64-разрядное необработанное значение, указывающее количество событий и используемое для вычисления скорости возникновения событий. Чтобы быть полезным, этот тип счетчика требует двух примеров, разделенных по времени. Форматированное значение — это частота событий, т. е. количество случаев, когда событие произошло в секунду в течение интервала между двумя выборками. Учитывая два примера s0 и s1, форматированное значение (скорость событий) вычисляется как (s1.EventCount - s0.EventCount)/(s1.TimestampInSeconds - s0.TimestampInSeconds).

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

Архитектура API производительности

приложения счетчика производительности вызывают API Windows, которые вызывают поставщиков для получения данных о производительности.

Потребители счетчиков производительности включают:

Большинство потребителей счетчиков производительности используют API из PDH.dll для сбора данных о производительности. PDH управляет множеством сложных аспектов сбора счетчиков производительности, таких как разбор запросов, сопоставление экземпляров по нескольким выборкам и вычисление отформатированных значений из необработанных данных счетчика. Реализация PDH использует API реестра при использовании данных от поставщика версии 1 и использует API-интерфейсы потребителей версии 2 при использовании данных у поставщика версии 2.

Некоторые устаревшие потребители счетчиков производительности используют API реестра для сбора данных о производительности из специального ключа реестра HKEY_PERFORMANCE_DATA. Это не рекомендуется для нового кода, так как обработка данных из реестра является сложной и подверженной ошибкам. Реализация API реестра напрямую поддерживает сбор данных от поставщиков версии 1. Он косвенно поддерживает сбор данных от поставщиков версии 2 через уровень перевода, использующий API-интерфейсы потребителей версии 2.

Некоторые потребители счетчиков производительности используют функции потребителей PerfLib версии 2 для прямого доступа к данным от поставщиков версии 2. Это сложнее, чем использование данных с помощью API PDH, но этот подход может быть полезным, если API PDH нельзя использовать из-за проблем производительности или зависимостей. Реализация PerfLib V2 напрямую поддерживает сбор данных от поставщиков версии 2. Он не поддерживает сбор данных от поставщиков версии 1.

Заметка

Windows OneCore не включает PDH.dll и не включает поддержку использования данных счетчика производительности через API реестра. Потребители, работающие на OneCore, должны использовать функции потребителей PerfLib версии 2.

Поставщики версии 1 реализуются в виде библиотеки DLL поставщика, загруженной в процесс потребителя. Реализация API реестра управляет загрузкой библиотеки DLL поставщика, вызовом в библиотеку DLL для сбора данных о производительности и выгрузкой библиотеки DLL по мере необходимости. Библиотека DLL поставщика отвечает за сбора данных о производительности в соответствии с соответствующими, например с помощью обычных API Windows, RPC, именованных каналов, общей памяти или других механизмов взаимодействия между процессами.

Поставщики версии 2 реализуются как программа пользовательского режима (часто служба Windows) или драйвер режима ядра. Обычно код поставщика данных производительности интегрируется непосредственно в существующий компонент (т. е. драйвер или служба сообщает статистику о себе). Реализация PerfLib версии 2 управляет запросами и ответами с помощью расширения ядра PCW.sys, поэтому поставщик обычно не должен реализовать взаимодействие между процессами для предоставления данных о производительности.

Заметка

API и средства счетчика производительности Windows включают ограниченную поддержку доступа к счетчикам производительности с других компьютеров через удаленный реестр (для поставщиков версии 1) и RPC (для поставщиков версии 2). Эта поддержка часто трудно использовать с точки зрения элементов управления проверкой подлинности (средства и API могут проходить проверку подлинности только в качестве текущего пользователя), а также с точки зрения конфигурации системы (необходимые конечные точки и службы отключены по умолчанию). Во многих случаях лучше получить доступ к счетчикам производительности удаленных систем с помощью WMI, а не через встроенную поддержку удаленного доступа.

Аудитория разработчика

Счетчики производительности часто используются администраторами для выявления проблем с производительностью или ненормального поведения систем, разработчиками для изучения использования ресурсов компонентов программного обеспечения и отдельными пользователями, чтобы понять, как работают программы в своей системе. Использование может происходить с помощью таких средств графического интерфейса, как диспетчер задач или монитор производительности, средства командной строки, такие как typeperf.exe или logman.exe, с помощью сценариев с помощью WMI и PowerShell или через API C/C++ и .NET.

Поставщики счетчиков производительности обычно реализуются как драйверы режима ядра или службы пользовательского режима. Поставщики счетчиков производительности обычно записываются в C или C++.

Требования времени выполнения

Сведения о требованиях во время выполнения для определенного элемента программирования см. в разделе "Требования" эталонной страницы этого элемента.

См. историю версий в "Что нового".

См. также

Использование счетчиков производительности

Справочник по счетчикам производительности