【Tools】CPU 分析

CPU 分析
Windows SDK

本指南提供了可用于调查影响评估指标的中央处理单元 (CPU) 相关问题的详细技术。

特定于评估的分析指南中的各个指标或问题部分确定了需要调查的常见问题。 本指南提供了可用于调查这些问题的技术和工具。

本指南中的技术使用 Windows Performance Toolkit (WPT) 中的 Windows Performance Analyzer (WPA)。 WPT 是 Windows 评估和部署工具包 (Windows ADK) 的一部分,可以从 Windows 预览体验计划下载。 有关详细信息,请参阅 Windows Performance Toolkit 技术参考。

本指南分为以下三个部分:

背景
本部分包含有关 CPU 性能的简单说明和基本讨论。 有关本主题的更全面研究,我们建议阅读《Windows Internals Fifth Edition》一书。

新式计算机可以包含安装在不同套接字中的多个 CPU。 每个 CPU 可以托管多个物理处理器内核,每个内核能够同时处理一个或两个单独的指令流。 这些单独的指令流处理器由 Windows 操作系统作为逻辑处理器进行管理。

在本指南中,处理器和 CPU 均指逻辑处理器,即操作系统可用于执行程序指令的硬件设备。

Windows 10 以两种主要方式主动管理处理器硬件:电源管理,以平衡功耗和性能;和使用情况,以平衡程序和驱动程序的处理要求。

处理器电源管理
处理器并不总是处于运行状态。 当没有指令准备好执行时,Windows 会将处理器置于目标空闲状态(或 C 状态),由 Windows 电源管理器确定。 根据 CPU 使用模式,处理器的目标 C 状态将随着时间的推移进行调整。

空闲状态是从 C0(活动;非空闲)到逐渐降低功率状态的编号状态。 这些状态包括 C1(已停止,但仍启用时钟)、C2(已停止且禁用时钟)等。 空闲状态的实现是特定于处理器的。 但是,所有处理器中的状态编号越高,表明功耗越低,而且也表明处理器返回指令处理之前等待的时间越长。 在空闲状态下花费的时间会显著影响能耗和电池使用时间。

某些处理器即使在主动处理指令时也可以在性能 § 和限制 (T) 状态下运行。 P 状态定义处理器支持的时钟频率和电压电平。 T 状态不会直接更改时钟频率,但可以通过跳过某些时钟计时周期上的处理活动来降低有效时钟速度。 当前的 P 状态和 T 状态共同决定了处理器的有效运行频率。 较低的频率对应于较低的性能和较低的功耗。

Windows 电源管理器根据 CPU 使用模式和系统电源策略为每个处理器确定适当的 P 状态和 T 状态。 在高性能状态与低性能状态下花费的时间会显著影响能耗和电池使用时间。

处理器使用情况管理
Windows 使用三个主要抽象来管理处理器的使用情况。

进程

线程

延迟过程调用 (DPC) 和中断服务例程 (ISR)

进程和线程
Windows 中的所有用户模式程序都在进程的上下文中运行。 一个进程包括以下属性和组件:

一个虚拟地址空间

优先级类

加载的程序模块

环境和配置信息

至少一个线程

尽管进程包含程序模块、上下文和环境,但是它们并不直接按计划在处理器上运行。 而是进程拥有的线程按计划在处理器上运行。

线程维护执行上下文信息。 几乎所有计算都作为线程的一部分进行管理。 线程活动从根本上影响度量和系统性能。

由于系统中处理器的数量有限,因此不能同时运行所有线程。 Windows 实现了处理器分时,这允许一个线程在处理器切换到另一个线程之前运行一段时间。 在线程之间切换的行为称为上下文切换,它由称为调度程序的 Windows 组件执行。 调度程序根据优先级、理想处理器和相关性、量子和状态做出线程调度决策。

优先级
优先级是调度程序如何选择运行哪个线程的一个关键因素。 线程优先级是一个从 0 到 31 的整数。 如果线程是可执行的,并且其优先级高于当前正在运行的线程,则较低优先级线程会立即被抢占,较高优先级线程会进行上下文切换。

当线程正在运行或已准备好运行时,除非有足够的处理器可以同时运行这两个线程,否则不能运行较低优先级线程,或者除非较高优先级线程限制为仅在可用处理器的子集上运行。 线程具有可在某些时间暂时提升为更高优先级的基本优先级:例如,当进程拥有前台窗口时,或者当 I/O 完成时。

理想的处理器和相关性
线程的理想处理器和相关性决定了计划运行给定线程的处理器。 每个线程都有一个由程序设置或由 Windows 自动设置的理想处理器。 Windows 使用循环机制方法,以便将每个进程中大致相等数量的线程分配给每个处理器。 如果可能,Windows 会调度一个线程在其理想的处理器上运行;但是,该线程有时可以在其他处理器上运行。

线程的处理器相关性限制运行线程的处理器。 这是比线程的理想处理器属性更强的限制。 程序使用 SetThreadAffinityMask 设置相关性。 相关性可以防止线程在特定的处理器上运行。

Quantum
上下文切换是成本高昂的操作。 Windows 通常允许每个线程在切换到另一个线程之前运行一段时间(这称为量子)。 量子持续时间旨在保留明显的系统响应能力。 它通过最大程度地减少上下文切换开销来最大程度地提高吞吐量。 量子持续时间可能因客户端和服务器而异。 在服务器上,量子持续时间通常更长,以牺牲明显的响应为代价最大程度地提高吞吐量。 在客户端计算机上,Windows 总体上分配较短的量子,但为与当前的前台窗口关联的线程提供更长的量子。

State
每个线程在任何给定时间都处于特定的执行状态。 Windows 使用与性能相关的三种状态;这些状态是:正在运行、就绪和正在等待。

当前正在执行的线程处于“正在运行”状态。 可以执行但当前未在运行的线程处于“就绪”状态。 由于正在等待特定事件而无法运行的线程处于“正在等待”状态。

状态到状态转换如“图 1 线程状态转换”所示:
在这里插入图片描述

图 1 线程状态转换

图 1 线程状态转换

图 1 线程状态转换说明如下:

处于“正在运行”状态的线程通过调用等待函数(例如 WaitForSingleObject 或 Sleep(> 0))来启动到“正在等待”状态的转换。

正在运行的线程或内核操作准备好处于“正在等待”状态的线程(例如,SetEvent 或计时器到期)。 如果处理器处于空闲状态,或者准备好的线程的优先级高于当前正在运行的线程,则准备好的线程可以直接切换到“正在运行”状态。 否则,它将进入“就绪”状态。

当正在运行的线程等待、生成 (Sleep(0)) 或达到其量子的末尾时,调度程序会调度一个处于“就绪”状态的线程进行处理。

当处于“正在运行”状态的线程被更高优先级的线程抢占、生成 (Sleep(0)) 或当其量子结束时,调度程序会将其切换为“就绪”状态。

处于“正在等待”状态的线程不一定表示存在性能问题。 大多数线程花费大量时间处于“正在等待”状态,这允许处理器进入空闲状态并节省能源。 仅当用户等待线程完成操作时,线程状态才成为性能的一个重要因素。

DPC 和 ISR
除了处理线程,处理器还响应来自硬件设备(如网卡或计时器)的通知。 当硬件设备需要处理器注意时,它会生成中断。 Windows 通过挂起当前正在运行的线程并执行与中断关联的 ISR 来响应硬件中断。

在执行 ISR 期间,可以阻止处理器处理任何其他活动,包括其他中断。 因此,ISR 必须快速完成,否则系统性能可能会降低。 为了缩短执行时间,ISR 通常计划 DPC 以执行响应中断时必须完成的工作。 对于每个逻辑处理器,Windows 维护计划的 DPC 队列。 DPC 优先于任何优先级级别的线程。 在处理器返回到处理线程之前,它会执行其队列中的所有 DPC。

在处理器执行 DPC 和 ISR 期间,该处理器上不能运行任何线程。 对于必须以特定吞吐量或精确计时执行工作的线程(例如播放音频或视频的线程),此属性可能会导致问题。 如果用于执行 DPC 和 ISR 的处理器时间阻止这些线程接收足够的处理时间,则线程可能无法达到其所需的吞吐量或无法按时间完成其工作项。

Windows ADK 工具
Windows ADK 将硬件信息和评估写入评估结果文件。 WPA 在各种图表中提供有关 CPU 使用情况的详细信息。 本部分介绍如何使用 Windows ADK 和 WPA 收集、查看和分析 CPU 性能数据。

Windows ADK 评估结果文件
由于 Windows 仅支持对称多处理系统,因此本部分中的所有信息都适用于所有已安装的 CPU 和内核。

详细的 CPU 硬件信息可在评估结果文件 EcoSysInfo 部分的 节点下找到。

例如:

<Processor>
  <Instance id="0">
    <ProcessorName>The name of the first CPU</ProcessorName>
    <TSCFrequency>The maximum frequency of the first CPU</TSCFrequency>
    <NumProcs>The total number of processors</NumProcs>
    <NumCores>The total number of cores</NumCores>
    <NumCPUs>The total number of logical processors</NumCPUs>
    ...and so on...

WPA 图
将跟踪加载到 WPA 后,可以在 WPA UI 的“跟踪/系统配置/常规”和“跟踪/系统配置/PnP”部分下找到处理器硬件信息。

注意 本指南中的所有过程都发生在 WPA 中。

CPU 空闲状态图
如果在跟踪中收集空闲状态信息,则“电源/CPU 空闲状态”图将显示在 WPA UI 中。 此图始终包含有关每个处理器的“目标”空闲状态的数据。 如果处理器支持此状态,该图还将包含有关每个处理器的实际空闲状态的信息。

下表中的每一行描述了处理器“目标”或“实际”状态的空闲状态更改。 以下各列可用于图中的每一行:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大江东去浪淘尽千古风流人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值