x86x86-64intelcpu-architecturemsr

Setting Package-Wide MSRs for Uncore Frequency and Cache Allocation Technology


I am trying to set way masks for different class of service (COS) on an Intel Xeon processor. I am using the following command to make COS0 use all but the last four cache ways:

sudo wrmsr 0xc90 0x7f0

If I rdmsr the 0xc90 on processor 0 I find that the mask has been applied correctly. The technical documentation states that the register 0xc90 is a package wide register. However, when I read the value of register 0xc90 from processor one as follows:

sudo rdmsr -p 1 0xc90

I find that the cache ways mask has not been applied to processor 1's MSR. I had similar outputs when setting uncore frequency my manipulating 0x620 which is also a package wide register.

My question is that since the register is supposed to be package-wide, do I need to set 0xc90 on each processor individually to make the package adhere to the required cache mask? Or are the package wide registers such as 0xc90 and 0x620 (the uncore frequency ratio register) only read from processor 0's MSRs and then applied to the whole package regardless of the value they hold in the rest of the processors?

I hope my question makes sense. I would be glad to provide any clarification. Thank you!


Solution

  • I made a stupid mistake. I thought I had turned off socket 1 while running the aforementioned commands. But in reality I had not turned it off. So rdmsr -p 1 was reading registers from socket 1 instead of socket 2. @PeterCorders's comment helped me realize that I had not turned off the second socket properly.