jemalloc 3.5.0 regressions on i586
jasone at canonware.com
Tue Jan 28 18:13:11 PST 2014
On Jan 28, 2014, at 12:57 AM, İsmail Dönmez <ismail at donmez.ws> wrote:
> With jemalloc 3.5.0 we have a testsuite regression on openSUSE 13.1/i586 with gcc 4.8.1,
> configured with ./configure --enable-cc-silence
> make check fails:
> test_stats_chunks:test/unit/stats.c:41: Failed assertion: (jet_mallctl("stats.chunks.total", &total, &sz, ((void *)0), 0)) == (expected) --> 22 != 0: test_stats_chunks
> test_stats_arenas_bins:test/unit/stats.c:291: Failed assertion: (jet_mallctl("stats.arenas.0.bins.0.curruns", &curruns, &sz, ((void *)0), 0)) == (expected) --> 22 != 0: test_stats_arenas_bins
> test_stats_arenas_lruns:test/unit/stats.c:343: Failed assertion: (jet_mallctl("stats.arenas.0.lruns.0.curruns", &curruns, &sz, ((void *)0), 0)) == (expected) --> 22 != 0: test_stats_arenas_lruns
The stats failures are all due to mallctl argument size mismatches, fixed here:
> test_oom_errors:test/integration/aligned_alloc.c:59: Failed assertion: (p != ((void *)0) || je_get_errno() != 12) == (false) --> true != false: test_oom_errors
> test_alignment_errors:test/integration/mallocx.c:53: Failed assertion: (p) == (NULL) --> 0x40000000 != 0x0: test_alignment_errors
> test_oom_errors:test/integration/posix_memalign.c:53: Failed assertion: (posix_memalign(&p, alignment, size)) != (0) --> 0 == 0: test_oom_errors
> 64bit builds are fine.
Wow, the machine is actually satisfying an mmap() request of size 0xd0000000 (3.5 GiB) in order for this to be happening. The tests are flawed, and they "pass" on 64-bit systems because of the virtual memory hole in the middle of the 64-bit address space. Fixed here:
In the case of mallocx(), this is technically undefined territory, so just removed that test, but for aligned_alloc() and posix_memalign(), I increased the request size enough to guarantee failure.
In summary, these failures are all due to test bugs, rather than bugs in the library itself.
More information about the jemalloc-discuss