rdmsr 时序是否取决于寄存器读取?
Does rdmsr timing depend on the register read?
执行 rdmsr
所需的时间是否在很大程度上取决于寄存器读取?
是的,时间在很大程度上取决于寄存器。以下是一些示例(在英特尔酷睿 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"
执行 rdmsr
所需的时间是否在很大程度上取决于寄存器读取?
是的,时间在很大程度上取决于寄存器。以下是一些示例(在英特尔酷睿 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"