[PATCH] x86: Add Kconfig option to use a 32bit TLB clock on debug

Alejandro Vallejo posted 1 patch 3 weeks, 4 days ago
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/20260112140851.55590-1-alejandro.garciavallejo@amd.com
xen/arch/x86/Kconfig.debug | 8 ++++++++
xen/arch/x86/flushtlb.c    | 6 +-----
2 files changed, 9 insertions(+), 5 deletions(-)
[PATCH] x86: Add Kconfig option to use a 32bit TLB clock on debug
Posted by Alejandro Vallejo 3 weeks, 4 days ago
Debug builds stress the wrapping logic of the TLB clock by narrowing it
down to 10 bits. This is inconvenient to test real time workloads on
such builds.

Add Kconfig option to be able to selectively use the non-stressed
behaviour on debug.

Signed-off-by: Alejandro Vallejo <alejandro.garciavallejo@amd.com>
---
 xen/arch/x86/Kconfig.debug | 8 ++++++++
 xen/arch/x86/flushtlb.c    | 6 +-----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/xen/arch/x86/Kconfig.debug b/xen/arch/x86/Kconfig.debug
index e69de29bb2..ecf5aa4336 100644
--- a/xen/arch/x86/Kconfig.debug
+++ b/xen/arch/x86/Kconfig.debug
@@ -0,0 +1,8 @@
+config DEBUG_TLB_CLK
+	bool "TLB clock stressing"
+	default DEBUG
+	help
+	  Stress the TLB clock wrapping logic by narrowing down the counter to
+	  just a few bits. On wrap-around a global TLB shootdown takes place.
+
+	  Disable to run real-time workloads more reliably on debug builds.
diff --git a/xen/arch/x86/flushtlb.c b/xen/arch/x86/flushtlb.c
index 09e676c151..0d788047c5 100644
--- a/xen/arch/x86/flushtlb.c
+++ b/xen/arch/x86/flushtlb.c
@@ -20,11 +20,7 @@
 #include <asm/spec_ctrl.h>
 
 /* Debug builds: Wrap frequently to stress-test the wrap logic. */
-#ifdef NDEBUG
-#define WRAP_MASK (0xFFFFFFFFU)
-#else
-#define WRAP_MASK (0x000003FFU)
-#endif
+#define WRAP_MASK (IS_ENABLED(CONFIG_DEBUG_TLB_CLK) ? 0x3FFU : UINT32_MAX)
 
 #ifndef CONFIG_PV
 # undef X86_CR4_PCIDE

base-commit: 6238c97ea430706cb4a959b1474ad40a57ed1033
-- 
2.43.0
Re: [PATCH] x86: Add Kconfig option to use a 32bit TLB clock on debug
Posted by Jan Beulich 3 weeks, 4 days ago
On 12.01.2026 15:08, Alejandro Vallejo wrote:
> Debug builds stress the wrapping logic of the TLB clock by narrowing it
> down to 10 bits. This is inconvenient to test real time workloads on
> such builds.
> 
> Add Kconfig option to be able to selectively use the non-stressed
> behaviour on debug.
> 
> Signed-off-by: Alejandro Vallejo <alejandro.garciavallejo@amd.com>

Hmm, yes, why not. However, ...

> --- a/xen/arch/x86/flushtlb.c
> +++ b/xen/arch/x86/flushtlb.c
> @@ -20,11 +20,7 @@
>  #include <asm/spec_ctrl.h>
>  
>  /* Debug builds: Wrap frequently to stress-test the wrap logic. */
> -#ifdef NDEBUG
> -#define WRAP_MASK (0xFFFFFFFFU)
> -#else
> -#define WRAP_MASK (0x000003FFU)
> -#endif
> +#define WRAP_MASK (IS_ENABLED(CONFIG_DEBUG_TLB_CLK) ? 0x3FFU : UINT32_MAX)

... the comment then will want updating as well, I'd say. It doesn't go
terribly stale this way, but at least slightly. I'd suggest to minimally
drop "builds".

Jan
Re: [PATCH] x86: Add Kconfig option to use a 32bit TLB clock on debug
Posted by Andrew Cooper 3 weeks, 4 days ago
On 12/01/2026 2:43 pm, Jan Beulich wrote:
> On 12.01.2026 15:08, Alejandro Vallejo wrote:
>> Debug builds stress the wrapping logic of the TLB clock by narrowing it
>> down to 10 bits. This is inconvenient to test real time workloads on
>> such builds.
>>
>> Add Kconfig option to be able to selectively use the non-stressed
>> behaviour on debug.
>>
>> Signed-off-by: Alejandro Vallejo <alejandro.garciavallejo@amd.com>
> Hmm, yes, why not. However, ...
>
>> --- a/xen/arch/x86/flushtlb.c
>> +++ b/xen/arch/x86/flushtlb.c
>> @@ -20,11 +20,7 @@
>>  #include <asm/spec_ctrl.h>
>>  
>>  /* Debug builds: Wrap frequently to stress-test the wrap logic. */
>> -#ifdef NDEBUG
>> -#define WRAP_MASK (0xFFFFFFFFU)
>> -#else
>> -#define WRAP_MASK (0x000003FFU)
>> -#endif
>> +#define WRAP_MASK (IS_ENABLED(CONFIG_DEBUG_TLB_CLK) ? 0x3FFU : UINT32_MAX)
> ... the comment then will want updating as well, I'd say. It doesn't go
> terribly stale this way, but at least slightly. I'd suggest to minimally
> drop "builds".

I'm suggest just dropping WRAP_MASK.

We've done this locally in the XenServer patchqueue since 2011 or so due
to the overhead, and I don't think it's interesting enough to warrant a
separate option.

~Andrew
Re: [PATCH] x86: Add Kconfig option to use a 32bit TLB clock on debug
Posted by Alejandro Vallejo 3 weeks, 4 days ago
On Mon Jan 12, 2026 at 3:47 PM CET, Andrew Cooper wrote:
> On 12/01/2026 2:43 pm, Jan Beulich wrote:
>> On 12.01.2026 15:08, Alejandro Vallejo wrote:
>>> Debug builds stress the wrapping logic of the TLB clock by narrowing it
>>> down to 10 bits. This is inconvenient to test real time workloads on
>>> such builds.
>>>
>>> Add Kconfig option to be able to selectively use the non-stressed
>>> behaviour on debug.
>>>
>>> Signed-off-by: Alejandro Vallejo <alejandro.garciavallejo@amd.com>
>> Hmm, yes, why not. However, ...
>>
>>> --- a/xen/arch/x86/flushtlb.c
>>> +++ b/xen/arch/x86/flushtlb.c
>>> @@ -20,11 +20,7 @@
>>>  #include <asm/spec_ctrl.h>
>>>  
>>>  /* Debug builds: Wrap frequently to stress-test the wrap logic. */
>>> -#ifdef NDEBUG
>>> -#define WRAP_MASK (0xFFFFFFFFU)
>>> -#else
>>> -#define WRAP_MASK (0x000003FFU)
>>> -#endif
>>> +#define WRAP_MASK (IS_ENABLED(CONFIG_DEBUG_TLB_CLK) ? 0x3FFU : UINT32_MAX)
>> ... the comment then will want updating as well, I'd say. It doesn't go
>> terribly stale this way, but at least slightly. I'd suggest to minimally
>> drop "builds".

I left the comment because the rationale still holds. Dropping "builds" sounds
good to me.

>
> I'm suggest just dropping WRAP_MASK.
>
> We've done this locally in the XenServer patchqueue since 2011 or so due
> to the overhead, and I don't think it's interesting enough to warrant a
> separate option.
>
> ~Andrew

I don't mind much either way. I need it gone for my needs and I don't care much
how it happens.

Jan + Roger, do you have strong opinions on the matter?

Cheers,
Alejandro
Re: [PATCH] x86: Add Kconfig option to use a 32bit TLB clock on debug
Posted by Jan Beulich 3 weeks, 4 days ago
On 12.01.2026 16:28, Alejandro Vallejo wrote:
> On Mon Jan 12, 2026 at 3:47 PM CET, Andrew Cooper wrote:
>> On 12/01/2026 2:43 pm, Jan Beulich wrote:
>>> On 12.01.2026 15:08, Alejandro Vallejo wrote:
>>>> Debug builds stress the wrapping logic of the TLB clock by narrowing it
>>>> down to 10 bits. This is inconvenient to test real time workloads on
>>>> such builds.
>>>>
>>>> Add Kconfig option to be able to selectively use the non-stressed
>>>> behaviour on debug.
>>>>
>>>> Signed-off-by: Alejandro Vallejo <alejandro.garciavallejo@amd.com>
>>> Hmm, yes, why not. However, ...
>>>
>>>> --- a/xen/arch/x86/flushtlb.c
>>>> +++ b/xen/arch/x86/flushtlb.c
>>>> @@ -20,11 +20,7 @@
>>>>  #include <asm/spec_ctrl.h>
>>>>  
>>>>  /* Debug builds: Wrap frequently to stress-test the wrap logic. */
>>>> -#ifdef NDEBUG
>>>> -#define WRAP_MASK (0xFFFFFFFFU)
>>>> -#else
>>>> -#define WRAP_MASK (0x000003FFU)
>>>> -#endif
>>>> +#define WRAP_MASK (IS_ENABLED(CONFIG_DEBUG_TLB_CLK) ? 0x3FFU : UINT32_MAX)
>>> ... the comment then will want updating as well, I'd say. It doesn't go
>>> terribly stale this way, but at least slightly. I'd suggest to minimally
>>> drop "builds".
> 
> I left the comment because the rationale still holds. Dropping "builds" sounds
> good to me.
> 
>>
>> I'm suggest just dropping WRAP_MASK.
>>
>> We've done this locally in the XenServer patchqueue since 2011 or so due
>> to the overhead, and I don't think it's interesting enough to warrant a
>> separate option.
>>
>> ~Andrew
> 
> I don't mind much either way. I need it gone for my needs and I don't care much
> how it happens.
> 
> Jan + Roger, do you have strong opinions on the matter?

Dropping altogether is fine with me.

Jan