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


События пула потоков (трассировка событий Windows)

Эти события собирают сведения о рабочих потоках и потоках ввода-вывода.

Имеется две группы событий пула потоков:

  • события пула рабочих потоков, предоставляющие информацию о способе использования приложением пула потоков и влиянии рабочих нагрузок на управление параллелизмом;

  • события пула потоков ввода-вывода, предоставляющие информацию о потоках ввода-вывода, создаваемых, завершаемых, повторно активируемых или прерываемых в пуле потоков.

события пула рабочих потоков

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

ThreadPoolWorkerThreadStart и ThreadPoolWorkerThreadStop

В таблице ниже показаны ключевые слова и уровни для этих событий. (Дополнительные сведения см. в разделе CLR ETW Keywords and Levels.)

Ключевое слово для вызова события Level
ThreadingKeyword (0x10000) Информационный (4)

В таблице ниже представлены сведения о событии.

Событие Идентификатор события Условие вызова
ThreadPoolWorkerThreadStart 50 Создается рабочий поток.
ThreadPoolWorkerThreadStop 51 Рабочий поток останавливается.
ThreadPoolWorkerThreadRetirementStart 52 Рабочий поток завершается.
ThreadPoolWorkerThreadRetirementStop 53 Завершенный рабочий поток снова становится активным.

В таблице ниже представлены данные события.

Имя поля Тип данных Описание
ActiveWorkerThreadCount win:UInt32 Число рабочих потоков, доступных для выполнения процесса, включая уже работающие потоки.
RetiredWorkerThreadCount win:UInt32 Число рабочих потоков, которые недоступны для выполнения процесса, но находятся в резерве на случай, если позже понадобятся дополнительные потоки.
ClrInstanceID Win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.

ThreadPoolWorkerThreadAdjustment

Эти события пула потоков содержат сведения для понимания и отладки поведения алгоритма вставки потока (управления параллелизмом). Эти сведения используются внутри пула рабочих потоков.

ThreadPoolWorkerThreadAdjustmentSample

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Level
ThreadingKeyword (0x10000) Информационный (4)

В таблице ниже представлены сведения о событии.

Событие Идентификатор события Описание
ThreadPoolWorkerThreadAdjustmentSample 54 Указывает на сбор сведений для одного образца, то есть измерение пропускной способности с определенным уровнем параллелизма в некоторый момент времени.

В таблице ниже представлены данные события.

Имя поля Тип данных Описание
Пропускная способность win:Double Число завершений в единицу времени.
ClrInstanceID Win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.

ThreadPoolWorkerThreadAdjustmentAdjustment

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Level
ThreadingKeyword (0x10000) Информационный (4)

В таблице ниже представлены сведения о событии.

Событие Идентификатор события Описание
ThreadPoolWorkerThreadAdjustmentAdjustment 55 Регистрирует изменение в управлении, когда алгоритм вставки потока (поиск экстремума) определяет, что произошло изменение уровня параллелизма.

В таблице ниже представлены данные события.

Имя поля Тип данных Описание
AverageThroughput win:Double Средняя пропускная способность образца измерений.
NewWorkerThreadCount win:UInt32 Новое число активных рабочих потоков.
Причина win:UInt32 Причина корректировки:

0x00 — прогрев;

0x01 — инициализация;

0x02 — случайное движение;

0x03 — движение вверх;

0x04 — точка изменения;

0x05 — стабилизация;

0x06 — перегрузка;

0x07 — истекло время ожидания потока.
ClrInstanceID Win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.

ThreadPoolWorkerThreadAdjustmentStats

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Level
ThreadingKeyword (0x10000) Информационный (4)

В таблице ниже представлены сведения о событии.

Событие Идентификатор события Описание
ThreadPoolWorkerThreadAdjustmentStats 56 Собирает данные по пулу потоков.

В таблице ниже представлены данные события.

Имя поля Тип данных Описание
Duration win:Double Время в секундах, в течение которого выполнялся сбор статистики.
Пропускная способность win:Double Среднее число завершений в секунду в течение данного интервала.
ThreadWave win:Double Зарезервировано для внутреннего использования.
ThroughputWave win:Double Зарезервировано для внутреннего использования.
ThroughputErrorEstimate win:Double Зарезервировано для внутреннего использования.
AverageThroughputErrorEstimate win:Double Зарезервировано для внутреннего использования.
ThroughputRatio win:Double Относительное улучшение пропускной способности, вызванное изменениями числа активных рабочих потоков в течение этого интервала.
Достоверность win:Double Мера обоснованности поля ThroughputRatio.
NewcontrolSetting win:Double Число активных рабочих потоков, которое будет служить основой для будущих изменений числа активных потоков.
NewThreadWaveMagnitude Win:UInt16 Величина будущих изменений числа активных потоков.
ClrInstanceID Win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.

События потоков ввода-вывода

Эти события пула потоков создаются для потоков в пуле потоков ввода-вывода (порты завершения), который является асинхронным.

IOThreadCreate_V1

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Level
ThreadingKeyword (0x10000) Информационный (4)

В таблице ниже представлены сведения о событии.

Событие Идентификатор события Условие вызова
IOThreadCreate_V1 44 Поток ввода-вывода создается в пуле потоков.

В таблице ниже представлены данные события.

Имя поля Тип данных Описание
Count win:UInt64 Число потоков ввода-вывода, включая вновь созданный поток.
NumRetired win:UInt64 Число завершенных рабочих потоков.
ClrInstanceID Win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.

IOThreadRetire_V1

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Level
ThreadingKeyword (0x10000) Информационный (4)

В таблице ниже представлены сведения о событии.

Событие Идентификатор события Условие вызова
IOThreadRetire_V1 46 Поток ввода-вывода становится кандидатом на завершение.

В таблице ниже представлены данные события.

Имя поля Тип данных Описание
Count win:UInt64 Число потоков ввода-вывода, остающихся в пуле потоков.
NumRetired win:UInt64 Число завершенных потоков ввода-вывода.
ClrInstanceID Win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.

IOThreadUnretire_V1

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Level
ThreadingKeyword (0x10000) Информационный (4)

В таблице ниже представлены сведения о событии.

Событие Идентификатор события Условие вызова
IOThreadUnretire_V1 47 Завершенный поток ввода-вывода повторно активируется из-за ввода-вывода, поступающего в течение периода ожидания после того, как поток стал кандидатом на завершение.

В таблице ниже представлены данные события.

Имя поля Тип данных Описание
Count win:UInt64 Число потоков ввода-вывода в пуле потоков, включая этот поток.
NumRetired win:UInt64 Число завершенных потоков ввода-вывода.
ClrInstanceID Win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.

IOThreadTerminate

В таблице ниже показаны ключевое слово и уровень.

Ключевое слово для вызова события Level
ThreadingKeyword (0x10000) Информационный (4)

В таблице ниже представлены сведения о событии.

Событие Идентификатор события Условие вызова
IOThreadTerminate 45 Поток ввода-вывода прерывается в пуле потоков.

В таблице ниже представлены данные события.

Имя поля Тип данных Описание
Count win:UInt64 Число потоков ввода-вывода, остающихся в пуле потоков.
NumRetired win:UInt64 Число завершенных потоков ввода-вывода.
ClrInstanceID Win:UInt16 Уникальный идентификатор экземпляра CLR или CoreCLR.

См. также раздел