Я использую стороннее программное обеспечение на сервере W2008. Этот клиент подключается к серверу через TCP. Среднее время пинга между ними составляет 1 мс. Однако, когда я проверяю tcp-соединение в мониторе ресурсов для приложения, он показывает задержку как 20 мс.
Я запустил захват пакетов на клиентском интерфейсе и увидел время подтверждения <1 мс. Настройки tcp на стороне клиента следующие:
Receive-Side Scaling State : enabled Chimney Offload State : automatic NetDMA State : enabled Direct Cache Acess (DCA) : disabled Receive Window Auto-Tuning Level : normal Add-On Congestion Control Provider : ctcp ECN Capability : disabled RFC 1323 Timestamps : disabled
Также я установил TcpNoDelay и TcpAckFrequency как 1 в реестре для конкретного интерфейса. На сетевой карте включена разгрузка.
Как монитор ресурсов вычисляет эту задержку TCP в 20 мс? Есть ли в Win2008 какие-либо другие параметры TCP, которые могут уменьшить эту задержку?
Итак, для начала, монитор ресурсов / perfmon использует систему измерения, отличную от той, что использует WireShark и т. Д., Поэтому, возможно, задержка отличается.
Не вдаваясь в подробности API Windows, разница вызвана постобработкой и низким приоритетом.
Учитывая, что фактическая задержка составляет 1 мс, нет никаких дополнительных настроек, которые вы могли бы применить, и я не знаю каких-либо изменений, которые вы могли бы внести, чтобы «исправить» perfmon Windows API, чтобы он отображал «правильную» задержку.
Если хотите, я могу найти точную причину, почему perfmon работает медленнее, но на основе предыдущего опыта вышеупомянутая причина - почему.