【问题标题】:Windows System Idle Processes interfering with performance measurement干扰性能测量的 Windows 系统空闲进程
【发布时间】:2009-02-08 14:30:10
【问题描述】:

我正在 Windows 机器上对我的代码进行一些性能测量,我发现我在测量之间得到了截然不同的结果。在任务管理器系统空闲进程中显示一个缓慢的临时探索,占用了几乎 100% 的 CPU。

有谁知道系统空闲进程的真正含义以及它可能运行的 Windows 功能?

注意:我没有使用任务管理器来衡量性能,我只是用它来看看在特别慢的测量期间还有什么正在运行。

在说这与编程无关并结束问题之前请三思。除非我认为有理由说它是,否则我不会问它。在这种情况下,我认为这显然是因为它对我的开发和测试环境产生了不利影响,为了解决这个问题,我需要更多地了解它。编程不以编写代码开始和结束。

【问题讨论】:

    标签: windows performance python-idle


    【解决方案1】:

    空闲进程通常不做任何有用的工作,除了执行HLT 指令,该指令将 CPU 内核置于低功耗状态 (C1)。但是,您的基准测试并未消耗 100% 的 CPU 时间这一事实确实为推测正在发生的事情打开了大门。

    如果您的应用程序是单线程的并且您的测试系统是多核/超线程/多 CPU,那么您应该会看到大约 50% 的空闲 CPU 时间用于两个内核,75% 用于四个内核,等等。这是因为任务管理器中的 CPU 时间百分比包括所有内核。 (我相信旧版本的 Windows 可以选择更改这一点,但我在 Vista 上看不到它。)

    如果空闲进程消耗大量 CPU,这可能表明您的应用程序正在花费大量时间休眠。它可能正在等待来自某些外部源(例如磁盘或网络)的数据。它可能会花费大量时间等待同步对象(例如互斥锁或事件)。它也可能花费大量时间调用Sleep() 函数。分析您的代码应该确定它在哪里花费时间。

    获得完全可重现的基准测试结果可能需要您禁用处理器/磁​​盘/网络密集型后台应用程序和服务(例如搜索索引、SMS 软件清单、病毒扫描、Windows 更新下载、IncrediBuild/distcc)或将计算机连接到一个孤立的网络(或根本没有网络)。

    我假设您为您的应用程序编写了一个基准测试,并且您只是尝试使用任务管理器来诊断为什么基准测试结果与您的预期不符。任务管理器不是衡量应用程序性能的准确方法。

    【讨论】:

      【解决方案2】:

      系统空闲进程是 Windows 在处理器上运行的一种默认进程,当它没有其他计划运行时。这个过程就像一个管家,做一些诸如试图节省系统电源之类的事情。

      如果您要测量程序的性能,请不要使用 Windows 任务管理器。改用性能监视器(您可以通过在命令行中键入“perfmon”开始)。或者更好的是,使用profiler

      【讨论】:

        【解决方案3】:

        如果你的“系统空闲进程”占用了 100%,那么基本上你的机器很无聊,什么都没有发生。如果您将任务管理器中发生的所有事情加起来,从 100% 中减去这个数字,那么您将得到“系统空闲进程”的值。请注意,它几乎不消耗任何内存,也不会影响性能。

        【讨论】:

          猜你喜欢
          • 2021-08-12
          • 1970-01-01
          • 1970-01-01
          • 2011-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多