首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qemu :如何获得性能监视中断?

qemu :如何获得性能监视中断?
EN

Stack Overflow用户
提问于 2017-02-06 16:49:30
回答 1查看 598关注 0票数 3

我在操作系统内核中编写了一些函数来发出指令计数器溢出上的性能监视中断(PMI)。它在我的机器(英特尔核心i5)上工作得很好。但是当我在qemu上运行它时

系统-x86_64-启用-kvm -cpu主机-m 256 -serial mon:stdio -cdrom var/run/hypervisor.iso

中断从不开火。我遗漏了什么吗?在qemu上启动PMI是否需要特殊的配置?我记得指令计数在qemu中运行得很好。msr寄存器以激活PMI

代码语言:javascript
复制
Msr::write(Msr::MSR_PERF_GLOBAL_CTRL, 0x700000003);
Msr::write(Msr::MSR_PERF_FIXED_CTRL, 0xa);
Msr::write(Msr::IA32_PERFEVTSEL0, 0x004100c5);

为0x1000指令编写PMI程序

代码语言:javascript
复制
Msr::write(Msr::IA32_PERF_GLOBAL_OVF_CTRL, 1ull << 32);
Msr::write(Msr::MSR_PERF_FIXED_CTR0, 0xFFFFEFFF | 0xFFFF00000000);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-03 20:21:21

在讨论这里中,您可以看到kvm只在写入PERF_FIXED_CTR_CTRL (0x38d)时才更新虚拟计数器。

因此,要获得pmi,您最好在最后位置设置这个寄存器,当然是在设置了计数器值之后。

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

代码语言:javascript
复制
; 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42073038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档