diff mbox series

intel_idle: Add RaptorLake support

Message ID 20230119070205.90047-1-noltari@gmail.com
State New
Headers show
Series intel_idle: Add RaptorLake support | expand

Commit Message

Álvaro Fernández Rojas Jan. 19, 2023, 7:02 a.m. UTC
This patch adds RaptorLake support to the intel_idle driver.

Since RaptorLake and AlderLake C-state are characteristics the same, we use
AlderLake C-states tables for RaptorLake as well.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 drivers/idle/intel_idle.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Zhang, Rui Jan. 19, 2023, 7:52 a.m. UTC | #1
On Thu, 2023-01-19 at 08:02 +0100, Álvaro Fernández Rojas wrote:
> This patch adds RaptorLake support to the intel_idle driver.
> 
> Since RaptorLake and AlderLake C-state are characteristics the same,
> we use
> AlderLake C-states tables for RaptorLake as well.

They may use the same mwait hints, but the the latency of each c-state
are still different on different platforms.

Just FYI, there is an effort ongoing that measures the latency of each
cstate on the RPL platforms. And based on the measurement result, we
can decide if a new custom table is needed or we can just copy the
previous platform.

thanks,
rui

> 
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  drivers/idle/intel_idle.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
> index cfeb24d40d37..1a35b98d9bae 100644
> --- a/drivers/idle/intel_idle.c
> +++ b/drivers/idle/intel_idle.c
> @@ -1429,6 +1429,9 @@ static const struct x86_cpu_id intel_idle_ids[]
> __initconst = {
>  	X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE,		&idle_cpu_adl
> ),
>  	X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L,		&idle_cpu_adl
> _l),
>  	X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_N,		&idle_cpu_adl
> _n),
> +	X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE,		&idle_cpu_adl
> ),
> +	X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P,	&idle_cpu_adl_n),
> +	X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_S,	&idle_cpu_adl),
>  	X86_MATCH_INTEL_FAM6_MODEL(SAPPHIRERAPIDS_X,	&idle_cpu_spr
> ),
>  	X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNL,	&idle_cpu_knl),
>  	X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNM,	&idle_cpu_knl),
> @@ -1867,6 +1870,9 @@ static void __init
> intel_idle_init_cstates_icpu(struct cpuidle_driver *drv)
>  	case INTEL_FAM6_ALDERLAKE:
>  	case INTEL_FAM6_ALDERLAKE_L:
>  	case INTEL_FAM6_ALDERLAKE_N:
> +	case INTEL_FAM6_RAPTORLAKE:
> +	case INTEL_FAM6_RAPTORLAKE_P:
> +	case INTEL_FAM6_RAPTORLAKE_S:
>  		adl_idle_state_table_update();
>  		break;
>  	}
Guillaume Martres Aug. 19, 2023, 7:41 p.m. UTC | #2
On 1/19/23 17:13, Zhang, Rui wrote:
> On Thu, 2023-01-19 at 08:02 +0100, Álvaro Fernández Rojas wrote:
>> This patch adds RaptorLake support to the intel_idle driver.
>>
>> Since RaptorLake and AlderLake C-state are characteristics the same,
>> we use
>> AlderLake C-states tables for RaptorLake as well.
> 
> RPL and ADL have same cstates and use the same mwait hints, but the
> latency of each c-state are still different on different platforms.
> So we can not just duplicate the ADL table on RPL.
> 
> There is an effort ongoing that measures the latency of each
> cstate on the RPL platforms. And based on the measurement result, we
> can decide if a new custom table is needed or we can just copy the
> previous platform. Hopefully we will have a patch in a couple of weeks.

Hi, I just stumbled upon this patch series as I was wondering about the
lack of support for Raptor Lake in intel_idle. Your last message from
January mentions a future patch, is it available anywhere or is this
still future work?

Thank you,
Guillaume
Zhang, Rui Aug. 20, 2023, 9:20 a.m. UTC | #3
On Sat, 2023-08-19 at 21:41 +0200, Guillaume Martres wrote:
> On 1/19/23 17:13, Zhang, Rui wrote:
> > On Thu, 2023-01-19 at 08:02 +0100, Álvaro Fernández Rojas wrote:
> > > This patch adds RaptorLake support to the intel_idle driver.
> > > 
> > > Since RaptorLake and AlderLake C-state are characteristics the
> > > same,
> > > we use
> > > AlderLake C-states tables for RaptorLake as well.
> > 
> > RPL and ADL have same cstates and use the same mwait hints, but the
> > latency of each c-state are still different on different platforms.
> > So we can not just duplicate the ADL table on RPL.
> > 
> > There is an effort ongoing that measures the latency of each
> > cstate on the RPL platforms. And based on the measurement result,
> > we
> > can decide if a new custom table is needed or we can just copy the
> > previous platform. Hopefully we will have a patch in a couple of
> > weeks.
> 
> Hi, I just stumbled upon this patch series as I was wondering about
> the
> lack of support for Raptor Lake in intel_idle.

intel_idle support for RaptorLake, and also other platforms that don't
have a custom table, is always there as long as we have BIOS support.
The custom table is just an optimization.

>  Your last message from
> January mentions a future patch, is it available anywhere or is this
> still future work?
> 

This is still work in progress because there are still some open
questions that we cannot answer from our measurement, and the table is
not finalized yet.

thanks,
rui
Guillaume Martres Aug. 20, 2023, 10:28 a.m. UTC | #4
Le 20/08/2023 à 11:20, Zhang, Rui a écrit :
> On Sat, 2023-08-19 at 21:41 +0200, Guillaume Martres wrote:
>> On 1/19/23 17:13, Zhang, Rui wrote:
>>> On Thu, 2023-01-19 at 08:02 +0100, Álvaro Fernández Rojas wrote:
>>>> This patch adds RaptorLake support to the intel_idle driver.
>>>>
>>>> Since RaptorLake and AlderLake C-state are characteristics the
>>>> same,
>>>> we use
>>>> AlderLake C-states tables for RaptorLake as well.
>>>
>>> RPL and ADL have same cstates and use the same mwait hints, but the
>>> latency of each c-state are still different on different platforms.
>>> So we can not just duplicate the ADL table on RPL.
>>>
>>> There is an effort ongoing that measures the latency of each
>>> cstate on the RPL platforms. And based on the measurement result,
>>> we
>>> can decide if a new custom table is needed or we can just copy the
>>> previous platform. Hopefully we will have a patch in a couple of
>>> weeks.
>>
>> Hi, I just stumbled upon this patch series as I was wondering about
>> the
>> lack of support for Raptor Lake in intel_idle.
> 
> intel_idle support for RaptorLake, and also other platforms that don't
> have a custom table, is always there as long as we have BIOS support.
> The custom table is just an optimization.

Thanks for the information, I might be misinterpreting the effect of
this patch then. I can report that on a Thinkpad P1 Gen 6 using a stock
6.4.11 kernel, the list of C-states looks like this:

$ cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name
POLL
C1_ACPI
C2_ACPI
C3_ACPI

Whereas with this patch they look like this:

$ cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name
POLL
C1E
C6
C8
C10

Neither of which looks quite complete (and
/sys/module/intel_idle/parameters/max_cstate is set to 9). Is this
something I should open a bug report about?

Thanks,
Guillaume
Zhang, Rui Aug. 24, 2023, 6:30 a.m. UTC | #5
On Sun, 2023-08-20 at 12:28 +0200, Guillaume Martres wrote:
> 
> 
> Le 20/08/2023 à 11:20, Zhang, Rui a écrit :
> > On Sat, 2023-08-19 at 21:41 +0200, Guillaume Martres wrote:
> > > On 1/19/23 17:13, Zhang, Rui wrote:
> > > > On Thu, 2023-01-19 at 08:02 +0100, Álvaro Fernández Rojas
> > > > wrote:
> > > > > This patch adds RaptorLake support to the intel_idle driver.
> > > > > 
> > > > > Since RaptorLake and AlderLake C-state are characteristics
> > > > > the
> > > > > same,
> > > > > we use
> > > > > AlderLake C-states tables for RaptorLake as well.
> > > > 
> > > > RPL and ADL have same cstates and use the same mwait hints, but
> > > > the
> > > > latency of each c-state are still different on different
> > > > platforms.
> > > > So we can not just duplicate the ADL table on RPL.
> > > > 
> > > > There is an effort ongoing that measures the latency of each
> > > > cstate on the RPL platforms. And based on the measurement
> > > > result,
> > > > we
> > > > can decide if a new custom table is needed or we can just copy
> > > > the
> > > > previous platform. Hopefully we will have a patch in a couple
> > > > of
> > > > weeks.
> > > 
> > > Hi, I just stumbled upon this patch series as I was wondering
> > > about
> > > the
> > > lack of support for Raptor Lake in intel_idle.
> > 
> > intel_idle support for RaptorLake, and also other platforms that
> > don't
> > have a custom table, is always there as long as we have BIOS
> > support.
> > The custom table is just an optimization.
> 
> Thanks for the information, I might be misinterpreting the effect of
> this patch then. I can report that on a Thinkpad P1 Gen 6 using a
> stock
> 6.4.11 kernel, the list of C-states looks like this:
> 
> $ cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name
> POLL
> C1_ACPI
> C2_ACPI
> C3_ACPI
> 
> Whereas with this patch they look like this:
> 
> $ cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name
> POLL
> C1E
> C6
> C8
> C10

Yeah, both of them looks reasonable.

> 
> Neither of which looks quite complete

Yeah, cpu can support more cstates but
   ACPI can expose 3 different cstates only.
   custom table can expose more, but there is no need to do so. To get
better PnP, only part of them are actually needed.

>  (and
> /sys/module/intel_idle/parameters/max_cstate is set to 9).

	static int max_cstate = CPUIDLE_STATE_MAX - 1;

So 9 is the default value when the intel_idle.max_cstate parameter is
not set.

>  Is this
> something I should open a bug report about?
> 
TBH, I don't see any problem here.

thanks,
rui
László Péter April 7, 2024, 5:37 p.m. UTC | #6
> On 20 Aug 2023, at 11:20, Zhang, Rui <rui.zhang@intel.com> wrote:
> 
> This is still work in progress because there are still some open
> questions that we cannot answer from our measurement, and the table is
> not finalized yet.
> 
> thanks,
> rui
> 
> 

Hi,

I also just stumbled upon this patch series as I was wondering about the lack of specific support for RaptorLake in intel_idle. The AlderLake specific part of the intel_idle.c code mentions that "On AlderLake C1 has to be disabled if C1E is enabled, and vice versa …. By default we enable C1E and disable C1 by marking it with...”.   Without a patch on RaptorLake (which I assume works the same way) this cannot be controlled with the preferred_cstates kernel parameter. Also on my NUC 13 Pro i5-1340P the latency for C10 looks suspiciously large compared to the AlderLake cstates table.

grep . /sys/devices/system/cpu/cpu0/cpuidle/state*/desc
/sys/devices/system/cpu/cpu0/cpuidle/state0/desc:CPUIDLE CORE POLL IDLE
/sys/devices/system/cpu/cpu0/cpuidle/state1/desc:ACPI FFH MWAIT 0x0
/sys/devices/system/cpu/cpu0/cpuidle/state2/desc:ACPI FFH MWAIT 0x21
/sys/devices/system/cpu/cpu0/cpuidle/state3/desc:ACPI FFH MWAIT 0x60

grep . /sys/devices/system/cpu/cpu0/cpuidle/state*/latency
/sys/devices/system/cpu/cpu0/cpuidle/state0/latency:0
/sys/devices/system/cpu/cpu0/cpuidle/state1/latency:1
/sys/devices/system/cpu/cpu0/cpuidle/state2/latency:127
/sys/devices/system/cpu/cpu0/cpuidle/state3/latency:1048

Thanks,
Peter
diff mbox series

Patch

diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
index cfeb24d40d37..1a35b98d9bae 100644
--- a/drivers/idle/intel_idle.c
+++ b/drivers/idle/intel_idle.c
@@ -1429,6 +1429,9 @@  static const struct x86_cpu_id intel_idle_ids[] __initconst = {
 	X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE,		&idle_cpu_adl),
 	X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L,		&idle_cpu_adl_l),
 	X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_N,		&idle_cpu_adl_n),
+	X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE,		&idle_cpu_adl),
+	X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P,	&idle_cpu_adl_n),
+	X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_S,	&idle_cpu_adl),
 	X86_MATCH_INTEL_FAM6_MODEL(SAPPHIRERAPIDS_X,	&idle_cpu_spr),
 	X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNL,	&idle_cpu_knl),
 	X86_MATCH_INTEL_FAM6_MODEL(XEON_PHI_KNM,	&idle_cpu_knl),
@@ -1867,6 +1870,9 @@  static void __init intel_idle_init_cstates_icpu(struct cpuidle_driver *drv)
 	case INTEL_FAM6_ALDERLAKE:
 	case INTEL_FAM6_ALDERLAKE_L:
 	case INTEL_FAM6_ALDERLAKE_N:
+	case INTEL_FAM6_RAPTORLAKE:
+	case INTEL_FAM6_RAPTORLAKE_P:
+	case INTEL_FAM6_RAPTORLAKE_S:
 		adl_idle_state_table_update();
 		break;
 	}