|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 14/18] xen/cpufreq: introduce GET_CPUFREQ_CPPC sub-cmd
On 04.07.2025 10:56, Penny, Zheng wrote:
> [Public]
>
>> -----Original Message-----
>> From: Jan Beulich <jbeulich@xxxxxxxx>
>> Sent: Friday, July 4, 2025 4:33 PM
>> To: Penny, Zheng <penny.zheng@xxxxxxx>; Andryuk, Jason
>> <Jason.Andryuk@xxxxxxx>
>> Cc: Huang, Ray <Ray.Huang@xxxxxxx>; Anthony PERARD
>> <anthony.perard@xxxxxxxxxx>; Juergen Gross <jgross@xxxxxxxx>; Andrew
>> Cooper <andrew.cooper3@xxxxxxxxxx>; Orzel, Michal <Michal.Orzel@xxxxxxx>;
>> Julien Grall <julien@xxxxxxx>; Roger Pau Monné <roger.pau@xxxxxxxxxx>;
>> Stefano
>> Stabellini <sstabellini@xxxxxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx
>> Subject: Re: [PATCH v5 14/18] xen/cpufreq: introduce GET_CPUFREQ_CPPC sub-
>> cmd
>>
>> On 04.07.2025 10:13, Penny, Zheng wrote:
>>> [Public]
>>>
>>>> -----Original Message-----
>>>> From: Jan Beulich <jbeulich@xxxxxxxx>
>>>> Sent: Tuesday, June 17, 2025 6:08 PM
>>>> To: Penny, Zheng <penny.zheng@xxxxxxx>
>>>> Cc: Huang, Ray <Ray.Huang@xxxxxxx>; Anthony PERARD
>>>> <anthony.perard@xxxxxxxxxx>; Juergen Gross <jgross@xxxxxxxx>; Andrew
>>>> Cooper <andrew.cooper3@xxxxxxxxxx>; Orzel, Michal
>>>> <Michal.Orzel@xxxxxxx>; Julien Grall <julien@xxxxxxx>; Roger Pau
>>>> Monné <roger.pau@xxxxxxxxxx>; Stefano Stabellini
>>>> <sstabellini@xxxxxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx
>>>> Subject: Re: [PATCH v5 14/18] xen/cpufreq: introduce GET_CPUFREQ_CPPC
>>>> sub- cmd
>>>>
>>>> On 27.05.2025 10:48, Penny Zheng wrote:
>>>>> --- a/tools/misc/xenpm.c
>>>>> +++ b/tools/misc/xenpm.c
>>>>> @@ -69,6 +69,7 @@ void show_help(void)
>>>>> " set-max-cstate <num>|'unlimited'
>>>>> [<num2>|'unlimited']\n"
>>>>> " set the C-State
>>>>> limitation (<num> >= 0)
>> and\n"
>>>>> " optionally the
>>>>> C-sub-state limitation
>>>> (<num2> >= 0)\n"
>>>>> + " get-cpufreq-cppc [cpuid] list cpu cppc
>>>>> parameter of CPU
>>>> <cpuid> or all\n"
>>>>> " set-cpufreq-cppc [cpuid]
>>>>> [balance|performance|powersave]
>>>> <param:val>*\n"
>>>>> " set Hardware P-State
>>>>> (HWP) parameters\n"
>>>>> " on CPU <cpuid> or all
>>>>> if omitted.\n"
>>>>> @@ -812,33 +813,7 @@ static void print_cpufreq_para(int cpuid,
>>>>> struct xc_get_cpufreq_para *p_cpufreq)
>>>>>
>>>>> printf("scaling_driver : %s\n", p_cpufreq->scaling_driver);
>>>>>
>>>>> - if ( hwp )
>>>>> - {
>>>>> - const xc_cppc_para_t *cppc = &p_cpufreq->u.cppc_para;
>>>>> -
>>>>> - printf("cppc variables :\n");
>>>>> - printf(" hardware limits : lowest [%"PRIu32"] lowest
>>>>> nonlinear
>>>> [%"PRIu32"]\n",
>>>>> - cppc->lowest, cppc->lowest_nonlinear);
>>>>> - printf(" : nominal [%"PRIu32"] highest
>>>>> [%"PRIu32"]\n",
>>>>> - cppc->nominal, cppc->highest);
>>>>> - printf(" configured limits : min [%"PRIu32"] max [%"PRIu32"]
>>>>> energy
>> perf
>>>> [%"PRIu32"]\n",
>>>>> - cppc->minimum, cppc->maximum, cppc->energy_perf);
>>>>> -
>>>>> - if ( cppc->features & XEN_SYSCTL_CPPC_FEAT_ACT_WINDOW )
>>>>> - {
>>>>> - unsigned int activity_window;
>>>>> - const char *units;
>>>>> -
>>>>> - activity_window = calculate_activity_window(cppc, &units);
>>>>> - printf(" : activity_window [%"PRIu32"
>>>>> %s]\n",
>>>>> - activity_window, units);
>>>>> - }
>>>>> -
>>>>> - printf(" : desired [%"PRIu32"%s]\n",
>>>>> - cppc->desired,
>>>>> - cppc->desired ? "" : " hw autonomous");
>>>>> - }
>>>>> - else
>>>>> + if ( !hwp )
>>>>> {
>>>>> if ( p_cpufreq->gov_num )
>>>>> printf("scaling_avail_gov : %s\n",
>>>>
>>>> I'm not sure it is a good idea to alter what is being output for
>>>> get-cpufreq-para.
>>>> People may simply miss that output then, without having any
>>>> indication where it went.
>>>
>>> Hwp is more like amd-cppc in active mode. It also does not rely on Xen
>>> governor to do performance tuning, so in previous design, we could borrow
>> governor filed to output cppc info However after introducing amd-cppc passive
>> mode, we have request to output both governor and CPPC info. And if
>> continuing
>> expanding get-cpufreq-para to include CPPC info, it will make the parent
>> stuct
>> xen_sysctl.u exceed exceed 128 bytes.
>>
>> How is the xenpm command "get-cpufreq-para" related to the sysctl interface
>> struct
>> size? If you need to invoke two sysctl sub-ops to produce all relevant
>> "get-cpufreq-
>> para" output, so be it I would say.
>>
>
> Because we are limiting each sysctl-subcmd-struct, such as " struct
> xen_sysctl_pm_op ", 128 bytes in "struct xen_sysctl",They are all combined as
> a union.
> Also, in "struct xen_sysctl_pm_op", its descending sub-op structs, including
> "struct xen_get_cpufreq_para", are all combined as union too
> ```
> struct xen_sysctl_pm_op {
> ... ...
> union {
> struct xen_get_cpufreq_para get_para;
> struct xen_set_cpufreq_gov set_gov;
> struct xen_set_cpufreq_para set_para;
> struct xen_set_cppc_para set_cppc;
> uint64_aligned_t get_avgfreq;
> uint32_t set_sched_opt_smt;
> #define XEN_SYSCTL_CX_UNLIMITED 0xffffffffU
> uint32_t get_max_cstate;
> uint32_t set_max_cstate;
> } u;
> }
> ```
> It could deduce that "struct xen_get_cpufreq_para" is limited to 128 bytes (I
> think actual limit is smaller than 128)....
And that implies what? In my earlier reply I already said that you may then
simply need to invoke more than one sysctl to get all the data you need. (As
one of the options, that is.)
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |