21682d00a6
Unit tests fail always on builders with 56 cores. There is issue with limit of threads count in netmgr. Internal counter in hp.c does not reset on each unit tests teardown. With many cores, it can lead to assertion failures during the test.
85 lines
2.7 KiB
Diff
85 lines
2.7 KiB
Diff
From 0175b942efc2fb6a05a2c76d62a9fb9157141757 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
|
|
Date: Wed, 20 Jan 2021 01:01:52 +0100
|
|
Subject: [PATCH] Workaround errors in unit test on 56 CPU machine
|
|
|
|
hp.c should be just implementation detail, but unit tests use it
|
|
repeatedly without resetting tid_v_base. Reset the base counter, when
|
|
number of processors is configured. Configure it when creating network
|
|
manager.
|
|
|
|
Use id of current thread as a base. Should be usually 0, but must not be
|
|
below id of the main thread.
|
|
---
|
|
bin/named/main.c | 7 -------
|
|
lib/isc/hp.c | 1 +
|
|
lib/isc/netmgr/netmgr.c | 8 ++++++++
|
|
3 files changed, 9 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/bin/named/main.c b/bin/named/main.c
|
|
index 9836de9d7f..d1be43a632 100644
|
|
--- a/bin/named/main.c
|
|
+++ b/bin/named/main.c
|
|
@@ -24,7 +24,6 @@
|
|
#include <isc/dir.h>
|
|
#include <isc/file.h>
|
|
#include <isc/hash.h>
|
|
-#include <isc/hp.h>
|
|
#include <isc/httpd.h>
|
|
#include <isc/netmgr.h>
|
|
#include <isc/os.h>
|
|
@@ -909,12 +908,6 @@ create_managers(void) {
|
|
"using %u UDP listener%s per interface", named_g_udpdisp,
|
|
named_g_udpdisp == 1 ? "" : "s");
|
|
|
|
- /*
|
|
- * We have ncpus network threads, ncpus worker threads, ncpus
|
|
- * old network threads - make it 4x just to be safe. The memory
|
|
- * impact is negligible.
|
|
- */
|
|
- isc_hp_init(4 * named_g_cpus);
|
|
named_g_nm = isc_nm_start(named_g_mctx, named_g_cpus);
|
|
if (named_g_nm == NULL) {
|
|
UNEXPECTED_ERROR(__FILE__, __LINE__, "isc_nm_start() failed");
|
|
diff --git a/lib/isc/hp.c b/lib/isc/hp.c
|
|
index 3ea13bbe24..e4a98afc82 100644
|
|
--- a/lib/isc/hp.c
|
|
+++ b/lib/isc/hp.c
|
|
@@ -95,6 +95,7 @@ void
|
|
isc_hp_init(int max_threads) {
|
|
isc__hp_max_threads = max_threads;
|
|
isc__hp_max_retired = max_threads * HP_MAX_HPS;
|
|
+ atomic_store_release(&tid_v_base, tid());
|
|
}
|
|
|
|
isc_hp_t *
|
|
diff --git a/lib/isc/netmgr/netmgr.c b/lib/isc/netmgr/netmgr.c
|
|
index 46f0758620..e3469f4c3a 100644
|
|
--- a/lib/isc/netmgr/netmgr.c
|
|
+++ b/lib/isc/netmgr/netmgr.c
|
|
@@ -17,6 +17,7 @@
|
|
#include <isc/buffer.h>
|
|
#include <isc/condition.h>
|
|
#include <isc/errno.h>
|
|
+#include <isc/hp.h>
|
|
#include <isc/magic.h>
|
|
#include <isc/mem.h>
|
|
#include <isc/netmgr.h>
|
|
@@ -238,6 +239,13 @@ isc_nm_start(isc_mem_t *mctx, uint32_t workers) {
|
|
atomic_init(&mgr->keepalive, 30000);
|
|
atomic_init(&mgr->advertised, 30000);
|
|
|
|
+ /*
|
|
+ * We have ncpus network threads, ncpus worker threads, ncpus
|
|
+ * old network threads - make it 4x just to be safe. The memory
|
|
+ * impact is negligible.
|
|
+ */
|
|
+ isc_hp_init(4 * workers);
|
|
+
|
|
isc_mutex_init(&mgr->reqlock);
|
|
isc_mempool_create(mgr->mctx, sizeof(isc__nm_uvreq_t), &mgr->reqpool);
|
|
isc_mempool_setname(mgr->reqpool, "nm_reqpool");
|
|
--
|
|
2.26.2
|
|
|