I'm using an older Intel Atom C2558 CPU (formerly "Rangeley"). For some reason the Linux kernel does not expose RAPL access to the C2000 series of CPUs through the powercap interface (intel_rapl/intel_rapl_msr module). However, the Intel Software Developer's Manual, Vol. 4 claims RAPL support for this CPU model (0x4D) - see Table 2-10 in the June 2021 SDM release. So I am using direct MSR access instead.
This CPU model has a unique RAPL MSR configuration. Its power and energy units in MSR_RAPL_POWER_UNIT are like some other older Atom CPUs, but unlike other Silvermont CPUs, its time units and the MSR_PKG_POWER_LIMIT appear to use the traditional encodings, per Section 14.10.3 (June 2021 SDM).
I am able to read the package power limits from the MSR, and the values appear reasonable after conversion. However, when I try to write a new power limit, the write appears to be ignored and the old values remain. I confirmed that the lock bit is not set. For example, reading register 0x610 gives a value of 0x004688CA005B8753, but rejects my write after modifying bits 0-14 with new value 0x004688CA005B84E2 (to try and set PL1, though setting PL2 also fails).
The same problem applies to the PP0 (core) domain, whose MSR exists but is not documented in the SDM.
RAPL documentation for these C2000 CPUs is sparse, and the lack of Linux powercap support also raises questions about their RAPL capabilities. Can anyone answer any of the following:
- If they've ever tried writing RAPL configurations for any C2000 series CPU (model 0x4D), and whether they were successful (or not).
- Why writing to the RAPL power limit registers are being ignored.
- Why there is no powercap support in the Linux kernel for this CPU model.