加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows CPU Scheduler – 内核时间非常长

发布时间:2020-12-14 01:54:15 所属栏目:Windows 来源:网络整理
导读:我们正在尝试了解 Windows CPU Scheduler如何工作以优化我们的应用程序,以实现最大可能的基础架构/实际工作比率.在xperf中有一些我们不理解的东西,并且想要让社区了解真正发生的事情. 当我们得到一些服务器“缓慢”或“无响应”的报告时,我们最初开始调查这
我们正在尝试了解 Windows CPU Scheduler如何工作以优化我们的应用程序,以实现最大可能的基础架构/实际工作比率.在xperf中有一些我们不理解的东西,并且想要让社区了解真正发生的事情.
当我们得到一些服务器“缓慢”或“无响应”的报告时,我们最初开始调查这些问题.

背景资料

我们有一台运行我们的中间件基础架构的Windows 2012 R2 Server,其规格如下.

我们发现有30%的CPU浪费在内核上,所以我们开始深入挖掘.

task manager view

上面的服务器运行“主机”~500个进程(作为windows服务),这些“主机”进程中的每一个都有一个内部while循环,延迟?250毫秒(yuck!),并且每个“主机”进程可能有? 1..2执行实际工作的“子”进程.

虽然在迭代之间具有250毫秒延迟的无限循环,但“主机”应用程序执行的实际有用工作可能仅每10..15秒出现一次.所以浪费了很多周期来进行不必要的循环.

我们知道,“主机”应用程序的设计至少可以说是次优的,适用于我们的场景.应用程序将更改为基于事件的模型,该模型不需要循环,因此我们期望CPU利用率图中的“内核”时间显着减少.

然而,当我们调查这个问题时,我们已经做了一些xperf分析,它提出了几个关于Windows CPU Scheduler的一般性问题,我们无法找到任何明确/简明的解释.

我们不明白的是什么

以下是其中一个xperf会话的屏幕截图.

xperf session

您可以从“CPU使用率(精确度)”中看到

>有15毫秒的时间片,其中大部分未被充分利用.这些切片的利用率约为35-40%.因此,我认为这反过来意味着CPU大约在35%到40%的时间内被利用,但系统的性能(假设通过系统周围的随意修改可观察到)实际上是缓慢的.
>有了这个,我们就有了这个“神秘的”30%内核时间成本,由任务管理器CPU利用率图判断.
>有些CPU明显用于整个15 ms及更高的切片.

问题

就多处理器系统上的Windows CPU调度而言:

>什么导致30%的内核成本?上下文切换?别的什么?在编写应用程序以降低此成本时应该考虑哪些因素?甚至 – 以最小的基础设施成本实现完美的利用(在多处理器系统上,其中进程数高于核心数)

>这些15毫秒切片是什么?
>为什么CPU利用率在这些切片中存在差距?

解决方法

要诊断CPU使用率问题,您应该使用Windows事件跟踪(ETW)来捕获CPU采样数据(不精确,这对于检测挂起很有用).

捕获数据,install the Windows Performance Toolkit,这是Windows SDK的一部分.

enter image description here

现在运行WPRUI.exe,选择First Level,在Resource select CPU usage下,单击start.

enter image description here

现在捕获1分钟的CPU使用率. 1分钟后点击“保存”.

现在analyze the generated ETL file with the Windows Performance Analyzer by drag&将CPU使用情况(采样)图表拖放到分析窗格并按照图片中的顺序排列列:

enter image description here

在WPA内部,load the debug symbols并扩展了SYSTEM过程的Stack.在此演示中,CPU使用率来自nVIDIA驱动程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读