Высокая задержка DPC не означает медленный путь VPN
Время драйвера, эхо-обмены и события сеанса валят вину друг на друга. Прочитайте, что измеряет каждый счётчик, прежде чем менять компонент.
Звуковой сбой и пауза VPN попадают в одни и те же десять секунд, а утилита сообщает высокое значение с меткой «задержка DPC». Соблазн — заключить, что драйвер замедляет туннель или что туннель нагружает драйвер. Ни один из этих выводов из этого числа не следует.
Здесь задействованы три измерения, и они не делят одну границу.
Три числа, три границы
Отложенный вызов процедуры — это работа, которую драйвер откладывает из своего обработчика прерываний, а время внутри этих процедур — локальное для процессора измерение, приписываемое модулям и функциям. Эхо-обмен — это наблюдение времени на сокете, созданное сетевым стеком и удалённым ответчиком. Событие разрыва — это переход состояния, записанный клиентом. Каждое отвечает на вопрос, на который не могут ответить остальные, и совпадение единиц не делает их взаимозаменяемыми.
Полезная дисциплина — назвать границу до чтения значения. Запишите единицу и границу рядом. Если инструмент сообщает миллисекунды, спросите: миллисекунды чего — времени внутри процедуры, времени ожидания запуска или времени до прихода ответа.
Высокое число в одной категории — зацепка, а не диагноз.
Прочитайте определение за заголовком
Утилиты расходятся в том, что называют задержкой. Одни сообщают длительность процедур драйвера, другие — задержку планирования, и эти две величины могут двигаться в противоположных направлениях на одной машине. Панель, которая называет одну из них просто задержкой DPC, сказала вам меньше, чем кажется. Поэтому две панели могут расходиться в оценке машины, которая вовсе не менялась.
Та же осторожность действует и внутри одного инструмента анализа. Включающая длительность ведёт процедуру от входа до выхода, а исключающая суммирует только те фрагменты, где выполнялась сама процедура. Выбор неверного столбца превращает вызывающего в виновника.
Локальная работа драйвера и задержка сети тоже взаимодействуют, не сливаясь. Чрезмерная активность, связанная с прерываниями, может задерживать чувствительную ко времени работу на машине, а перегруженный путь может задерживать пакеты, и оба могут быть верны во время одной видимой паузы.
Поместите каждое наблюдение в одно окно
Трассировка полезна только в том случае, если вы читаете интервал, содержащий симптом. Запишите трассировку, событие клиента и сбой приложения с временными метками, затем посмотрите на одни и те же секунды во всех трёх. Максимум из часовой трассировки и разрыв позже в тот же день — два несвязанных факта.
wpr -start CPU -filemode
wpr -stop vpn-trace.etl
xperf -i vpn-trace.etl -a dpcisr -o dpc.txt
Затем откройте трассировку в инструменте анализа и отсортируйте по длительности внутри этого окна, а не по всей записи. руководство по анализу процессора описывает представление длительности DPC/ISR, которое относит время к модулям и функциям.
Подтвердите, что на самом деле произошло с туннелем, пока вы там. Кратковременная потеря трафика приложения не означает, что клиент начал новые переговоры, а успех небольшой проверки не доказывает, что всё остальное продолжало работать.
Смените компонент, который называют доказательства
Занятый модуль — это место для расследования, а не приговор. Он может выполнять работу, вызванную другим компонентом или созданной вами нагрузкой. Держите вместе имя модуля, устройство, версию драйвера и наблюдаемый интервал, потому что именно этот набор поставщик может использовать.
Одно изменение за эксперимент — единственный способ учиться на результате. Проводное сравнение сужает область, но оно одновременно меняет радиотракт и активность драйвера, поэтому относитесь к нему как к зацепке, а не как к доказательству.
Относитесь к трассировке как к чувствительным данным. Она может содержать имена процессов и сведения о среде, поэтому её место в поддерживаемом канале записи, а не в публичном вложении. Укажите, на какое наблюдение трассировка должна была ответить.