如何从内核读取性能计数器?

2024-03-15

我一直在用户空间使用Linux perf工具。我想编写代码,在每次执行上下文切换时读取线程的性能计数器。

所需步骤是:

1) 获得一种读取性能计数器寄存器的机制。

2) 每次上下文切换后从调度程序调用步骤(1)。

我陷入了步骤(1),因为我无法弄清楚要调用哪些函数来读取性能寄存器以及如何在执行此操作时描述事件。 我尝试浏览文档以及这个问题如何在内核内部使用性能计数器? https://stackoverflow.com/questions/29765275/how-do-i-use-performance-counters-inside-of-the-kernel.


你实际上可以完全做到这一点perf通过使用跟踪点事件 and 组长抽样.

The sched:sched_switch是在每次上下文切换时触发的跟踪点事件。将该事件与其他事件放入启用组领导者采样的组中,这样您就可以在发生领导者样本时读取非领导者计数器。语法如下:

perf record -e "{sched:sched_switch,cycles,instructions}:S" -a

这将记录cycles价值观和instructions每当有上下文切换时,每个 CPU 都会执行此操作。您可以使用以下命令检查输出perf script,它还允许您使用 python 程序读取它。

如果你想在自己的程序中进行监控,可以使用perf_event_open with PERF_FORMAT_GROUP and PERF_SAMPLE_READ.

The perf工具及其底层perf_event_open界面非常强大,但有时会缺乏文档。如果您需要更大的灵活性,您可以使用BPF https://www.iovisor.org/technology/ebpf and bcc https://github.com/iovisor/bcc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从内核读取性能计数器? 的相关文章

  • 如何编写需要内核源头文件的 BitBake 驱动程序配方?

    介绍 我有一个do install我为驱动程序编写的 BitBake 配方中的任务 我在其中执行自定义install脚本 任务失败 因为安装脚本无法在其中找到内核源头文件
  • vm.dirty_ratio 和 vm.dirty_background_ratio 之间的区别?

    我目前正在试验中找到的内核参数 proc sys vm 尤其dirty ratio and dirty background ratio 内核文档对两者都有以下解释 脏背景比例 包含 以包含空闲页面的总可用内存的百分比表示 和可回收页 后台
  • “do { ... } while (0)”在内核代码中到底做了什么? [复制]

    这个问题在这里已经有答案了 可能的重复 当我们定义宏时 do while 0 有什么用 https stackoverflow com questions 923822 whats the use of do while0 when we
  • 大会,你好世界问题

    我正在 Linux 上学习 asm noobuntu 10 04 我得到了以下代码 http asm sourceforge net intro hello html http asm sourceforge net intro hello
  • Linux、ARM:为什么仅当启动时存在 I2C GPIO 扩展器时才创建 gpiochip

    在 imx6sx 硬件平台 NXP 嵌入式 ARM 上使用 Linux 3 14 52 问题是设备树中指定的 PCF8575 I2C GPIO 扩展器不会实例化为 sys class gpio 结构中的设备 除非它们在内核启动期间存在 这些
  • 动态更改 eBPF 映射大小

    在内核中 eBPF 映射可以定义为 struct bpf map def SEC maps my map type BPF MAP TYPE HASH key size sizeof uint32 t value size sizeof s
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 当 mov 指令导致页面错误并且在 x86 上禁用中断时会发生什么?

    我最近在自定义 Linux 内核 2 6 31 5 x86 驱动程序中遇到一个问题 其中 copy to user 会定期不将任何字节复制到用户空间 它将返回传递给它的字节数 表明它没有复制任何内容 经过代码检查 我们发现代码在调用 cop
  • 每个 mmap/access/munmap 两次 TLB 未命中

    for int i 0 i lt 100000 i int page mmap NULL PAGE SIZE PROT READ PROT WRITE MAP ANONYMOUS MAP PRIVATE 1 0 page 0 0 munma
  • 如何访问 mmaped /dev/mem 而不导致 Linux 内核崩溃?

    我有一个简单的程序 尝试访问用户空间中的物理内存 其中内核存储第一个结构页 在 64 位机器上 该地址是 内核虚拟地址 ffffea0000000000 物理地址 0000620000000000 我正在尝试通过用户空间中的 mmap 访问
  • 在许多驱动程序文件夹中创建 build-in.o

    我正在用我的自定义驱动程序构建内核 成功构建后 我发现了许多 build in o 文件 任何人都可以详细说明这些文件是如何在这里结束的吗 我只能怀疑这些与更高级别的 makefile 有关 built in o 文件是未构建为模块的内核的
  • 在ubuntu内核中启用cgroup cpu实时运行时

    我正在尝试在 Ubuntu 18 04 上运行的 docker 容器中使用实时调度 我已经按照给定的方法安装了实时内核here https stackoverflow com questions 51669724 install rt li
  • 性能统计与性能记录

    我对之间的区别感到困惑perf record and perf stat当涉及到对页面错误 缓存未命中以及其他任何事件进行计数时perf list 我在下面有两个问题 问题 1 的答案可能也有助于回答 问题 2 但我明确地写出了它们 以防它
  • 我的属性太活泼了,我该怎么办?

    在 Linux 设备驱动程序中 创建 sysfs 属性probe太活泼了 具体来说 它经历了与用户空间的竞争条件 http kroah com log blog 2013 06 26 how to create a sysfs file c
  • 内核模块未加载(但 insmod 返回 0)

    我必须向现有设备 mips arch 添加一些功能 我已经尝试了几个 SDK 目前我取得了一些进展 但是 insmod 返回 0 成功 并且 lsmod 显示它们 但是 printk 和 create proc entry 都不起作用 但我
  • /proc/kmsg 和 dmsg 有什么区别?

    我们通常这样做cat proc kmsg or dmesg从用户空间查看内核日志 我明白了dmesg是一个循环缓冲区 它从kmsg 但是kmsg也不是循环缓冲区 它们之间有什么区别和联系呢 宽松地说 dmesg 是一个转储 proc kms
  • Linux CFS 调度程序代码在哪里?

    我有3 13版本的完整linux源代码 我试图找到 CFS 调度程序的源代码 根据流行书籍 它应该驻留在 kernel sched c 中作为基本调度程序代码 而 kernel sched fair c 专门针对 CFS 代码 我刚刚在 3
  • 如何使用 python 子进程杀死性能记录?

    我正在尝试使用性能实用程序 https www brendangregg com perf html监视我的系统 它将在 python 脚本中启动和终止 我创建了一个沙箱 如下所示 extra params F 99 g a record

随机推荐

  • Scala Sets 包含相同的元素,但 SameElements() 返回 false

    在使用 Scala 进行工作时可迭代对象的练习 http scala exercises 47deg com koans iterables 我遇到了以下奇怪的行为 val xs Set 5 4 3 2 1 val ys Set 1 2 3
  • 删除 node-role.kubernetes.io/master:NoSchedule 污点

    我可以输入什么 CLI 命令来删除node role kubernetes io master NoSchedule来自 Kubernetes 集群中主节点的污染 以下命令失败 lnxcfg ip 10 0 0 193 kubectl ta
  • 如何计算2个node2vec模型之间的距离

    我有 2 个不同时间戳的 node2vec 模型 我想计算两个模型之间的距离 两个模型具有相同的词汇 我们更新模型 我的模型是这样的 model1 1 0 1 0 5 2 0 3 0 4 3 0 2 0 5 model2 1 0 15 0
  • TCP网络数据包什么时候会在应用层产生分片?

    TCP报文什么时候会在应用层分片 当应用程序发送 TCP 数据包时 应用程序层的接收者是否会收到两个或多个数据包中的数据包 如果是这样 什么条件会导致数据包被分割 似乎数据包在达到以太网 在网络层 1500 字节的限制之前不会被分段 但是
  • Azure 容器实例和容器 Web 应用程序有什么区别?

    我刚刚使用 Azure 多容器实例部署了一个 Web 应用程序 node js 容器和 mongo 容器 它有点像 Docker Compose 但适用于 Azure 特定的 yaml 文件 https learn microsoft co
  • 如何在其基类中创建子类对象?

    class arijit public static void main String args System out println Base class main amit ab new amit how is it possible
  • 如何将 ibOutlet 从子视图链接到故事板 xcode 中的自定义 UIView 类

    我认为这张图片说明了一切 我有一个 UIView 的子类 我已将其输入到类字段中 我正在尝试在故事板和类实现之间连接 ibOutlets 它没有给我错误 但它也不起作用 这是另一个 xcode bug 还是我期望它以一种不会的方式工作 这是
  • docker-compose exec python 输入设备不是 AWS EC2 UserData 中的 TTY

    我正在使用 EC2 UserData 来引导实例 引导程序执行的跟踪日志 var log cloud init output log 我发现脚本停在 docker compose exec web python var www flask
  • 使用 0 或 BIND_AUTO_CREATE 作为 bindService 的标志

    通过参考bindService 意图服务 ServiceConnection conn int 标志 http developer android com reference android content Context html bin
  • 是否可以使用 mailTo 保留签名?

    例如 如果我使用 mailto abc com body Hello All 则默认 Outlook 客户端中不会保留签名部分 如果我从上面删除正文部分 签名将被保留 即使我在 mailTo 中使用正文 有什么方法可以保留签名吗 附 我在这
  • Kafka 错误:SLF4J:对 [org.apache.kafka.common.Cluster] 类型的对象调用 toString() 失败

    我尝试将 Gattle 与 Kafka 一起使用 但经常出现此错误 01 32 53 933 kafka producer network thread producer 1 DEBUG o apache kafka clients Net
  • 美国天气雷达数据源或 API?

    美国是否有用于访问天气雷达数据的政府或私人 API NOAA 有一个 SOAP API http www nws noaa gov forecasts xml http www nws noaa gov forecasts xml 这里列出
  • Spring-MVC:什么是“上下文”和“命名空间”?

    From XmlWeb应用程序上下文 http javasourcecode org html open source spring spring 3 0 4 org springframework web context support
  • Python中字符串中重复字符的正则表达式

    我是正则表达式的新手 我有一个正则表达式 可以从字符串中删除重复字符 gt gt gt self repeat regexp re compile r w w 2 w gt gt gt self repl r 1 2 3 上面两行代码去掉了
  • 将代理附加到现有对象?

    我的计划是编写一个基于注释的缓存框架 用于缓存方法的返回值 当第一次使用特定参数调用方法时 缓存应该存储方法的返回值 当使用相同的参数第二次调用相同的方法时 该方法应该从缓存中返回先前计算的结果 并且不再执行其代码 我的注释如下所示 Cac
  • 如何在iPhone 6.0模拟器中添加视频? [复制]

    这个问题在这里已经有答案了 我在保存视频时遇到问题iPhone模拟器 我尝试过几种选择 例如去图书馆 但看起来不太酷 我想添加它们 以便以后可以在我的应用程序中选择它们 1 将视频文件拖放到模拟器中2 按选项卡栏上的操作按钮3 保存到相机胶
  • 在 OSX Ventura 上运行“__rvm_make -j8”RVM 安装时出错

    因为现在已经过去几个月了 我想我终于可以来这里问问了 我根本无法在 MacOS Ventura 上使用 RVM 安装任何版本的 Ruby 这似乎与其他人遇到的问题无关 我已经尝试了所有其他解决方案 但这似乎与 OpenSSL 或类似的东西无
  • 每个开发人员对 C# 类库的配置设置不同

    我们是一个小团队 致力于 ASP NET Web 项目以及服务 这两个项目都依赖于共享类库 我们希望每个开发人员的类库设置都不同 以及稍后的生产 设置中包含敏感信息 例如密码和主机名 我们应该如何分配这些设置 除非我错了 否则 web co
  • ReaderT静态环境

    宣言ReaderTmonad 转换器 为给定的 monad 添加静态环境 向给定的 monad 添加静态环境意味着什么 有人认为这是另一个问题的重复 我相信这个问题是独特的 因为我问的是静态环境意味着什么 而且我的问题与 ReaderT 有
  • 如何从内核读取性能计数器?

    我一直在用户空间使用Linux perf工具 我想编写代码 在每次执行上下文切换时读取线程的性能计数器 所需步骤是 1 获得一种读取性能计数器寄存器的机制 2 每次上下文切换后从调度程序调用步骤 1 我陷入了步骤 1 因为我无法弄清楚要调用