> From: "Ted Unangst" <t...@tedunangst.com>
> Date: Sat, 14 May 2022 20:23:39 -0400
> 
> The cpu hz sensor is more accurate and updates faster than than the value
> currently used for hw.cpuspeed. So return that value (scaled).
> 
> This doesn't set cpuspeed directly because the acpi does that and it's hard
> to create a whole system of priority overrides. I think it's simpler and
> maybe even better to track every value, and then return the best one
> available.

At this point, I don't want this.  Right now, it is actually useful
that hw.cpuspeed represents the requested P-state whereas the sensors
give us the "effective" frequency the core is actually running at.
And that is useful for evaluating what is actually happening.

> Index: identcpu.c
> ===================================================================
> RCS file: /home/cvs/src/sys/arch/amd64/amd64/identcpu.c,v
> retrieving revision 1.124
> diff -u -p -r1.124 identcpu.c
> --- identcpu.c        26 Apr 2022 10:48:20 -0000      1.124
> +++ identcpu.c        15 May 2022 00:15:39 -0000
> @@ -64,6 +64,7 @@ void        cpu_check_vmm_cap(struct cpu_info *
>  /* sysctl wants this. */
>  char cpu_model[48];
>  int cpuspeed;
> +uint64_t sensorspeed;
>  
>  int amd64_has_xcrypt;
>  #ifdef CRYPTO
> @@ -244,6 +245,8 @@ int
>  cpu_amd64speed(int *freq)
>  {
>       *freq = cpuspeed;
> +     if (sensorspeed)
> +             *freq = sensorspeed / 1000000000000ULL;
>       return (0);
>  }
>  
> @@ -337,6 +340,8 @@ cpu_hz_update_sensor(void *args)
>               val = (adelta * 1000000) / mdelta * tsc_frequency;
>               val = ((val + FREQ_50MHZ / 2) / FREQ_50MHZ) * FREQ_50MHZ; 
>               ci->ci_hz_sensor.value = val;
> +             if (CPU_IS_PRIMARY(ci))
> +                     sensorspeed = val;
>       }
>  
>       atomic_clearbits_int(&curproc->p_flag, P_CPUPEG);
> 
> 

Reply via email to