在尝试分析第三方应用程序的吞吐量时,我们在两个系统上收集了 WPR 跟踪。其中一个系统赛门铁克入侵检测系统已启用,但另一个尚未启用。
对启用了入侵检测系统的系统进行以下观察
许多
NDIS.SYS
函数ndisInterruptDpc
调用需要> 100µs
。
在 的时间段内10s
:的片段超过1.966
。Microsoft对DPC 的建议是17.273 took
100µs
运行时间不得超过 100 微秒。提供商
Microsoft-Windows-TCPIP
显示所有内容都在使用TcpipSendSlowPath
。
我尝试阅读有关慢速/快速路径的内容,但真的不知道该怎么做。我能找到的所有内容都是关于路由器或专用硬件的,我怀疑 ETW能否从它们那里获取任何数据(除非它在请求/响应中被传回?)。该
Stacks
视图显示数据包正在通过Symantec 的数据包检查驱动程序。因此,IDSvia64.sys
需要进行大量的内存分配和释放。Pool
psping
带宽测试是因素 10慢点。
话虽如此,但两台服务器上第三方应用程序的感知性能是相当的。迄今为止唯一明显的区别是,在装有 IDS 的系统上,psping 测试要差得多。对我来说是个难题……
问题
- 如何找到在 DPC 上花费太多时间的罪魁祸首?我怀疑 IDS 参与其中,但我无法将 DPC 的处理与 IDS(或其他任何东西)联系起来。
- 我很想知道“慢速路径”实际上意味着什么、它可能对性能产生什么影响以及如何在可能/需要的情况下解决它。
编辑
按照@Brian 提供的链接,这是我们在启用 IDS 的系统上(绿色)和在没有 IDS 的系统上(蓝色)的 DPC 持续时间
- 持续 10 秒
- 执行已知需要花费一些时间的任务
我非常确信 IDS 是造成 DPC 持续时间较长的原因。如果有人能就问题的第二部分给出一些关于 数量的提示TcpipSendSlowPath
,那么那里可能也值得调查一下。
需要注意的是,具有 IDS 的系统上的 DPC 数量要大得多。
- 这最容易对此的解释是该系统当时已被其他人使用(很难找到活动最少的时段)
- 我可以想象 NIC 的设置在这方面发挥了作用,但我不知道在哪里寻找它(取决于缓冲区大小、吞吐量……更多的 ISR 和 DPC 被触发)
- 其他的 (?) ...