Звуковой сбой и пауза VPN попадают в одни и те же десять секунд, а утилита сообщает высокое значение с меткой «задержка DPC». Соблазн — заключить, что драйвер замедляет туннель или что туннель нагружает драйвер. Ни один из этих выводов из этого числа не следует.

Здесь задействованы три измерения, и они не делят одну границу.

Три числа, три границы

Отложенный вызов процедуры — это работа, которую драйвер откладывает из своего обработчика прерываний, а время внутри этих процедур — локальное для процессора измерение, приписываемое модулям и функциям. Эхо-обмен — это наблюдение времени на сокете, созданное сетевым стеком и удалённым ответчиком. Событие разрыва — это переход состояния, записанный клиентом. Каждое отвечает на вопрос, на который не могут ответить остальные, и совпадение единиц не делает их взаимозаменяемыми.

Полезная дисциплина — назвать границу до чтения значения. Запишите единицу и границу рядом. Если инструмент сообщает миллисекунды, спросите: миллисекунды чего — времени внутри процедуры, времени ожидания запуска или времени до прихода ответа.

Высокое число в одной категории — зацепка, а не диагноз.

Прочитайте определение за заголовком

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

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

Локальная работа драйвера и задержка сети тоже взаимодействуют, не сливаясь. Чрезмерная активность, связанная с прерываниями, может задерживать чувствительную ко времени работу на машине, а перегруженный путь может задерживать пакеты, и оба могут быть верны во время одной видимой паузы.

Поместите каждое наблюдение в одно окно

Трассировка полезна только в том случае, если вы читаете интервал, содержащий симптом. Запишите трассировку, событие клиента и сбой приложения с временными метками, затем посмотрите на одни и те же секунды во всех трёх. Максимум из часовой трассировки и разрыв позже в тот же день — два несвязанных факта.

wpr -start CPU -filemode
wpr -stop vpn-trace.etl
xperf -i vpn-trace.etl -a dpcisr -o dpc.txt

Затем откройте трассировку в инструменте анализа и отсортируйте по длительности внутри этого окна, а не по всей записи. руководство по анализу процессора описывает представление длительности DPC/ISR, которое относит время к модулям и функциям.

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

Смените компонент, который называют доказательства

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

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

Относитесь к трассировке как к чувствительным данным. Она может содержать имена процессов и сведения о среде, поэтому её место в поддерживаемом канале записи, а не в публичном вложении. Укажите, на какое наблюдение трассировка должна была ответить.

Похожие статьи