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

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(使用前将#替换为@)

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

  • Linux 中的直接内存访问

    我正在尝试直接访问嵌入式 Linux 项目的物理内存 但我不确定如何最好地指定内存供我使用 如果我定期启动设备并访问 dev mem 我就可以轻松地读写任何我想要的位置 然而 在这里 我访问的是可以轻松分配给任何进程的内存 我不想做 我的
  • 如何通过设备树配置 uio_dmem_genirq 驱动程序

    The uio dmem genirq https git kernel org pub scm linux kernel git stable linux stable git tree drivers uio uio dmem geni
  • 使用 gdb 在指定的可执行文件之外单步执行汇编代码会导致错误“无法找到当前函数的边界”

    我在 gdb 的目标可执行文件之外 甚至没有与该目标对应的堆栈 无论如何 我想单步执行 以便我可以验证汇编代码中发生了什么 因为我不是 x86 汇编方面的专家 不幸的是 gdb 拒绝进行这种简单的汇编级调试 它允许我设置并停止在适当的断点上
  • 加载内核模块时出现未知符号

    我需要帮助理解为什么在插入模块时出现错误 我努力了this http www linuxforums org forum kernel 56497 unkown symbol module error while insmodding bu
  • 内核虚拟地址转换

    考虑到 Linux 和 32 位 x86 架构 可访问的 4GB 地址空间的比例为 3 1 用户空间分配0 3 Gb 而3 4 Gb 分配给内核 大于 3Gb 且位于内核地址空间的虚拟地址如何转换为物理地址 页表会出现吗 梅尔 戈尔曼的书中
  • Linux 内核模块 Makefile 不能包含相对路径

    我正在尝试构建 Linux 内核模块 KBUILD EXTRA SYMBOLS Module symvers KBUILD EXTRA SYMBOLS dir0 Module symvers KDIR kernel linux 4 9 IN
  • 如何杀死内核模块中的等待队列?

    我是内核模块的新手 使用等待队列 我阻塞线程 直到缓冲区有数据 使用hrtimer 我定期唤醒队列 现在 问题是即使在我删除内核模块之后 我也可以看到该进程 thread1 仍在运行 我认为问题在于等待队列永远等待并且进程在这里被阻塞 请帮
  • fork() & 内存分配行为

    我在一个禁用交换和禁用内存过量使用的系统上工作 假设我的进程当前消耗 100 MB 内存 而系统可用内存小于 100 MB 如果我执行 fork 它会失败 因为内核也尝试为子进程分配 100 MB 的空间吗 我读过 Linux 在分叉时使用
  • CPU缓存性能。存储未命中与加载未命中

    我使用 perf 作为基本事件计数器 我正在开发一个遭受数据缓存存储未命中的程序 其中比例高达80 我知道缓存原则上是如何工作的 它会在各种未命中情况下从内存加载 并在需要时从缓存中删除数据 我不明白的是 存储未命中和加载未命中之间有什么区
  • 使用 perf 查找线程瓶颈并优化挂机时间

    对 cpu 周期进行采样perf record如果核心利用率大致恒定 则对于寻找优化候选非常有用 但对于具有并行性不同的多个阶段的代码 计算 cpu 周期将重点强调并行阶段 而低估影响挂机时间的顺序或有限并行阶段 简而言之 天真的 perf
  • 尝试映射大页面 (1GB) 时 mmap 失败

    我做了什么 使用 root 启用大页 我的系统支持 1MB 大页 echo 20 gt proc sys vm nr hugepages 将大页文件系统挂载到 mnt hugepages mount t hugetlbfs nodev mn
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • Xenomai 中的周期性线程实时失败

    我正在创建一个周期性线程 它在模拟输出上输出方波信号 我正在使用 Xenomai API 中的 Posix Skin 和 Analogy 我使用示波器测试了代码的实时性能 并查看了方波信号 频率为 1kHz 的延迟 我应该实现 250us
  • 将 mmap 内核启动参数保留的内存映射到用户空间

    正如中所讨论的this https stackoverflow com q 1911473 143897问题 我在启动时使用内核启动参数保留一个内存块memmap 8G 64G 我写了一个字符驱动程序 http pete akeo ie 2
  • 是否从页面缓存中的脏页面进行文件读取?

    当字节写入文件时 内核不会立即将这些字节写入磁盘 而是将这些字节存储在页缓存中的脏页中 回写缓存 问题是 如果在脏页刷新到磁盘之前发出文件读取 则将从缓存中的脏页提供字节 还是首先将脏页刷新到磁盘 然后进行磁盘读取以提供字节 将它们存储在进
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 同步 I/O 是否会使线程繁忙?

    假设我正在同步 I O 套接字上执行 I O 该套接字已准备好read or write手术 这意味着调用线程不会在操作上被阻塞 无论非阻塞 SOCK NONBLOCK 套接字的阻塞性质 但以下事情我不清楚 实际转移何时发生 当套接字标记为
  • 树莓派的设备树驱动内核

    我想用设备树驱动的 Linux 内核启动树莓派 有什么特别的事情要做吗 谁能指出为树莓派设置基于设备树的内核启动需要什么 我可能需要有树莓派内核源代码 其中设备驱动程序应与设备树兼容 如果是这样 我在哪里可以找到 Raspberry Pi
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • Linux内核container_of宏和C90中的通用容器

    是否有可能实施容器的 http lxr linux no linux tools perf util include linux kernel h L18纯C90中的宏 我不确定如何做到这一点 因为内核实现取决于海湾合作委员会黑客 http

随机推荐

  • 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 因为我无法弄清楚要调用