• Len Brown's avatar
    x86: do not use cpufreq_quick_get() for /proc/cpuinfo "cpu MHz" · 51204e06
    Len Brown authored
    cpufreq_quick_get() allows cpufreq drivers to over-ride cpu_khz
    that is otherwise reported in x86 /proc/cpuinfo "cpu MHz".
    
    There are four problems with this scheme,
    any of them is sufficient justification to delete it.
    
     1. Depending on which cpufreq driver is loaded, the behavior
        of this field is different.
    
     2. Distros complain that they have to explain to users
        why and how this field changes.  Distros have requested a constant.
    
     3. The two major providers of this information, acpi_cpufreq
        and intel_pstate, both "get it wrong" in different ways.
    
        acpi_cpufreq lies to the user by telling them that
        they are running at whatever frequency was last
        requested by software.
    
        intel_pstate lies to the user by telling them that
        they are running at the average frequency computed
        over an undefined measurement.  But an average computed
        over an undefined interval, is itself, undefined...
    
     4. On modern processors, user space utilities, such as
        turbostat(1), are more accurate and more precise, while
        supporing concurrent measurement over arbitrary intervals.
    
    Users who have been consulting /proc/cpuinfo to
    track changing CPU frequency will be dissapointed that
    it no longer wiggles -- perhaps being unaware of the
    limitations of the information they have been consuming.
    
    Yes, they can change their scripts to look in sysfs
    cpufreq/scaling_cur_frequency.  Here they will find the same
    data of dubious quality here removed from /proc/cpuinfo.
    The value in sysfs will be addressed in a subsequent patch
    to address issues 1-3, above.
    
    Issue 4 will remain -- users that really care about
    accurate frequency information should not be using either
    proc or sysfs kernel interfaces.
    They should be using using turbostat(8), or a similar
    purpose-built analysis tool.
    Signed-off-by: default avatarLen Brown <len.brown@intel.com>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    51204e06
proc.c 3.92 KB