diff --git a/include/tst_kconfig.h b/include/tst_kconfig.h index 23f807409fc..5377c00f399 100644 --- a/include/tst_kconfig.h +++ b/include/tst_kconfig.h @@ -98,4 +98,16 @@ struct tst_kcmdline_var { */ void tst_kcmdline_parse(struct tst_kcmdline_var params[], size_t params_len); +/* + * tst_has_slow_kconfig() - Check if any performance-degrading kernel configs are enabled. + * + * 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. + * + * 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 6d6b1da1842..d96a8f5439e 100644 --- a/lib/tst_kconfig.c +++ b/lib/tst_kconfig.c @@ -631,3 +631,41 @@ 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_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)); + + for (i = 0; i < ARRAY_SIZE(slow_kconfigs); i++) { + if (slow_kconfigs[i].choice == 'y') { + tst_res(TINFO, + "%s kernel option detected which might slow the execution", + slow_kconfigs[i].id); + return 1; + } + } + + return 0; +} diff --git a/lib/tst_test.c b/lib/tst_test.c index 19d59b6d6ea..205fc8326e0 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; + return max_runtime * runtime_mul; }