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

时间:2010-06-04 15:54:53

标签: 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没有说明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的方法?

0 个答案:

没有答案