|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v4 03/15] xen/x86: introduce new sub-hypercall to propagate CPPC data
[Public]
HI
> -----Original Message-----
> From: Jan Beulich <jbeulich@xxxxxxxx>
> Sent: Monday, April 28, 2025 11:57 PM
> To: Penny, Zheng <penny.zheng@xxxxxxx>
> Cc: Huang, Ray <Ray.Huang@xxxxxxx>; Andrew Cooper
> <andrew.cooper3@xxxxxxxxxx>; Roger Pau Monné <roger.pau@xxxxxxxxxx>;
> Anthony PERARD <anthony.perard@xxxxxxxxxx>; Orzel, Michal
> <Michal.Orzel@xxxxxxx>; Julien Grall <julien@xxxxxxx>; Stefano Stabellini
> <sstabellini@xxxxxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx
> Subject: Re: [PATCH v4 03/15] xen/x86: introduce new sub-hypercall to
> propagate
> CPPC data
>
> On 14.04.2025 09:40, Penny Zheng wrote:
> > + if ( cppc_data->flags & XEN_CPPC_CPC )
> > + {
> > + if ( cppc_data->cpc.highest_perf == 0 ||
> > + cppc_data->cpc.highest_perf > UINT8_MAX ||
> > + cppc_data->cpc.nominal_perf == 0 ||
> > + cppc_data->cpc.nominal_perf > UINT8_MAX ||
> > + cppc_data->cpc.lowest_nonlinear_perf == 0 ||
> > + cppc_data->cpc.lowest_nonlinear_perf > UINT8_MAX ||
> > + cppc_data->cpc.lowest_perf == 0 ||
> > + cppc_data->cpc.lowest_perf > UINT8_MAX ||
> > + cppc_data->cpc.lowest_perf >
> > + cppc_data->cpc.lowest_nonlinear_perf ||
>
> Where's this ordering spelled out in the spec?
>
Clip a snippet from description on lowest performance[1], we may deduce that
```
Selecting a performance level lower than the lowest nonlinear performance level
may actually cause an efficiency penalty,
but should reduce the instantaneous power consumption of the processor
```
lowest is smaller than lowest nonlinear
> > + cppc_data->cpc.lowest_nonlinear_perf >
> > + cppc_data->cpc.nominal_perf ||
> > + cppc_data->cpc.nominal_perf > cppc_data->cpc.highest_perf )
> > + /*
> > + * Right now, Xen doesn't actually use perf values
> > + * in ACPI _CPC table, warning is enough.
> > + */
> > + printk(XENLOG_WARNING
> > + "Broken CPPC perf values: lowest(%u),
> > nonlinear_lowest(%u),
> nominal(%u), highest(%u)\n",
> > + cppc_data->cpc.lowest_perf,
> > + cppc_data->cpc.lowest_nonlinear_perf,
> > + cppc_data->cpc.nominal_perf,
> > + cppc_data->cpc.highest_perf);
>
> If this warning was to ever surface, it would likely surface for every CPU.
> That's unnecessarily verbose, I guess. Please consider using printk_once()
> here.
>
Understood
> Also, is "right now" (as the comment says) still going to be true by the end
> of the
> series? Didn't I see you use the values in earlier versions?
>
The reason why I added this comment is that in current implementation, we
actually
don't use values read from ACPI _CPC table for lowest_perf,
lowest_nonlinear_perf,
nominal_perf, and highest_perf.
We read CPPC capability MSR to get these four values.
What we actually use is the following optional lowest_mhz and nominal_mhz. We
read
these two values for perf_to_khz transition.
There are two ways to read CPPC capability info, one is from MSR register, and
the other is from
_CPC table. Only in very few hardware, MSR is not supported, and we must switch
to use ACPI _CPC
Such scenario is not covered in this patch serie. I've mentioned it in the
cover letter.
The difficulty actually is that when we try to use ACPI _CPC to do CPPC
performance monitoring,
some control registers are probably implemented in the Platform Communications
Channel (PCC) interface, which
is not supported in Xen.
> > +
> > + if ( cppc_data->flags == (XEN_CPPC_PSD | XEN_CPPC_CPC) )
>
> If either flag may be clear, ...
>
> > + {
> > + pm_info->cppc_data = *cppc_data;
> > + if ( cpufreq_verbose )
> > + {
> > + print_PSD(&pm_info->cppc_data.domain_info);
> > + print_CPPC(&pm_info->cppc_data);
>
> ... why unconditionally loog both?
>
> > + }
> > +
> > + pm_info->init = XEN_CPPC_INIT;
>
> Plus is it correct to set this flag if either of the incoming flags was clear?
>
Hmm, I may not understand what you mean here...
I log and set this flag only when both flags are set (cppc_data->flags ==
(XEN_CPPC_PSD | XEN_CPPC_CPC))
_PSD entry and _CPC entry are both mandatory
Did you suggest that we shall give warning message when either flag is clear?
> Jan
[1]
https://uefi.org/specs/ACPI/6.5/08_Processor_Configuration_and_Control.html?highlight=cppc#lowest-performance
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |