当前位置: 首页 > news >正文

Intel 性能监视器之二

全文来自Intel开发者手册:Intel? 64 and IA-32 Architectures Software Developer’s Manual Volume 3B System Programming Guide.pdf

注意:下文中已经指出手册中的对应页面和章节,请对照手册原文看,任何个人理解错误,请包涵。

六,以下内容来自(P290):30.2.3 Pre-defined Architectural Performance Events
表格30-1列出了预先定义好的架构兼容事件

Table 30-1. UMask and Event Select Encodings for Pre-Defined Architectural Performance Events
Bit Position CPUID.AH.EBX Event Name UMask Event Select
0 UnHalted Core Cycles 00H 3CH
1 Instruction Retired 00H C0H
2 UnHalted Reference Cycles 01H 3CH
3 LLC Reference 4FH 2EH
4 LLC Misses 41H 2EH
5 Branch Instruction Retired 00H C4H
6 Branch Misses Retired 00H C5H

有些处理器可能并不全部支持上表列出的所有预定义架构兼容事件,这可以通过检测CPUID.0AH:EBX对应的bit位来做判断,只有bit位为零,才表示支持对应的事件。

几个事件的注意点:
0,UnHalted Core Cycles — Event select 3CH, Umask 00H
简明:统计处于非停机(UnHalted)状态的时钟周期数。什么是UnHalted状态?比如执行hlt指令时,cpu就处于Halted状态。
只有当指定处理器上的时钟信号处于运行状态时,该事件计数器才统计该处理器的核心时钟周期数。因此在如下几种情况时,计数器不会增长:

— an ACPI C-state other than C0 for normal operation
— HLT
— STPCLK# pin asserted
— being throttled by TM1
— during the frequency switching phase of a performance state transition (see Chapter 14, “Power and Thermal Management”)

另外,在性能状态发生改变,比如由性能最佳变成节能状态,那么对应的核心时钟频率会发生变化,从而该性能计数器的统计频率也会随之发生变化。

1,Instructions Retired — Event select C0H, Umask 00H
简明:统计已执行完的指令数。Retired表示引退,意译也就是消耗或已执行完。
该事件计数器统计已执行的指令数。如果一条指令由多条微指令组成,那么该事件计数器仅对其最后一条微指令进行统计。如果一条指令以rep为前缀(即意味着指令将执行多次),那么也将作为整体而只被统计一次。如果在多操作指令的最后一条微指令执行完之前出现错误,那么将不会被统计。处于VM-exit条件下时,该事件不会增长。在硬中断,traps陷进以及中断处理函数内时,该计数器都将继续统计。

2,UnHalted Reference Cycles — Event select 3CH, Umask 01H
简明:统计处于非停机(UnHalted)状态的参考时钟周期数。
只有当指定处理器上的时钟信号处于运行状态时,该事件计数器才统计该处理器的参考时钟周期数。这和UnHalted Core Cycles类似,但不同的是,该性能计数器的统计频率不会因核心时钟频率受性能状态发生改变影响而发生变化。

七,下面是与NMI中断相关的部分,属于个人总结
1,Linux内核有一个nmi_watchdog机制,可以用来检测死锁。
这可以参考内核文档:2.6.30.8\Documentation\nmi_watchdog.txt

2,第1点是旧的nmi_watchdog机制,自2.6.37.x开始,有了新的nmi_watchdog机制。
a) 关于new nmi_watchdog介绍,在这里:new nmi_watchdog using perf events

b) new nmi_watchdog出现在2.6.37.2之后(在内核更新log里搜索关键字“new nmi_watchdog”):
kernel/git/torvalds/linux.git - Linux kernel source tree

Age Commit message (Expand) Author Files Lines
2010-11-18 x86, nmi_watchdog: Remove the old nmi_watchdog Don Zickus 7 -608/+5
2010-05-12 lockup_detector: Combine nmi_watchdog and softlockup detector Don Zickus 12 -29/+650
2010-02-08 nmi_watchdog: Config option to enable new nmi_watchdog Don Zickus 5 -1/+26
2010-02-08 x86: Move notify_die from nmi.c to traps.c Don Zickus 2 -7/+5

c) 在2.6.37.x内,新旧两套nmi机制同时存在,但old nmi_watchdog机制在2.6.38后被移除:
x86, nmi_watchdog: Remove the old nmi_watchdog

3,新的nmi_watchdog机制,其nmi中断源不再可以设置为IO-APIC(即nmi_watchdog=1),而只能是local APIC(即nmi_watchdog=2)。
具体而言是通过:性能计数器溢出(Hardware counter overflow interrupt) –> local APIC(合适配置进行转换) –> NMI
在Intel开发者手册3A第460页(10.1 LOCAL AND I/O APIC OVERVIEW)有对应的说明:

? Performance monitoring counter interrupts — P6 family, Pentium 4, and
Intel Xeon processors provide the ability to send an interrupt to its associated
processor when a performance-monitoring counter overflows (see Section
30.8.5.8, “Generating an Interrupt on Overflow”).

以及Intel开发者手册3B第342页(30.8.5.8 Generating an Interrupt on Overflow)的说明:

(Here, the performance counter entry in the local vector table [LVT] is set
up to deliver the interrupt generated by the PMI to the processor.)

另外可以参考文档:PerfEvent与Intel PMU介绍(林铭 Intel开源技术中心)

4,新的nmi_watchdog机制的使用:
新的watchdog只需打开内核选项接口(参考文档:lockup-watchdogs.txt,也就是原来的nmi_watchdog.txt):
Kernel hacking —>
[*] Detect Hard and Soft Lockups
[*] Panic (Reboot) On Hard Lockups
[*] Panic (Reboot) On Soft Lockups

新机制处理了nmi的嵌套问题:The x86 NMI iret problem [LWN.net]
对应的源文件:LXR / The Linux Cross Reference

5,新的nmi_watchdog机制的关键性配置语句为:

1

apic_write(APIC_LVTPC, APIC_DM_NMI);

其使用的具体性能计数器与当前机器CPU型号有关,在最一般情况下,使用的是:

1

2

#define MSR_ARCH_PERFMON_PERFCTR0       0xc1

#define MSR_ARCH_PERFMON_EVENTSEL0      0x186

事件为:

1

2

#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_SEL   (0x3c)

#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK     (0x00 << 8)

可以看到这是架构兼容事件UnHalted Core Cycles。由于统计的是非停机时钟周期,所以如果系统比较空闲,那么通过“cat /proc/interrupts | grep NMI”看到的nmi中断增长比较缓慢。这是因为当系统空闲时,idle进程默认执行的是mwait_idle()函数,其核心指令mwait导致CPU处于停机状态,所以流逝的时钟周期没有统计到计数器内,进而原本要溢出的计数器没有溢出,nmi中断也就没有触发。

6,如何让新nmi_watchdog机制下的nmi中断持续触发?
第5点中提到,如果系统比较空闲,那么系统里的nmi中断数会很少。可以有不少方法提升nmi中断频率:
a) 让系统不要处于空闲状态,比如弄个死循环程序一直跑起。(这个仅用于验证的确是因为CPU空闲导致的,囧)
b) 修改内核参数,加上“idle=poll”(可以参考2.6.30.8\Documentation\kernel-parameters.txt),这样让系统的idle进程执行cpu_relax()函数,而该函数的核心是nop指令,因此CPU并不会处于停机状态。(这会导致无法节能,浪费国家电力,囧)
b) 有个名为“CPU_CLK_UNHALTED.TOTAL_CYCLES”的统计事件:
http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/amplifierxe/win/ug_docs/reference/pmm/events/cpu_clk_unhalted.total_cycles.html
Performance Analysis Guide for Intel? Core? i7 Processor and Intel? Xeon? 5500 processors.pdf
这只是CPU_CLK_UNHALTED的变体,pdf里的解释如下:

Total cycles can be directly measured with CPU_CLK_UNHALTED.TOTAL_CYCLES.
This event is derived from CPU_CLK_UNHALTED.THREAD by setting the cmask = 2
and inv = 1, creating a condition that is always true. The difference between these two is
the halted cycles. These occur when the OS runs the null process.

即创造一个恒真的环境,让计数器的每次统计总是自增。不过根据Intel? VTune手册以及实测来看,这个事件应该仅被某些处理器支持,上面pdf文档就是针对的i7和至强5500系列cpu。libpfm-4.2.0库仅针对Nehalem、Westmere、Sandybridge提供有TOTAL_CYCLES。该事件的具体设置为:
UMask = 0x00;
CMask = 2;
Inv = 1
即:

1

#define ARCH_PERFMON_UNHALTED_CORE_CYCLES_UMASK (0x0 | (1 << 23) | (0x2 << 24))

相关文章:

Intel 性能监视器之二

全文来自Intel开发者手册&#xff1a;Intel? 64 and IA-32 Architectures Software Developer’s Manual Volume 3B System Programming Guide.pdf 注意&#xff1a;下文中已经指出手册中的对应页面和章节&#xff0c;请对照手册原文看&#xff0c;任何个人理解错误&#xff…...

Vert.x学习笔记-什么是事件总线

广义事件总线介绍Vert.x的事件总线Vert.x的事件总线的实现方式Vert.x的事件总线通信模式事件总线与消息队列的区别点对点通信模式请求-应答通信模式发布-订阅通信模式 Vert.x的事件总线应用场景Vert.x的事件总线消息Vert.x的事件总线消息示例Vert.x的事件总线的消息类型 拓展 广…...

STM32学习笔记二十二:WS2812制作像素游戏屏-飞行射击游戏(12)总结

至此&#xff0c;飞行射击游戏已经基本实现该有的功能&#xff0c;已经比较接近早期的商业游戏了。 如果采用脚本&#xff0c;可以完成关卡游戏&#xff0c;如果不用&#xff0c;也可以做成无限挑战游戏。 我们汇总一下制作的过程&#xff1a; 1、建模UML 2、主循环处理过程…...

astadmin安装querylist插件Puppeteer

我本来是想在linux服务器上安装&#xff0c;折腾了一天也没安装成功&#xff0c;由于急着用&#xff0c;就先做window10上安装了&#xff0c;以后有时间再研究centos7上安装 一 首先需要安装fastadmin 框架和querylist插件 这个大家可以自行安装&#xff0c;querylist安装地址…...

Python从入门到网络爬虫(MySQL链接)

前言 在实际数据分析和建模过程中&#xff0c;我们通常需要从数据库中读取数据&#xff0c;并将其转化为 Pandas dataframe 对象进行进一步处理。而 MySQL 数据库是最常用的关系型数据库之一&#xff0c;因此在 Python 中如何连接 MySQL 数据库并查询数据成为了一个重要的问题…...

2020年认证杯SPSSPRO杯数学建模A题(第二阶段)听音辨位全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 A题 听音辨位 原题再现&#xff1a; 把若干 (⩾ 1) 支同样型号的麦克风固定安装在一个刚性的枝形架子上 (架子下面带万向轮&#xff0c;在平地上可以被水平推动或旋转&#xff0c;但不会歪斜)&#xff0c;这样的设备称为一个麦克风树。不同的麦…...

深入理解CRON表达式:时间调度的艺术

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…...

网络安全—模拟IP代理隐藏身份

文章目录 网络拓扑安装使用代理服务器设置隐藏者设置 使用古老的ccproxy实现代理服务器&#xff0c;仅做实验用途&#xff0c;禁止做违法犯罪的事情&#xff0c;后果自负。 网络拓扑 均使用Windows Server 2003系统 Router 外网IP&#xff1a;使用NAT模式 IP DHCP自动分配或者…...

Resilience4j相关问题及答案(2024)

1、什么是Resilience4j&#xff0c;与Hystrix有何不同&#xff1f; Resilience4j是一个为Java 8和函数式编程设计的故障恢复库&#xff0c;它主要利用了Vavr库中的函数式编程概念。Resilience4j提供了一系列的故障恢复机制&#xff0c;包括断路器&#xff08;Circuit Breaker&…...

XSKY SDS 产品率先获得 OceanBase V4 新版本认证

近日&#xff0c;北京奥星贝斯科技有限公司&#xff08;简称&#xff1a;OceanBase&#xff09;与北京星辰天合科技股份有限公司&#xff08;简称&#xff1a;XSKY 星辰天合&#xff09;顺利完成产品兼容性认证。 XSKY 的高性能全闪存储以及混闪存储&#xff0c;与 OceanBase V…...

系统学习Python——类(class):静态方法(staticmethod)和类方法(classmethod)-[基础知识]

分类目录&#xff1a;《系统学习Python》总目录 我们可以在类中定义两种方法&#xff0c;它们不需要一个实例就可以被调用&#xff1a;静态方法&#xff08;staticmethod&#xff09;大致与一个类中简单的无实例函数的工作方式类似&#xff0c;而类方法则被传人一个类而不是一个…...

kotlin isEmpty/isNotEmpty/isNullOrEmpty和isBlank/isNotBlank/isNullOrBlank

kotlin 中 isEmpty &#xff1a;如果判断的字符为空返回值返回true否则返回false 它的源码 kotlin.internal.InlineOnly public inline fun CharSequence.isEmpty(): Boolean length 0 length 0: 首先检查字符序列的长度是否为 0。如果长度为 0&#xff0c;则表明这个字…...

Qt/QML编程学习之心得:Linux下USB接口使用(25)

很多linux嵌入式系统都有USB接口,那么如何使用USB接口呢? 首先,linux的底层驱动要支持,在linux kernal目录下可以找到对应的dts文件,(device tree) usb0: usb@ee520000{compatible = "myusb,musb";status = "disabled";reg = <0xEE520000 0x100…...

概率论与数理统计 知识点+课后习题

文章目录 &#x1f496; [学习资源整合](https://www.cnblogs.com/duisheng/p/17872980.html)&#x1f4da; 总复习&#x1f4d9; 选择题&#x1f4d9; 填空题&#x1f4d9; 大题1. 概率2. 概率3. 概率4. P5. 概率6. 概率密度函数 F ( X ) F(X) F(X)7. 分布列求方差 V ( X ) …...

Spring Boot实战:深入理解@Service与@Mapper注解

1. Service 注解 Service 是Spring框架提供的一个注解&#xff0c;用于标记类为业务逻辑层的组件。当类上标注了Service注解后&#xff0c;Spring容器会自动扫描并创建该类的一个实例&#xff08;即Bean&#xff09;&#xff0c;这样我们就可以在其他地方通过自动装配&#xf…...

【DevOps-06】Jenkins实现CI/CD操作

一、简要说明 基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成 基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署 二、准备Springboot工程 1、IDEA新建工程 2、填写项目工程信息 3、选择Springboot版本…...

华为面经总结

为了帮助大家更好的应对面试&#xff0c;我整理了往年华为校招面试的题目&#xff0c;供大家参考~ 面经1 技术一面 自我介绍说下项目中的难点volatile和synchronized的区别&#xff0c; 问的比较细大顶堆小顶堆怎么删除根节点CSRF攻击是什么&#xff0c;怎么预防线程通信方式…...

大模型实战营Day1 书生·浦语大模型全链路开源体系

1.大模型为发展通用人工智能的重要途经 专用模型&#xff1a;针对特定任务解决特定问题 通用大模型&#xff1a;一个模型对应多模态多任务 2.InternLM大模型开源历程 3.InternLM-20B大模型性能 4.从模型到应用&#xff1a;智能客服、个人助手、行业应用 5.书生浦语全链条开源…...

Java 集合面试题真实场景还原

Java 集合面试题真实场景还原 文章目录 Java 集合面试题真实场景还原Java常见的集合类ListHashMap Java常见的集合类 面试官&#xff1a;说一说Java提供的常见集合&#xff1f;&#xff08;画一下集合结构图&#xff09; 候选人&#xff1a; 嗯~~&#xff0c;好的。 在java中提…...

AutoSAR(基础入门篇)4.9-Autoar_BSW小结

Autoar_BSW小结 Autoar_BSW小结 一、Autoar_BSW小结 1、BSW组件图 2、BSW的功能概述 3、BSW在工程里的应用实际工程...

Winform中使用Websocket4Net实现Websocket客户端并定时存储接收数据到SQLite中

场景 SpringBootVue整合WebSocket实现前后端消息推送&#xff1a; SpringBootVue整合WebSocket实现前后端消息推送_websocket vue3.0 springboot 往客户端推送-CSDN博客 上面实现ws推送数据流程后&#xff0c;需要在windows上使用ws客户端定时记录收到的数据到文件中&#x…...

Jenkins修改全局maven配置后不生效解决办法、以及任务读取不同的settings.xml文件配置

一、修改Global Tool Configuration的maven配置不生效 说明&#xff1a;搭建好jenkins后&#xff0c;修改了全局的settings.xml&#xff0c;导致读取settings一直是之前配置的。 解决办法一 Jenkins在创建工作任务时&#xff0c;会读取当前配置文件内容&#xff0c;固定在这…...

【elfboard linux开发板】7.i2C工具应用与aht20温湿度寄存器读取

1. I2C工具查看aht20的温湿度寄存器值 1.1 原理图 传感器通过IIC方式进行通信&#xff0c;连接的为IIC1总线&#xff0c;且设备地址为0x38&#xff0c;实际上通过后续iic工具查询&#xff0c;这个设备是挂载在iic-0上 1.2 I2C工具 通过i2c工具可以实现查询i2c总线、以及上面…...

LeetCode-有效的字母异位词(242)

题目描述&#xff1a; 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 思路&#xff1a; 这题还是比较简单的&#xff0c;首先将两个字符…...

【AIGC-图片生成视频系列-6】SSR-Encoder:用于主题驱动生成的通用编码器

目录 一. 贡献概述 二. 方法详解 a) 训练阶段 b) 推理生成阶段&#xff1a; 三. 综合结果 四. 注意力可视化 五. 选择性主题驱动图像生成 六. 人体图像生成 七. 可推广到视频生成模型 八. 论文 九. 个人思考 稳定扩散&#xff08;Stable Diffusion&#xff09;模型可…...

[C]jupyter中使用C

[C]jupyter中使用C 安装使用用处 安装 https://github.com/brendan-rius/jupyter-c-kernel 下拉找到3条命令&#xff0c;装就可以了 mac和linux可用 python3可用&#xff0c; 2不可以 第二条命令可以改为 : python3 install_c_kernel 小总结&#xff1a;如果有问题&#xff0…...

探讨一下WebINFO 下的一些思考

在平时的开发中&#xff0c;我们经常看到一个/WEB-INF 这个目录&#xff0c;这个是web 容器初始化加载的一个标准路径。官方解释&#xff1a;WEB-INF 是 Java 的 web 应用的安全目录。所谓安全就是客户端无法访问&#xff0c;只有服务端可以访问的目录。也就是说&#xff0c;这…...

MySQL中的开发基于Python的SQL工具类操作数据库简单示例

操作数据库封装SQL工具类的两种方式 为了更方便的实现基于连接池和pymysql 连接数据库&#xff0c;需开发一个sql工具类来让sql操作更简洁用两张方式来封装SQL工具类 1 &#xff09;单例模式 封装 db.py 工具类 import pymysql from dbutils.pooled_db import PooledDBclas…...

安卓Android Studio读写FM1208CPU卡源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma1z10.5-c-s.w4002-21818769070.11.6c46789elLwMzv&id615391857885 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout x…...

二、Redis的特性与应用场景

Redis是一个在内存中存储数据的中间件&#xff0c;主要用于作为数据库、数据缓存&#xff0c;在分布式系统中有着非常重要的地位。面试中可以围绕Redis的特性进行介绍。 一、Redis特性 1、在内存中存储数据 MySQL主要是“表”的方式来存储组织数据的&#xff0c;是“关系型数…...

网站建设的硬件平台/北京关键词优化报价

这篇文章主要介绍了微信小程序 搜索框组件代码实例,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 search.wxml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3…...

西安住房建设局网站首页/免费视频外链生成推荐

万事达卡客户智能副总裁谈论他如何从头开始建立他的团队&#xff0c;成为公司客户体验不可或缺的一部分。了解万事达卡的突破性客户体验是如何形成的。 全球客户关怀团队通过服务、情报和经验专业知识&#xff0c;超越成为品牌的客户生命线。 万事达副总裁讨论他们拥有的所有…...

使用dw如何给网站做电影/得物app的网络营销分析论文

Description: 大家一定觉的运动以后喝可乐是一件很惬意的事情&#xff0c;但是seeyou却不这么认为。因为每次当seeyou买了可乐以后&#xff0c;阿牛就要求和seeyou一起分享这一瓶可乐&#xff0c;而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子&#xff0c;它们的容…...

基于liferay portal的乡镇企业门户网站建设研究/关键词数据

一. System: 首先是System类&#xff0c;因为从一开始从接触java起&#xff0c;我们就无时无刻都在接触它&#xff0c;经常用它来向屏幕&#xff0c;向控制台打印输出一些信息&#xff0c;System.out.println(“hello world”);这个只是在控制台输出一条信息“hello world”&am…...

网站直接做标准曲线/搜索引擎营销seo

前言 在4.1的时候&#xff0c;要先创建一个扩展于Ext.app.Application的类&#xff0c;然后用create创建它的实例来开始应用程序的。而在4.1.1&#xff0c;则可直接调用application方法开始执行应用程序&#xff0c;简化了。调用application方法&#xff0c;其参数是一个配置对…...

一个人做运营网站/怎么给自己的网站设置关键词

运行在大量廉价商用机器上&#xff1a;硬件错误是常态&#xff0c;提供容错机制简单一致性模型&#xff1a;一次写入多次读取&#xff0c;支持追加&#xff0c;不允许修改&#xff0c;保证数据一致性流式数据访问&#xff1a;批量读而非随机读&#xff0c;关注吞吐量而非时间存…...