• L
    tools/power turbostat: SKL: Adjust for TSC difference from base frequency · a2b7b749
    Len Brown 提交于
    On a Skylake with 1500MHz base frequency,
    the TSC runs at 1512MHz.
    
    This is because the TSC is no longer in the n*100 MHz BCLK domain,
    but is now in the m*24MHz crystal clock domain. (24 MHz * 63 = 1512 MHz)
    
    This adds error to several calculations in turbostat,
    unless the TSC sample sizes are adjusted for this difference.
    
    Note that calculations in the time domain are immune
    from this issue, as the timing sub-system has already
    calibrated the TSC against a known wall clock.
    
    AVG_MHz = APERF_delta/measurement_interval
    
    	need no adjustment.  APERF_delta is in the BCLK domain,
    	and measurement_interval is in the time domain.
    
    TSC_MHz  =  TSC_delta/measurement_interval
    
    	needs no adjustment -- as we really do want to report
    	the actual measured TSC delta here, and measurement_interval
    	is in the accurate time domain.
    
    %Busy = MPERF_delta/TSC_delta
    
    	needs adjustment to use TSC_BCLK_DOMAIN_delta.
    	TSC_BCLK_DOMAIN_delta = TSC_delta * base_hz / tsc_hz
    
    Bzy_MHz = TSC_delta/APERF_delta/MPERF_delta/measurement_interval
    
    	need adjustment as above.
    
    No other metrics in turbostat need to be adjusted.
    
    Before:
    
         CPU Avg_MHz   %Busy Bzy_MHz TSC_MHz
           -     550   24.84    2216    1512
           0    2191   98.73    2219    1514
           2       0    0.01    2130    1512
           1       9    0.43    2016    1512
           3       2    0.08    2016    1512
    
    After:
    
         CPU Avg_MHz   %Busy Bzy_MHz TSC_MHz
           -     550   25.05    2198    1512
           0    2190   99.62    2199    1512
           2       0    0.01    2152    1512
           1       9    0.46    2000    1512
           3       2    0.10    2000    1512
    
    Note that in this example, the "Before" Bzy_MHz
    was reported as exceeding the 2200 max turbo rate.
    Also, even a pinned spin loop would not be reported
    as over 99% busy.
    Signed-off-by: NLen Brown <len.brown@intel.com>
    a2b7b749
turbostat.c 82.1 KB