2

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

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

我的代码如下所示:

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 位。我已经验证了这一点。

我的经验是,柜台在客人和主人身上都算数。这使得很难准确了解客人身上发生的事情。

我的问题是:

  1. HostOnly 和 GuestOnly 位是否适用于系列 0x10h CPU?
  2. 是否需要配置其他机器状态才能使其正常工作?
  3. 有没有人见过这个 CPU 的这个功能?
  4. 有谁知道为什么家庭 0x11h CPU 的 BKDG 没有将此功能列为存在。也就是说,所讨论的位保留在该系列中。
  5. 是否有任何其他已知方法可以使 SVM 实现在主机中关闭 PMC?
4

0 回答 0