On Sun, May 15, 2022 at 10:35:43AM +0200, Mark Kettenis wrote:
> > From: "Ted Unangst" <[email protected]>
> > 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.
I agree, I think both values are needed for scheduler and power management
changes. The next bit on the todo list is RAPL support so the energy
consumtion can be measured and shown.
> > 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);
> >
> >
>
--
:wq Claudio