Поддерживаются ли биты HostOnly и GuestOnly PMC на процессорах AMD семейства 0x10h? - PullRequest
2 голосов
/ 04 июня 2010

Моя компания разрабатывает гипервизор, и этот вопрос касается использования API SVM (Secure-Virtual-Machine) AMD.

Я бы хотел точно отследить, сколько инструкций выполнено в моей гостевой операционной системе за данный период. AMD любезно предоставила так называемые биты «HO» и «GO» или «HostOnly» и «GuestOnly» в MSR PerfEvtSel (0xc0010000..3) при реализации своих процессоров семейства 0x10h (Phenom x2 и т. Д.). BKDG для семейства 0x10h указывает, что эти биты равны 40 и 41 из 64-битного регистра PerfEvtSel. Однако BKDG для семейства 0x11h не указывает на существование битов 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, и что данный код успешно записывает и может читать биты 40 и 41 MSR , Я подтвердил это.

Что я испытываю, так это то, что счетчик учитывает как гостя, так и хозяина. Это очень затрудняет получение точного учета только того, что произошло в госте.

Мои вопросы:

  1. Работают ли биты HostOnly и GuestOnly на процессорах семейства 0x10h?
  2. Есть ли какое-либо другое состояние машины, которое мне нужно настроить, чтобы это работало?
  3. Кто-нибудь когда-нибудь видел эту функцию этого процессора?
  4. Кто-нибудь знает, почему процессоры BKDG для семейства 0x11h не отображают эту функцию как имеющуюся? То есть рассматриваемые биты зарезервированы для этого семейства.
  5. Есть ли другой известный способ заставить реализации SVM отключать PMC, находясь в хосте?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...