gpt4 book ai didi

interrupt - qemu kvm : how to get permformance monitoring interrupt?

转载 作者:行者123 更新时间:2023-12-02 01:17:25 24 4
gpt4 key购买 nike

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

在 qemu 上运行它时

qemu-system-x86_64 -enable-kvm -cpu host -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);

最佳答案

来自讨论here ,你可以读到只有当你写入 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

关于interrupt - qemu kvm : how to get permformance monitoring interrupt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42073038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com