qemu kvm:如何获取性能监控中断?

2024-05-06

我在操作系统内核中编写了一些函数,以便在指令计数器溢出时发出性能监控中断(PMI)。它在我的机器(Intel core i5)上运行良好。但是当我使用 qemu 在 qemu 上运行它时

qemu-system-x86_64 -enable-kvm -cpu 主机 -m 256 -serial mon:stdio -cdrom var/run/hypervisor.iso

中断永远不会触发。 我有什么遗漏的吗? 是否需要任何特殊配置才能在 qemu 上触发 PMI? 我记得指令计数在 qemu 中运行良好。 msr注册激活PMI

Msr::write(Msr::MSR_PERF_GLOBAL_CTRL, 0x700000003);
Msr::write(Msr::MSR_PERF_FIXED_CTRL, 0xa);
Msr::write(Msr::IA32_PERFEVTSEL0, 0x004100c5);

针对 0x1000 指令对 PMI 进行编程

Msr::write(Msr::IA32_PERF_GLOBAL_OVF_CTRL, 1ull << 32);
Msr::write(Msr::MSR_PERF_FIXED_CTR0, 0xFFFFEFFF | 0xFFFF00000000);

从讨论来看,您可以看到,仅当您写入 PERF_FIXED_CTR_CTRL (0x38d) 时,kvm 才会更新虚拟计数器。

因此,要获取 pmi,您最好在设置计数器值之后将该寄存器设置在最后一个位置。

为了完整起见,必须按以下顺序发出指令:

; set counter value.
mov edx, 0xffff
mov eax, 0xffff0000
mov ecx, 0x309
wrmsr

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

qemu kvm:如何获取性能监控中断? 的相关文章

  • 在从中断处理程序返回之前,是否必须弹出由某些异常压入堆栈的错误代码?

    我加载了一个包含 256 个条目的 idt 表 所有条目都指向类似的处理程序 对于异常 8 和 10 14 推送异常编号 这些异常会自动推送错误代码 对于其他人 推送 虚拟 错误代码和异常编号 然后跳转到一个公共处理程序 因此 当公共处理程
  • 何时调用 Thread.currentThread().interrupt() 何时不调用?

    从互联网上的多篇文章来看 建议不要吞咽InterruptedException 当我要重用同一个线程时 使用类似这样的线程池执行器来执行此操作更有意义 public static void main String args throws I
  • 将 IVSHMEM 与 libvirt virt-manager 结合使用

    Using ivshmem in qemu需要执行以下步骤 在主机中启动 ivshmem 服务器 ivshmem server这将创建一个unix域套接字 tmp ivshmem socket 使用以下命令行选项启动 qemu charde
  • 如何在不连续重置的情况下将esp8266从深度睡眠中唤醒

    我正在使用 esp8266 构建 IR 到 wifi 桥接器 基本上 我正在构建一个连接到红外遥控器内的 esp8266 的红外接收器 以通过 wifi 将接收到的红外远程按键转发到服务器 我使用的是 Wemos D1 Mini 我已经让
  • 从 C、GCC(裸机)调用 ARM 汇编

    我正在尝试使用 GCC 在 ARM 中进行一些裸机编程并在 QEMU 上进行测试 每当我从 C 调用 ARM 标签时 我的程序就会挂起 我有一个简单的代码示例 显示了问题https gist github com 1654392 https
  • 轮询和事件驱动编程是同一种技术的不同说法吗?

    我研究了中断与循环轮询 并了解了不必等待轮询的中断的优点 在我看来 轮询就像事件驱动的编程 或者至少类似于侦听器 而轮询的作用实际上很像侦听输入或输出 您同意还是我误解了轮询 循环监听 和事件驱动编程 也用所谓的监听器监听 之间的任何关键区
  • DRAM 访问的性能计数器

    我想找回DRAM 存取次数在我的应用程序中 准确地说 我需要区分数据和代码访问之间 该处理器是一个Intel R Core TM i7 4720HQ CPU 2 60GHz Haswell 基于英特尔软件开发人员手册 第 3 卷 https
  • 线程的cpu使用率

    如何在c 中获取 net中线程的cpu使用率 Check 如何获取Windows上每个线程的CPU使用率 win32 https stackoverflow com questions 1393006 how to get the cpu
  • 为什么中断处理程序 (ISR) 无法休眠?

    我很困惑为什么中断处理程序不能休眠 我对同一问题有两种看法 中断处理程序不可调度 因为它没有task struct 如果处理程序休眠 则系统可能会挂起 因为系统时钟中断被屏蔽并且无法调度休眠进程 中断处理程序是可调度的吗 但虽然较低优先级的
  • assembly x86 qemu:致命:尝试在 RAM 或 ROM 之外执行代码

    我正在开发一个非常基本的 shell 其中当前唯一的命令是 help 如果您输入错误 系统会通知您该命令无法识别 在段和堆栈设置的某个地方 我有一个错误 导致 shell 在我输入任何内容后吐出一些废话 然后完全冻结 我在终端中遇到错误 q
  • R 控制台可以支持后台任务或中断(事件处理)吗?

    在 R 控制台中工作时 我想设置一个后台任务来监视特定连接 并在发生事件时执行另一个函数 警报 或者 我可以进行设置 以便外部函数仅向 R 发送警报 但这似乎是同一个问题 有必要设置一个侦听器 我可以在 R 的专用进程中执行此操作 但我不知
  • 如何在未来取消时终止 Callable 中的 CXF Web 服务调用

    Edit 这个问题现在已经经历了几次迭代 所以请随意查看修订版本 以了解有关历史和尝试过的事情的一些背景信息 我将 CompletionService 与 ExecutorService 和 Callable 一起使用 通过 CXF 生成的
  • 如何通过网络访问Raspberry PI QEMU VM

    我已通过 QEMU 在 Mac OS X 上成功设置了 Raspberry PI VM 现在我想从我的 Mac 访问该虚拟机的文件系统 When I call ifconfig on my VM I get this And here th
  • 阅读时的 mv()

    在 Linux ext3 文件系统上 如果在读取文件时对同一个文件 文件描述符 调用 mv 会发生什么情况 这实际上是一道考试题 我只能说 CPU 捕获 OS 进行中断处理 等等等等 如果操作系统人员可以帮助我 我将不胜感激 D Linux
  • 为什么我的性能计数器不会改变?

    我一定在这里做错了什么 我创建了一个自定义性能计数器 如下所示 string counterCategory Test Category string counterName Test Counter if PerformanceCount
  • 尝试使用 qemu-arm 运行arm二进制文件时如何解决“加载共享库时出错”?

    我正在运行 Linux Mint 14 并安装了 qemu qemu user 和 gnueabi 工具链 我编译了 test carm linux gnueabi gcc test c o test 当我尝试跑步时qemu arm usr
  • qemu kvm:如何获取性能监控中断?

    我在操作系统内核中编写了一些函数 以便在指令计数器溢出时发出性能监控中断 PMI 它在我的机器 Intel core i5 上运行良好 但是当我使用 qemu 在 qemu 上运行它时 qemu system x86 64 enable k
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并
  • 为什么一个线程会中断另一个线程[重复]

    这个问题在这里已经有答案了 在Java多线程应用程序中 我们处理InterruptedThreadException 如果另一个线程中断当前线程 则会抛出此异常 现在 当另一个线程知道它将导致异常时 它可能想要中断当前线程的原因是什么 很多
  • 什么是遗留中断?

    我正在开发一个项目 试图弄清楚 ARM 架构的全局中断控制器中如何处理中断 我正在使用 pl390 中断控制器 我看到有一条线被称为传统中断 它绕过了分配器逻辑 假设有 2 个中断可以被编程为传统中断 任何人都可以帮助解释一下什么是遗留中断

随机推荐