Sdk Xperfview:What';CPU采样和CPU使用之间的区别是什么?
这个问题与xperf和XPerView有关,它们是Windows性能工具包的一部分(反过来又是Windows SDK 7.1的一部分) 比较两个图表,“按线程进行CPU采样”和“按线程进行CPU使用”,我不理解其中的几个差异。我将以audiodg.exe为例Sdk Xperfview:What';CPU采样和CPU使用之间的区别是什么?,sdk,performance,xperf,Sdk,Performance,Xperf,这个问题与xperf和XPerView有关,它们是Windows性能工具包的一部分(反过来又是Windows SDK 7.1的一部分) 比较两个图表,“按线程进行CPU采样”和“按线程进行CPU使用”,我不理解其中的几个差异。我将以audiodg.exe为例 在Threads下拉列表中,CPU采样图上audiodg只有一个线程;CPU使用率图表显示了几个audiodg线程 两个图形都有一个Y轴标记为“%Usage”,但测量值不同。通常,CPU采样图表上给定线程的使用率百分比低于CPU使用率图表上
所以我的问题。。。这里CPU使用的可靠度量是什么?CPU使用率不是从CPU样本中得出的吗?这些数字不应该有某种关联吗?Xperf确实让人有点困惑,这是我对发生的事情的理解:
- CPU样本数据,通过配置文件内核标志启用。CPU样本数据以一定的时间间隔收集,并记录有关CPU当时在做什么的信息(例如,采样时的进程、线程Id和调用堆栈)
- 上下文切换数据,使用CSWITCH内核标志启用。这将记录发生的每个上下文切换的数据(例如,谁被切换入/切换出以及调用堆栈)
- CPU采样实际上会告诉您线程在采样时正在做什么,因为它在线程执行期间收集调用堆栈。上下文切换信息只会告诉您线程何时被切换入或切换出,而不会在线程之间进行切换
- 上下文切换信息将告诉您每个线程执行的确切时间。这个数据是正确的。当然,抽样只是概率性的
希望有帮助 回答得好!扎实透彻。我还有一个附带的问题:xperf默认使用1kHz采样,我了解到它不是通过暂停/恢复线程进行采样,那么它如何在采样点准确捕获当前调用堆栈?不是通过系统API调用点,对吗?因为对系统API的调用不能保证均匀分布。