首页 文章

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

提问于
浏览
3

我在我的OS内核中编写了一些函数,用于在指令计数器溢出时发出性能监视中断(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);

将PMI编程为0x1000指令

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

1 回答

  • 2

    从讨论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
    

相关问题