* [LTP] [PATCH] keyctl02: Add delay between main loop iterations for RT kernels
@ 2023-11-03 17:23 Martin Doucha
2023-11-03 19:03 ` Petr Vorel
0 siblings, 1 reply; 2+ messages in thread
From: Martin Doucha @ 2023-11-03 17:23 UTC (permalink / raw)
To: ltp
Realtime kernels have deferred thread cleanup which means that
exited and joined threads can still pile up and trigger cgroup
thread limits. Add 100us delay on RT kernels to limit the maximum
number of stale threads.
Signed-off-by: Martin Doucha <mdoucha@suse.cz>
---
The extra delay adds ~3 seconds to total test runtime. Tested on SLERT-12SP5,
SLERT-15SP4 and SLES-12SP5.
testcases/kernel/syscalls/keyctl/keyctl02.c | 24 +++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/testcases/kernel/syscalls/keyctl/keyctl02.c b/testcases/kernel/syscalls/keyctl/keyctl02.c
index 35cc2838d..2a81ce9e6 100644
--- a/testcases/kernel/syscalls/keyctl/keyctl02.c
+++ b/testcases/kernel/syscalls/keyctl/keyctl02.c
@@ -29,13 +29,17 @@
#include "tst_safe_pthread.h"
#include "tst_test.h"
+#include "tst_kconfig.h"
#include "lapi/keyctl.h"
#define LOOPS 20000
#define MAX_WAIT_FOR_GC_MS 5000
#define PATH_KEY_COUNT_QUOTA "/proc/sys/kernel/keys/root_maxkeys"
+#define KCONFIG_INIT(confname) { .id = confname, .id_len = strlen(confname) }
+
static int orig_maxkeys;
+static int realtime_kernel;
static void *do_read(void *arg)
{
@@ -86,6 +90,15 @@ static void do_test(void)
tst_res(TINFO, "Runtime exhausted, exiting after %d loops", i);
break;
}
+
+ /*
+ * Realtime kernel has deferred post-join thread cleanup which
+ * may result in exhaustion of cgroup thread limit. Add delay
+ * to limit the maximum number of stale threads to 4000
+ * even with CONFIG_HZ=100.
+ */
+ if (realtime_kernel)
+ usleep(100);
}
/*
@@ -126,8 +139,19 @@ static void do_test(void)
static void setup(void)
{
+ int i;
+ struct tst_kconfig_var rt_kconfigs[] = {
+ KCONFIG_INIT("CONFIG_PREEMPT_RT"),
+ KCONFIG_INIT("CONFIG_PREEMPT_RT_FULL")
+ };
+
SAFE_FILE_SCANF(PATH_KEY_COUNT_QUOTA, "%d", &orig_maxkeys);
SAFE_FILE_PRINTF(PATH_KEY_COUNT_QUOTA, "%d", orig_maxkeys + LOOPS + 1);
+
+ tst_kconfig_read(rt_kconfigs, ARRAY_SIZE(rt_kconfigs));
+
+ for (i = 0; i < ARRAY_SIZE(rt_kconfigs); i++)
+ realtime_kernel |= rt_kconfigs[i].choice == 'y';
}
static void cleanup(void)
--
2.42.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [LTP] [PATCH] keyctl02: Add delay between main loop iterations for RT kernels
2023-11-03 17:23 [LTP] [PATCH] keyctl02: Add delay between main loop iterations for RT kernels Martin Doucha
@ 2023-11-03 19:03 ` Petr Vorel
0 siblings, 0 replies; 2+ messages in thread
From: Petr Vorel @ 2023-11-03 19:03 UTC (permalink / raw)
To: Martin Doucha; +Cc: ltp
Hi Martin,
Reviewed-by: Petr Vorel <pvorel@suse.cz>
...
> +++ b/testcases/kernel/syscalls/keyctl/keyctl02.c
> @@ -29,13 +29,17 @@
> #include "tst_safe_pthread.h"
> #include "tst_test.h"
> +#include "tst_kconfig.h"
> #include "lapi/keyctl.h"
> #define LOOPS 20000
> #define MAX_WAIT_FOR_GC_MS 5000
> #define PATH_KEY_COUNT_QUOTA "/proc/sys/kernel/keys/root_maxkeys"
> +#define KCONFIG_INIT(confname) { .id = confname, .id_len = strlen(confname) }
BTW this could be added (as separate effort) somewhere in the library
(include/tst_common.h) and reused in other tests (well, there are only 3 tests).
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-11-03 19:04 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-03 17:23 [LTP] [PATCH] keyctl02: Add delay between main loop iterations for RT kernels Martin Doucha
2023-11-03 19:03 ` Petr Vorel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox