我在 W2008 服务器上运行第三方软件。此客户端通过 TCP 连接到服务器。两者之间的平均 ping 时间为 1ms。但是,当我在资源监视器中检查应用程序的 tcp 连接时,它显示延迟为 20ms。
我在客户端接口上运行了数据包捕获,看到确认时间<1ms。客户端的 tcp 设置如下:
接收方缩放状态:已启用 烟囱卸载状态:自动 NetDMA 状态:已启用 直接缓存访问 (DCA):已禁用 接收窗口自动调节级别:正常 附加拥塞控制提供程序:ctcp ECN 功能:已禁用 RFC 1323 时间戳:已禁用
此外,我已在注册表中将特定接口的 TcpNoDelay 和 TcpAckFrequency 设置为 1。NIC 已启用卸载。
资源监视器如何计算这 20 毫秒的 TCP 延迟?Win2008 中是否有其他 TCP 设置可以减少此延迟?
答案1
因此首先,资源监视器/perfmon 使用与 wireshark 等不同的测量系统,所以这可能是延迟不同的原因。
无需深入研究 Windows API,这种差异就是由后处理和低优先级造成的。
鉴于实际延迟为 1ms,您无法应用任何其他设置,而且我不知道您可以进行任何更改来“修复”Windows API perfmon,以便它显示“正确”的延迟。
如果您愿意,我可以找到 perfmon 较慢的确切原因,但根据先前的经验,上述原因就是原因。