From 0175b942efc2fb6a05a2c76d62a9fb9157141757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= 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 #include #include -#include #include #include #include @@ -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 #include #include +#include #include #include #include @@ -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