Время rdmsr зависит от чтения регистра? - PullRequest
4 голосов
/ 15 января 2020

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

1 Ответ

5 голосов
/ 16 января 2020

Да, время может существенно зависеть от регистра. Вот несколько примеров (измеренных на 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"
...