I successfully write event information to MSRs from 0x186 to 0x189. However, I found it returns error starting from address 0x18a.
The CPU I'm using is Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz. I check the developer manual and search online, but find nothing.
Does anyone know how many MSRs can I use? It seems only 4 for my CPU?
Thanks in advance.
This is documented in Chapter 18 of the Intel developer manual Volume 3. For your Skylake processor, see Table 18-33. There are 8 general-purpose registers per core. If hyperthreading is enabled, then they are statically partitioned evenly between the two threads of the same core, i.e., each thread has 4 counter registers. So the last valid counter MSR is 0x189. This is probably why you're not able to write beyond 0x189. If hyperthreading is disabled, all of the 8 registers are available and so you can address up to MSR 0x18D on each core. Note that if you want to do full-width (48-bit) writes, you have to use the aliasing MSRs starting at 0x4C1.