Время rdmsr зависит от чтения регистра?

Время, необходимое для выполнения rdmsr существенно зависит от чтения регистра?

Всего 1 ответ


Да, время может существенно зависеть от регистра. Вот несколько примеров (измеренных на Intel Core i7-8700K):

  • Чтение регистра E8H (IA32_APERF) требует около 91 тактов ядра.
  • Чтение регистра 1A0 (IA32_MISC_ENABLE) обычно требует от ~ 500 до ~ 550 циклов ядра.
  • Чтение регистра 19CH (IA32_THERM_STATUS) обычно требует от ~ 900 до ~ 1050 циклов ядра.
  • Чтение регистра 198H (IA32_PERF_STATUS) обычно требует от ~ 5300 до ~ 5700 циклов ядра.

Вот команды nanoBench, которые я использовал для измерений:

sudo ./kernel-nanoBench.sh -asm "rdmsr" -asm_init "mov RCX, 0xE8"    
sudo ./kernel-nanoBench.sh -asm "rdmsr" -asm_init "mov RCX, 0x1A0"
sudo ./kernel-nanoBench.sh -asm "rdmsr" -asm_init "mov RCX, 0x19C"
sudo ./kernel-nanoBench.sh -asm "rdmsr" -asm_init "mov RCX, 0x198"

Есть идеи?

10000