AMD系列0x10h CPU是否支持HostOnly和GuestOnly PMC位?

AMD系列0x10h CPU是否支持HostOnly和GuestOnly PMC位?,c,virtualization,system,svm,C,Virtualization,System,Svm,我的公司开发了一个虚拟机监控程序,这个问题涉及AMD的SVM(安全虚拟机)API的使用 我想准确地跟踪在给定时间段内来宾操作系统中执行了多少条指令。AMD在其0x10h系列CPU(Phenom x2等)的实现中,在PerfEvtSel MSR(0xc0010000..3)中提供了所谓的“HO”和“GO”或“HostOnly”和“GuestOnly”位。0x10h系列的BKDG表示这些位是64位PerfEvtSel寄存器的40和41。但是,系列0x11h的BKDG并没有说明仅主机位和来宾位的存在

我的公司开发了一个虚拟机监控程序,这个问题涉及AMD的SVM(安全虚拟机)API的使用

我想准确地跟踪在给定时间段内来宾操作系统中执行了多少条指令。AMD在其0x10h系列CPU(Phenom x2等)的实现中,在PerfEvtSel MSR(0xc0010000..3)中提供了所谓的“HO”和“GO”或“HostOnly”和“GuestOnly”位。0x10h系列的BKDG表示这些位是64位PerfEvtSel寄存器的40和41。但是,系列0x11h的BKDG并没有说明仅主机位和来宾位的存在

我的代码如下所示:

reg_svm_pes_set_unit_mask(&pes, 0x00);
reg_svm_pes_set_usr(&pes, 1);  // Count user mode cycles
reg_svm_pes_set_os(&pes, 1);   // Count system cycles
reg_svm_pes_set_e(&pes, 0);    // Level, not edge
reg_svm_pes_set_pc(&pes, 0);
reg_svm_pes_set_int(&pes, 1);  // Trigger interrupt on overflow
reg_svm_pes_set_en(&pes, enabled);
reg_svm_pes_set_inv(&pes, 0);  // No invert sense

reg_svm_pes_set_go(&pes, 1);   // Count in the guest
reg_svm_pes_set_ho(&pes, 0);   // And not in the host...
您必须相信我的话,其中每一个都是一个正确编写的内联函数,它在PMC寄存器中设置了适当的位,并且给定的代码成功地写入并可以读回MSR的位40和41。我已经证实了这一点

我的经验是,柜台对客人和主人都很重要。这使得很难只对客人身上发生的事情进行准确的统计

我的问题是:

  • HostOnly和GuestOnly位是否在系列0x10h CPU上工作
  • 我是否需要配置其他一些机器状态才能使其正常工作
  • 有人见过这种CPU工作的特性吗
  • 有人知道为什么BKDG系列0x11h CPU没有列出此功能吗。也就是说,所讨论的部分保留在该家族中
  • 是否有其他已知的方法使SVM实现在主机中关闭PMCs