cyring/CoreFreq
CoreFreq provides a framework to retrieve CPU data with a high degree of precision:
* Core frequencies and ratios; SpeedStep (EIST), Turbo Boost, Hyper-Threading (HTT) and Base Clock
* Performance counters including Time Stamp Counter (TSC), Unhalted Core Cycles (UCC), Unhalted Reference Cycles (URC)
* Number of instructions per cycle or second, IPS, IPC, or CPI
* CPU C-States C0 C1 C3 C6 C7 - C1E - Auto/UnDemotion of C1 C3
* DTS Temperature and Tjunction Max, Thermal Monitoring TM1 TM2 state, Vcore
* Topology map including Caches for boostrap and application CPU
* Processor features, brand and architecture strings
* In progress: Uncore, Memory Controller channels and geometry, DIMM timings,
* Stress tools, Power and Energy (RAPL, P-State, HWP, TDP), Overclocking, cpuidle and cpufreq driver, ClockSource, Mitigation Mechanisms
To reach this goal, CoreFreq implements a Linux Kernel module which employs the followings:
* asm code to keep as near as possible the readings of the performance counters;
* per-CPU, implements slab data memory and high-resolution timer;
* compliant with suspend / resume and CPU Hot-Plug;
* a shared memory to protect kernel from the user-space part of the software;
* atomic synchronization of threads to avoid mutexes and deadlock