[PATCH] perf/x86: Add cond_resched() when allocate/release DS buffers

Namhyung Kim posted 1 patch 3 months, 1 week ago
arch/x86/events/intel/ds.c | 3 +++
1 file changed, 3 insertions(+)
[PATCH] perf/x86: Add cond_resched() when allocate/release DS buffers
Posted by Namhyung Kim 3 months, 1 week ago
On large systems, it's possible to trigger sched latency warning during
the DS buffer allocation or release.  Add cond_resched() to avoid it.

Reported-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 arch/x86/events/intel/ds.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c
index c0b7ac1c7594ea92..c8e90c5a8d3390ab 100644
--- a/arch/x86/events/intel/ds.c
+++ b/arch/x86/events/intel/ds.c
@@ -754,6 +754,7 @@ void release_ds_buffers(void)
 		if (x86_pmu.ds_pebs)
 			release_pebs_buffer(cpu);
 		release_bts_buffer(cpu);
+		cond_resched();
 	}
 }
 
@@ -791,6 +792,8 @@ void reserve_ds_buffers(void)
 
 		if (bts_err && pebs_err)
 			break;
+
+		cond_resched();
 	}
 
 	if (bts_err) {
-- 
2.51.1.838.g19442a804e-goog
Re: [PATCH] perf/x86: Add cond_resched() when allocate/release DS buffers
Posted by Peter Zijlstra 3 months, 1 week ago
On Mon, Oct 27, 2025 at 02:27:24PM -0700, Namhyung Kim wrote:
> On large systems, it's possible to trigger sched latency warning during
> the DS buffer allocation or release.  Add cond_resched() to avoid it.

We're >.< close to deleting cond_resched(), it makes absolutely no sense
adding more.
Re: [PATCH] perf/x86: Add cond_resched() when allocate/release DS buffers
Posted by Peter Zijlstra 3 months, 1 week ago
On Tue, Oct 28, 2025 at 03:15:18PM +0100, Peter Zijlstra wrote:
> On Mon, Oct 27, 2025 at 02:27:24PM -0700, Namhyung Kim wrote:
> > On large systems, it's possible to trigger sched latency warning during
> > the DS buffer allocation or release.  Add cond_resched() to avoid it.
> 
> We're >.< close to deleting cond_resched(), it makes absolutely no sense
> adding more.

Specifically, IIRC the plan was to do something like the below after the
next LTS release, and then continue to remove VOLUNTARY in subsequent
releases, leaving NONE the only option for the legacy architectures that
do not support preemption.


diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
index da326800c1c9..db4ae53c1d49 100644
--- a/kernel/Kconfig.preempt
+++ b/kernel/Kconfig.preempt
@@ -16,11 +16,12 @@ config ARCH_HAS_PREEMPT_LAZY
 
 choice
 	prompt "Preemption Model"
-	default PREEMPT_NONE
+	default PREEMPT_LAZY
 
 config PREEMPT_NONE
 	bool "No Forced Preemption (Server)"
 	depends on !PREEMPT_RT
+	depends on ARCH_NO_PREEMPT
 	select PREEMPT_NONE_BUILD if !PREEMPT_DYNAMIC
 	help
 	  This is the traditional Linux preemption model, geared towards
@@ -35,8 +36,8 @@ config PREEMPT_NONE
 
 config PREEMPT_VOLUNTARY
 	bool "Voluntary Kernel Preemption (Desktop)"
-	depends on !ARCH_NO_PREEMPT
 	depends on !PREEMPT_RT
+	depends on ARCH_NO_PREEMPT
 	select PREEMPT_VOLUNTARY_BUILD if !PREEMPT_DYNAMIC
 	help
 	  This option reduces the latency of the kernel by adding more
Re: [PATCH] perf/x86: Add cond_resched() when allocate/release DS buffers
Posted by Namhyung Kim 3 months, 1 week ago
Hi Peter,

On Tue, Oct 28, 2025 at 04:27:47PM +0100, Peter Zijlstra wrote:
> On Tue, Oct 28, 2025 at 03:15:18PM +0100, Peter Zijlstra wrote:
> > On Mon, Oct 27, 2025 at 02:27:24PM -0700, Namhyung Kim wrote:
> > > On large systems, it's possible to trigger sched latency warning during
> > > the DS buffer allocation or release.  Add cond_resched() to avoid it.
> > 
> > We're >.< close to deleting cond_resched(), it makes absolutely no sense
> > adding more.
> 
> Specifically, IIRC the plan was to do something like the below after the
> next LTS release, and then continue to remove VOLUNTARY in subsequent
> releases, leaving NONE the only option for the legacy architectures that
> do not support preemption.

Thanks for your review!

I haven't followed the work in this area so was not aware of the
PREEMPT_LAZY.  Looks great!  I hope it'll work well on server platforms
with many batch jobs and interactive tasks.

I will drop my patch then.

Thanks,
Namhyung

> 
> 
> diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt
> index da326800c1c9..db4ae53c1d49 100644
> --- a/kernel/Kconfig.preempt
> +++ b/kernel/Kconfig.preempt
> @@ -16,11 +16,12 @@ config ARCH_HAS_PREEMPT_LAZY
>  
>  choice
>  	prompt "Preemption Model"
> -	default PREEMPT_NONE
> +	default PREEMPT_LAZY
>  
>  config PREEMPT_NONE
>  	bool "No Forced Preemption (Server)"
>  	depends on !PREEMPT_RT
> +	depends on ARCH_NO_PREEMPT
>  	select PREEMPT_NONE_BUILD if !PREEMPT_DYNAMIC
>  	help
>  	  This is the traditional Linux preemption model, geared towards
> @@ -35,8 +36,8 @@ config PREEMPT_NONE
>  
>  config PREEMPT_VOLUNTARY
>  	bool "Voluntary Kernel Preemption (Desktop)"
> -	depends on !ARCH_NO_PREEMPT
>  	depends on !PREEMPT_RT
> +	depends on ARCH_NO_PREEMPT
>  	select PREEMPT_VOLUNTARY_BUILD if !PREEMPT_DYNAMIC
>  	help
>  	  This option reduces the latency of the kernel by adding more
Re: [PATCH] perf/x86: Add cond_resched() when allocate/release DS buffers
Posted by Peter Zijlstra 3 months, 1 week ago
On Tue, Oct 28, 2025 at 12:02:58PM -0700, Namhyung Kim wrote:
> Hi Peter,
> 
> On Tue, Oct 28, 2025 at 04:27:47PM +0100, Peter Zijlstra wrote:
> > On Tue, Oct 28, 2025 at 03:15:18PM +0100, Peter Zijlstra wrote:
> > > On Mon, Oct 27, 2025 at 02:27:24PM -0700, Namhyung Kim wrote:
> > > > On large systems, it's possible to trigger sched latency warning during
> > > > the DS buffer allocation or release.  Add cond_resched() to avoid it.
> > > 
> > > We're >.< close to deleting cond_resched(), it makes absolutely no sense
> > > adding more.
> > 
> > Specifically, IIRC the plan was to do something like the below after the
> > next LTS release, and then continue to remove VOLUNTARY in subsequent
> > releases, leaving NONE the only option for the legacy architectures that
> > do not support preemption.
> 
> Thanks for your review!
> 
> I haven't followed the work in this area so was not aware of the
> PREEMPT_LAZY.  Looks great!  I hope it'll work well on server platforms
> with many batch jobs and interactive tasks.
> 
> I will drop my patch then.

Well, we've been trying to get people to test things... But
realistically people will only test once you force them. So we'll see.
Re: [PATCH] perf/x86: Add cond_resched() when allocate/release DS buffers
Posted by Sebastian Andrzej Siewior 3 months, 1 week ago
On 2025-10-28 20:04:22 [+0100], Peter Zijlstra wrote:
> Well, we've been trying to get people to test things... But
> realistically people will only test once you force them. So we'll see.

| grep CONFIG_PREEMPT_LAZY /boot/config-6.16.12+deb14+1-amd64
| CONFIG_PREEMPT_LAZY=y

Debian has it enabled by default in current testing/ unstable distro.
\o/

Sebastian
Re: [PATCH] perf/x86: Add cond_resched() when allocate/release DS buffers
Posted by Peter Zijlstra 3 months, 1 week ago
On Tue, Oct 28, 2025 at 09:13:54PM +0100, Sebastian Andrzej Siewior wrote:
> On 2025-10-28 20:04:22 [+0100], Peter Zijlstra wrote:
> > Well, we've been trying to get people to test things... But
> > realistically people will only test once you force them. So we'll see.
> 
> | grep CONFIG_PREEMPT_LAZY /boot/config-6.16.12+deb14+1-amd64
> | CONFIG_PREEMPT_LAZY=y
> 
> Debian has it enabled by default in current testing/ unstable distro.
> \o/

Yes, I noticed, thanks!