Caching 如果存在持久缓存未命中,CPU核心的工作负载(使用率)将是100%?

Caching 如果存在持久缓存未命中,CPU核心的工作负载(使用率)将是100%?,caching,x86,x86-64,cpu-usage,cpu-cache,Caching,X86,X86 64,Cpu Usage,Cpu Cache,也就是说,如果核心处理器大部分时间都在等待来自RAM或cache-L3的数据,但缓存未命中,但系统是实时的(实时线程优先级),并且线程连接(关联)到核心,并且在不切换线程/上下文的情况下工作,那么现代x86_64上应该显示哪种负载(使用)CPU核心 也就是说,CPU使用率仅在登录空闲时显示为减少 如果有人知道,在这种情况下,其他处理器的行为是否有所不同:ARM、Power[PC]和Sparc 澄清:显示操作系统Windows中标准任务管理器中的CPU使用情况由于缓存未命中而暂停的硬件线程(逻辑核

也就是说,如果核心处理器大部分时间都在等待来自RAM或cache-L3的数据,但缓存未命中,但系统是实时的(实时线程优先级),并且线程连接(关联)到核心,并且在不切换线程/上下文的情况下工作,那么现代x86_64上应该显示哪种负载(使用)CPU核心

也就是说,CPU使用率仅在登录空闲时显示为减少

如果有人知道,在这种情况下,其他处理器的行为是否有所不同:ARM、Power[PC]和Sparc

澄清:显示操作系统Windows中标准任务管理器中的CPU使用情况

由于缓存未命中而暂停的硬件线程(逻辑核心)不能执行任何其他操作,因此出于任务管理器/CPU时间核算/OS进程调度器时间片/诸如此类的目的,它仍然被视为繁忙

这在所有体系结构中都是正确的

如果没有超线程,“硬件线程”/“逻辑核”与“物理核”相同


Morphcore/other在超线程和功能更强大的单核之间进行动态切换,可能会使让许多执行单元保持忙碌的线程与被缓存阻塞的线程之间存在差异。我不了解操作系统CPU使用统计数据与管道最佳使用之间的联系。我认为它们是不相关的,因为操作系统没有测量管道负载。
我写这篇文章是希望Peter Cordes能帮助我更好地理解它,并作为评论的延续


用户程序经常将控制权交给操作系统:当它们需要用户输入或 他们已经完成了对信号/信息的处理。GUI程序基本上只是大循环,至少 每次迭代控制都会提供给操作系统,直到下一条消息出现。 当操作系统拥有该控件时,它会调度其他线程/任务,如果没有,还会调度其他操作 只需进入空闲进程(很久以前是一个紧密循环,现在是睡眠状态) 直到下一次中断。这是空闲时间

ISR处理用户输入所花费的时间被任何操作系统视为空闲时间。 如果缓存未命中,仍将被视为空闲时间

繁重的程序需要更多的时间来完成给定消息的工作,从而返回 控件使操作系统在一秒钟内运行2次,而不是 20.
如果操作系统在最后一秒测量到了这一点,那么它只能控制20毫秒 CPU使用率为(1000-20)/1000=98%

这与CPU架构的最佳使用无关,正如所说的暂停可以做到的那样 发生在操作系统代码中,并且仍然是空闲时间统计的一部分。 管道级别的CPU利用率不是测量值,它与 操作系统统计

CPU使用率是由系统管理员使用的,它是对系统负载的度量, 它不是衡量程序集生成效率的标准。 系统管理员对此无能为力,但需要测量操作系统恢复控制权的频率(没有 抢占(preempting)是一种度量程序在系统上施加多少负载的方法。
而且系统管理员可以最终终止繁重的程序

问题不清楚-应该显示在哪里?您使用哪个程序进行监控?您可以使用性能监视器(vtune、perf或任何其他评测工具)或Ok轻松检测到这种情况。我补充了说明。难道它没有物理内存使用的图表(在性能选项卡下)吗?这应该可以测量RAM,但L3访问时间的大小要小得多。处理器核心最终将停止运行,这将被视为满载。@Hans Passant谢谢!如果您或任何人有一个更详细的答案,为什么会出现这种情况,什么时候是负载(执行CPU指令,等待缓存未命中,…),什么时候不是空闲的,那么请写下答案。我认为您混淆了操作系统显示的“CPU使用率”和更低级的概念,如IPS、吞吐量和指令延迟。谢谢!也就是说,英特尔x86_64独立虚拟(逻辑)或物理(硬件)内核在缓存未命中时暂停,可在操作系统中显示100%的CPU使用率。对于超线程,这是真的吗?当第一个逻辑核等待第二个逻辑核(在同一个硬件核上)时,第一个逻辑核也显示忙?@Alex:每个硬件线程都是独立的。通过超线程,每个物理核有两个硬件线程,即逻辑核。没有“第一个核心等待第二个核心”这样的事情。一个内核可能正在运行等待另一个线程释放锁的代码,但这不是一回事。(通常的锁行为是告诉操作系统,我们在检查锁是否空闲时睡着了。)@knm241:我想你看到了你读我写的东西和我想说的东西之间的脱节。我在回答中添加了一个词:“仍然很重要”,以明确OPs问题的答案正如您所说:执行用户代码所花费的时间就是所花费的时间,无论代码经历了多少次暂停。@Alex:具有超线程功能的英特尔CPU竞相共享大部分执行资源,或者对它们进行分区。在前端,解码器/uop缓存在两个线程的指令流之间交替每个周期,但OoO逻辑只执行它通常执行的操作,并运行准备好操作数的最旧uop。有关更多详细信息,请参阅中的Microach文档。我不确定HT是否足够聪明,因为它可以识别出一个线程被暂停(在缓存未命中或其他情况下,而不是在
暂停
insn时),并在另一个线程上使用每个前端周期。正确的是,管道的最佳使用与OS CPU使用统计数据不相关。正如你所说,它们是正交的。你错了,花在内核代码(例如中断服务例程)上的时间被认为是空闲的。这不是该进程的“用户”时间,而是“系统”,而不是“空闲”或i/o等待时间。“空闲”时间仅在t