Fix `test_retained` on boxes with a lot of CPUs
We are trying to create `ncpus * 2` threads for this test and place them into `VARIABLE_ARRAY`, but `VARIABLE_ARRAY` can not be more than `VARIABLE_ARRAY_SIZE_MAX` bytes. When there are a lot of threads on the box test always fails. ``` $ nproc 176 $ make -j`nproc` tests_unit && ./test/unit/retained <jemalloc>: ../test/unit/retained.c:123: Failed assertion: "sizeof(thd_t) * (nthreads) <= VARIABLE_ARRAY_SIZE_MAX" Aborted (core dumped) ``` There is no need for high concurrency for this test as we are only checking stats there and it's behaviour is quite stable regarding number of allocating threads. Limited number of threads to 16 to save compute resources (on CI for example) and reduce tests running time. Before the change (`nproc` is 80 on this box). ``` $ make -j`nproc` tests_unit && time ./test/unit/retained <...> real 0m0.372s user 0m14.236s sys 0m12.338s ``` After the change (same box). ``` $ make -j`nproc` tests_unit && time ./test/unit/retained <...> real 0m0.018s user 0m0.108s sys 0m0.068s ```
This commit is contained in:
parent
6092c980a6
commit
46690c9ec0
|
@ -110,8 +110,15 @@ TEST_BEGIN(test_retained) {
|
|||
atomic_store_u(&epoch, 0, ATOMIC_RELAXED);
|
||||
|
||||
unsigned nthreads = ncpus * 2;
|
||||
if (LG_SIZEOF_PTR < 3 && nthreads > 16) {
|
||||
nthreads = 16; /* 32-bit platform could run out of vaddr. */
|
||||
if (nthreads > 16) {
|
||||
/*
|
||||
* Limit number of threads we are creating for following
|
||||
* reasons.
|
||||
* 1. On 32-bit platforms could run out of vaddr.
|
||||
* 2. On boxes with a lot of CPUs we might have not enough
|
||||
* memory to fit thd_t into VARIABLE_ARRAY.
|
||||
*/
|
||||
nthreads = 16;
|
||||
}
|
||||
VARIABLE_ARRAY(thd_t, threads, nthreads);
|
||||
for (unsigned i = 0; i < nthreads; i++) {
|
||||
|
|
Loading…
Reference in New Issue