public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Petr Vorel <pvorel@suse.cz>
To: Li Wang <liwang@redhat.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH V3] lib: multiply the max_runtime if detect slow kconfigs
Date: Fri, 13 Dec 2024 23:40:41 +0100	[thread overview]
Message-ID: <20241213224041.GB1577592@pevik> (raw)
In-Reply-To: <20241212060448.204158-1-liwang@redhat.com>

Hi Li,

> The method adjusts the max_runtime for test cases by multiplying
> it by a factor (4x) if any slower kernel options are detected.
> Debug kernel configurations (such as CONFIG_KASAN, CONFIG_PROVE_LOCKING, etc.)
> are known to degrade performance, and this adjustment ensures
> that tests do not fail prematurely due to timeouts.

> As Cyril pointed out that a debug kernel will typically run
> slower by a factor of N, and while determining the exact value
> of N is challenging, so a reasonable upper bound is sufficient
> for practical purposes.

> Signed-off-by: Li Wang <liwang@redhat.com>
> ---
>  include/tst_kconfig.h | 13 +++++++++++++
>  lib/tst_kconfig.c     | 39 +++++++++++++++++++++++++++++++++++++++
>  lib/tst_test.c        |  3 +++
>  3 files changed, 55 insertions(+)

> diff --git a/include/tst_kconfig.h b/include/tst_kconfig.h
> index 23f807409..291c34b11 100644
> --- a/include/tst_kconfig.h
> +++ b/include/tst_kconfig.h
> @@ -98,4 +98,17 @@ struct tst_kcmdline_var {
>   */
>  void tst_kcmdline_parse(struct tst_kcmdline_var params[], size_t params_len);

LGTM, few comments below
Reviewed-by: Petr Vorel <pvorel@suse.cz>


> +/*
> + * Check if any performance-degrading kernel configs are enabled.

Could you please before merge change this to:

/**
 * tst_has_slow_kconfig() - Check if any performance-degrading kernel configs are enabled.

To comply kernel doc formatting?
tst_kconfig.h has not been added to sphinx doc yet, but it would be nice to add
new code with proper formatting.

Kind regards,
Petr

> + *
> + * This function iterates over the list of slow kernel configuration options
> + * (`tst_slow_kconfigs`) and checks if any of them are enabled in the running kernel.
> + * These options are known to degrade system performance when enabled.
> + *
> + * Return:
> + * - 1 if at least one slow kernel config is enabled.
> + * - 0 if none of the slow kernel configs are enabled.
> + */
> +int tst_has_slow_kconfig(void);
> +
>  #endif	/* TST_KCONFIG_H__ */
> diff --git a/lib/tst_kconfig.c b/lib/tst_kconfig.c
> index 6d6b1da18..92c27cb35 100644
> --- a/lib/tst_kconfig.c
> +++ b/lib/tst_kconfig.c
> @@ -631,3 +631,42 @@ void tst_kcmdline_parse(struct tst_kcmdline_var params[], size_t params_len)

>  	SAFE_FCLOSE(f);
>  }
> +
> +/*
> + * List of kernel config options that may degrade performance when enabled.
> + */
> +static struct tst_kconfig_var slow_kconfigs[] = {
> +	TST_KCONFIG_INIT("CONFIG_PROVE_LOCKING"),
> +	TST_KCONFIG_INIT("CONFIG_LOCKDEP"),
> +	TST_KCONFIG_INIT("CONFIG_DEBUG_SPINLOCK"),
> +	TST_KCONFIG_INIT("CONFIG_DEBUG_RT_MUTEXES"),
> +	TST_KCONFIG_INIT("CONFIG_DEBUG_MUTEXES"),
> +	TST_KCONFIG_INIT("CONFIG_DEBUG_PAGEALLOC"),
Does CONFIG_DEBUG_PAGEALLOC itself prolong the run? Isn't it that only when
debug_guardpage_minorder=... or debug_pagealloc=... is set?

https://www.kernel.org/doc/html/v5.2/admin-guide/kernel-parameters.html

I would need to run the test with these to see the difference.


> +	TST_KCONFIG_INIT("CONFIG_KASAN"),
> +	TST_KCONFIG_INIT("CONFIG_SLUB_RCU_DEBUG"),
> +	TST_KCONFIG_INIT("CONFIG_TRACE_IRQFLAGS"),
> +	TST_KCONFIG_INIT("CONFIG_LATENCYTOP"),
> +	TST_KCONFIG_INIT("CONFIG_DEBUG_NET"),
> +	TST_KCONFIG_INIT("CONFIG_EXT4_DEBUG"),
> +	TST_KCONFIG_INIT("CONFIG_QUOTA_DEBUG"),
> +	TST_KCONFIG_INIT("CONFIG_FAULT_INJECTION"),
> +	TST_KCONFIG_INIT("CONFIG_DEBUG_OBJECTS")
> +};
> +
> +int tst_has_slow_kconfig(void)
> +{
> +	unsigned int i;
> +
> +	tst_kconfig_read(slow_kconfigs, ARRAY_SIZE(slow_kconfigs));
> +
Maybe here TINFO message "checking for options which slow the execution?
Or print it (once) only if option detected? Because it's not obvious why we are
detecting it. Or after searching print what we did (4x prolonged runtime).

> +	for (i = 0; i < ARRAY_SIZE(slow_kconfigs); i++) {
> +		if (slow_kconfigs[i].choice == 'y') {
> +			tst_res(TINFO,
> +				"%s kernel option detected",
> +				slow_kconfigs[i].id);
> +			return 1;
> +		}
> +	}
> +
> +	return 0;
> +}
> diff --git a/lib/tst_test.c b/lib/tst_test.c
> index 8db554dea..f4e667240 100644
> --- a/lib/tst_test.c
> +++ b/lib/tst_test.c
> @@ -555,6 +555,9 @@ static int multiply_runtime(int max_runtime)

>  	parse_mul(&runtime_mul, "LTP_RUNTIME_MUL", 0.0099, 100);

> +	if (tst_has_slow_kconfig())
> +		max_runtime *= 4;
Maybe note here what we do? (TINFO)

Kind regards,
Petr
> +
>  	return max_runtime * runtime_mul;
>  }

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2024-12-13 22:41 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-12  6:04 [LTP] [PATCH V3] lib: multiply the max_runtime if detect slow kconfigs Li Wang
2024-12-13 22:40 ` Petr Vorel [this message]
2024-12-16  9:37   ` Li Wang
2024-12-16 12:28     ` Petr Vorel
2024-12-17  2:40       ` Li Wang
2024-12-16 13:00   ` Cyril Hrubis
2024-12-16 17:29     ` Petr Vorel
2024-12-17  3:46     ` Li Wang
2024-12-18  3:23       ` Li Wang
2024-12-16 12:51 ` Cyril Hrubis
2024-12-19 12:53 ` Petr Vorel
2024-12-19 13:07   ` Li Wang
2024-12-19 12:57 ` Martin Doucha
2024-12-19 13:07   ` Petr Vorel
2024-12-19 13:12     ` Li Wang
2024-12-19 13:28       ` Petr Vorel
2024-12-19 13:29         ` Cyril Hrubis
2024-12-20  3:59           ` Li Wang
2024-12-20  7:19             ` Li Wang
2024-12-19 13:10   ` Cyril Hrubis
2024-12-19 13:14     ` Li Wang
2024-12-19 13:19       ` Cyril Hrubis
2024-12-19 13:22         ` Li Wang
2024-12-19 13:25           ` Petr Vorel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241213224041.GB1577592@pevik \
    --to=pvorel@suse.cz \
    --cc=liwang@redhat.com \
    --cc=ltp@lists.linux.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox