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


Потоки просматривают отчеты временной шкалы в визуализаторе параллелизма

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

Время выполнения (режим потоков)

Эти сегменты на временной шкале представления потоков представляют время выполнения, когда поток активно работает над логическим ядром в системе.

Изменения состояния потока обнаруживаются с помощью событий переключения контекста ядра. Трассировка событий для Windows (ETW) снимает стековые выборки каждую миллисекунду. В очень коротком зеленом сегменте возможно, что выборка не взята. Поэтому некоторые сегменты короткого выполнения могут не отображать стек вызовов.

Щелкнув сегмент выполнения, визуализатор параллелизма отображает пример стека, ближайший к расположению щелчка. Расположение этого стека образца отображается черной стрелкой или курсором над временной шкалой, а на вкладке Current отображается стек выборки.

Чтобы просмотреть традиционный профиль выборки для всех сегментов выполнения в текущем представлении, нажмите «Выполнение» в профиле видимого временного графика.

Время ввода-вывода (Вид потоков)

Эти сегменты на временной шкале связаны с временами блокировки, которые классифицируются как операции ввода-вывода. Это означает, что поток ожидает завершения операции ввода-вывода. Поток, возможно, был заблокирован в API или из-за ожидания ядра, связанного с вводом-выводом, которое визуализатор параллелизма считает как ввод-вывод. ТАКИЕ API, как CreateFile(), ReadFile()и WSARecv() попадают в эту группу.

Время управления памятью

Эти сегменты на временной шкале связаны с временем блокировки, классифицированным как управление памятью. Этот сценарий подразумевает, что поток блокируется событием, связанным с операцией управления памятью, например разбиением на страницы. В течение этого времени поток был заблокирован в состоянии API или ядра, которое визуализатор параллелизма учитывает как управление памятью. К ним относятся такие события, как разбиение по страницам и выделение памяти.

Изучите связанные стеки вызовов и профильные отчеты, чтобы лучше понять основные причины блоков, которые классифицируются как управление памятью.

Время предварительного прерывания

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

  • Планировщик заменил его с помощью потока с более высоким приоритетом.

  • Квант выполнения потока истек, а другие потоки были готовы к исполнению.

    В течение этого времени поток был заблокирован по причине ожидания ядра, которую визуализатор параллелизма считал вытеснением. Сегменты вытеснения начинаются, когда поток вытесняется из логического ядра, и заканчиваются, когда этот поток возобновляет выполнение.

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

Время сна

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

Время синхронизации

Эти сегменты на временной шкале связаны с временами блокировки, которые относятся к категории синхронизации. Если поток помечается как заблокированный при синхронизации, подразумевается одна из следующих вещей:

  • Выполнение потока может привести к вызову хорошо известного API синхронизации потоков, такого как EnterCriticalSection() или WaitForSingleObject().

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

    Чтобы понять основную причину события блокировки потока, внимательно изучите стеки вызовов блокировки и отчеты профиля.

Время обработки пользовательского интерфейса

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

Если предварительно определенный API блокировки не определен, просмотрите стеки вызовов и отчеты профилей, чтобы определить основные причины задержки.

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