1de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#include "test/jemalloc_test.h" 2de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 3de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_mallctl_errors) 4de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 5de73296d6b56abe70b08654342e136c2612d1dbdJason Evans uint64_t epoch; 6de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz; 7de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 8de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("no_such_name", NULL, NULL, NULL, 0), ENOENT, 9de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "mallctl() should return ENOENT for non-existent names"); 10de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 11de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("version", NULL, NULL, "0.0.0", strlen("0.0.0")), 12de73296d6b56abe70b08654342e136c2612d1dbdJason Evans EPERM, "mallctl() should return EPERM on attempt to write " 13de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "read-only value"); 14de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 15de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)-1), 16de73296d6b56abe70b08654342e136c2612d1dbdJason Evans EINVAL, "mallctl() should return EINVAL for input size mismatch"); 17de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)+1), 18de73296d6b56abe70b08654342e136c2612d1dbdJason Evans EINVAL, "mallctl() should return EINVAL for input size mismatch"); 19de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 20de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sz = sizeof(epoch)-1; 21de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("epoch", &epoch, &sz, NULL, 0), EINVAL, 22de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "mallctl() should return EINVAL for output size mismatch"); 23de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sz = sizeof(epoch)+1; 24de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("epoch", &epoch, &sz, NULL, 0), EINVAL, 25de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "mallctl() should return EINVAL for output size mismatch"); 26de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 27de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 28de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 29de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_mallctlnametomib_errors) 30de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 31de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t mib[1]; 32de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t miblen; 33de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 34de73296d6b56abe70b08654342e136c2612d1dbdJason Evans miblen = sizeof(mib)/sizeof(size_t); 35de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlnametomib("no_such_name", mib, &miblen), ENOENT, 36de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "mallctlnametomib() should return ENOENT for non-existent names"); 37de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 38de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 39de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 40de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_mallctlbymib_errors) 41de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 42de73296d6b56abe70b08654342e136c2612d1dbdJason Evans uint64_t epoch; 43de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz; 44de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t mib[1]; 45de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t miblen; 46de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 47de73296d6b56abe70b08654342e136c2612d1dbdJason Evans miblen = sizeof(mib)/sizeof(size_t); 48de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlnametomib("version", mib, &miblen), 0, 49de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctlnametomib() failure"); 50de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 51de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, "0.0.0", 52de73296d6b56abe70b08654342e136c2612d1dbdJason Evans strlen("0.0.0")), EPERM, "mallctl() should return EPERM on " 53de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "attempt to write read-only value"); 54de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 55de73296d6b56abe70b08654342e136c2612d1dbdJason Evans miblen = sizeof(mib)/sizeof(size_t); 56de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlnametomib("epoch", mib, &miblen), 0, 57de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctlnametomib() failure"); 58de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 59de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, &epoch, 60de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sizeof(epoch)-1), EINVAL, 61de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "mallctlbymib() should return EINVAL for input size mismatch"); 62de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, &epoch, 63de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sizeof(epoch)+1), EINVAL, 64de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "mallctlbymib() should return EINVAL for input size mismatch"); 65de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 66de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sz = sizeof(epoch)-1; 67de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlbymib(mib, miblen, &epoch, &sz, NULL, 0), EINVAL, 68de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "mallctlbymib() should return EINVAL for output size mismatch"); 69de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sz = sizeof(epoch)+1; 70de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlbymib(mib, miblen, &epoch, &sz, NULL, 0), EINVAL, 71de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "mallctlbymib() should return EINVAL for output size mismatch"); 72de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 73de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 74de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 75de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_mallctl_read_write) 76de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 77de73296d6b56abe70b08654342e136c2612d1dbdJason Evans uint64_t old_epoch, new_epoch; 78de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(old_epoch); 79de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 80de73296d6b56abe70b08654342e136c2612d1dbdJason Evans /* Blind. */ 81de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("epoch", NULL, NULL, NULL, 0), 0, 82de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() failure"); 83de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_zu_eq(sz, sizeof(old_epoch), "Unexpected output size"); 84de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 85de73296d6b56abe70b08654342e136c2612d1dbdJason Evans /* Read. */ 86de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("epoch", &old_epoch, &sz, NULL, 0), 0, 87de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() failure"); 88de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_zu_eq(sz, sizeof(old_epoch), "Unexpected output size"); 89de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 90de73296d6b56abe70b08654342e136c2612d1dbdJason Evans /* Write. */ 91de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("epoch", NULL, NULL, &new_epoch, sizeof(new_epoch)), 92de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 0, "Unexpected mallctl() failure"); 93de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_zu_eq(sz, sizeof(old_epoch), "Unexpected output size"); 94de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 95de73296d6b56abe70b08654342e136c2612d1dbdJason Evans /* Read+write. */ 96de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("epoch", &old_epoch, &sz, &new_epoch, 97de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sizeof(new_epoch)), 0, "Unexpected mallctl() failure"); 98de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_zu_eq(sz, sizeof(old_epoch), "Unexpected output size"); 99de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 100de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 101de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 102de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_mallctlnametomib_short_mib) 103de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 104de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t mib[4]; 105de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t miblen; 106de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 107de73296d6b56abe70b08654342e136c2612d1dbdJason Evans miblen = 3; 108de73296d6b56abe70b08654342e136c2612d1dbdJason Evans mib[3] = 42; 109de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlnametomib("arenas.bin.0.nregs", mib, &miblen), 0, 110de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctlnametomib() failure"); 111de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_zu_eq(miblen, 3, "Unexpected mib output length"); 112de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_zu_eq(mib[3], 42, 113de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "mallctlnametomib() wrote past the end of the input mib"); 114de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 115de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 116de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 117de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_mallctl_config) 118de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 119de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 120e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris#define TEST_MALLCTL_CONFIG(config, t) do { \ 121e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris t oldval; \ 122de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(oldval); \ 123de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("config."#config, &oldval, &sz, NULL, 0), \ 124de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 0, "Unexpected mallctl() failure"); \ 125de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_b_eq(oldval, config_##config, "Incorrect config value"); \ 126de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_zu_eq(sz, sizeof(oldval), "Unexpected output size"); \ 127de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} while (0) 128de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 129e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(cache_oblivious, bool); 130e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(debug, bool); 131e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(fill, bool); 132e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(lazy_lock, bool); 133e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(malloc_conf, const char *); 134e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(munmap, bool); 135e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(prof, bool); 136e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(prof_libgcc, bool); 137e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(prof_libunwind, bool); 138e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(stats, bool); 139e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(tcache, bool); 140e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(tls, bool); 141e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(utrace, bool); 142e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(valgrind, bool); 143e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_CONFIG(xmalloc, bool); 144de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 145de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#undef TEST_MALLCTL_CONFIG 146de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 147de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 148de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 149de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_mallctl_opt) 150de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 151de73296d6b56abe70b08654342e136c2612d1dbdJason Evans bool config_always = true; 152de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 153de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#define TEST_MALLCTL_OPT(t, opt, config) do { \ 154de73296d6b56abe70b08654342e136c2612d1dbdJason Evans t oldval; \ 155de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(oldval); \ 156de73296d6b56abe70b08654342e136c2612d1dbdJason Evans int expected = config_##config ? 0 : ENOENT; \ 157de73296d6b56abe70b08654342e136c2612d1dbdJason Evans int result = mallctl("opt."#opt, &oldval, &sz, NULL, 0); \ 158de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(result, expected, \ 159de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() result for opt."#opt); \ 160de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_zu_eq(sz, sizeof(oldval), "Unexpected output size"); \ 161de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} while (0) 162de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 163de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, abort, always); 164de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(size_t, lg_chunk, always); 165de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(const char *, dss, always); 166e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_OPT(unsigned, narenas, always); 167e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_OPT(const char *, purge, always); 168de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(ssize_t, lg_dirty_mult, always); 169e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_MALLCTL_OPT(ssize_t, decay_time, always); 170de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, stats_print, always); 1712c5cb613dfbdf58f88152321b63e60c58cd23972Guilherme Goncalves TEST_MALLCTL_OPT(const char *, junk, fill); 172de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(size_t, quarantine, fill); 173de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, redzone, fill); 174de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, zero, fill); 175de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, utrace, utrace); 176de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, xmalloc, xmalloc); 177de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, tcache, tcache); 178de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(size_t, lg_tcache_max, tcache); 179de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, prof, prof); 180de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(const char *, prof_prefix, prof); 181de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, prof_active, prof); 182de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(ssize_t, lg_prof_sample, prof); 183de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, prof_accum, prof); 184de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(ssize_t, lg_prof_interval, prof); 185de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, prof_gdump, prof); 186de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, prof_final, prof); 187de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_MALLCTL_OPT(bool, prof_leak, prof); 188de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 189de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#undef TEST_MALLCTL_OPT 190de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 191de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 192de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 193de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_manpage_example) 194de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 195de73296d6b56abe70b08654342e136c2612d1dbdJason Evans unsigned nbins, i; 196de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t mib[4]; 197de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t len, miblen; 198de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 199de73296d6b56abe70b08654342e136c2612d1dbdJason Evans len = sizeof(nbins); 200de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arenas.nbins", &nbins, &len, NULL, 0), 0, 201de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() failure"); 202de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 203de73296d6b56abe70b08654342e136c2612d1dbdJason Evans miblen = 4; 204de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlnametomib("arenas.bin.0.size", mib, &miblen), 0, 205de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctlnametomib() failure"); 206de73296d6b56abe70b08654342e136c2612d1dbdJason Evans for (i = 0; i < nbins; i++) { 207de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t bin_size; 208de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 209de73296d6b56abe70b08654342e136c2612d1dbdJason Evans mib[2] = i; 210de73296d6b56abe70b08654342e136c2612d1dbdJason Evans len = sizeof(bin_size); 211de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlbymib(mib, miblen, &bin_size, &len, NULL, 0), 212de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 0, "Unexpected mallctlbymib() failure"); 213de73296d6b56abe70b08654342e136c2612d1dbdJason Evans /* Do something with bin_size... */ 214de73296d6b56abe70b08654342e136c2612d1dbdJason Evans } 215de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 216de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 217de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 2181cb181ed632e7573fb4eab194e4d216867222d27Jason EvansTEST_BEGIN(test_tcache_none) 2191cb181ed632e7573fb4eab194e4d216867222d27Jason Evans{ 2201cb181ed632e7573fb4eab194e4d216867222d27Jason Evans void *p0, *q, *p1; 2211cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2221cb181ed632e7573fb4eab194e4d216867222d27Jason Evans test_skip_if(!config_tcache); 2231cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2241cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Allocate p and q. */ 2251cb181ed632e7573fb4eab194e4d216867222d27Jason Evans p0 = mallocx(42, 0); 2261cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_ptr_not_null(p0, "Unexpected mallocx() failure"); 2271cb181ed632e7573fb4eab194e4d216867222d27Jason Evans q = mallocx(42, 0); 2281cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_ptr_not_null(q, "Unexpected mallocx() failure"); 2291cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2301cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Deallocate p and q, but bypass the tcache for q. */ 2311cb181ed632e7573fb4eab194e4d216867222d27Jason Evans dallocx(p0, 0); 2321cb181ed632e7573fb4eab194e4d216867222d27Jason Evans dallocx(q, MALLOCX_TCACHE_NONE); 2331cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2341cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Make sure that tcache-based allocation returns p, not q. */ 2351cb181ed632e7573fb4eab194e4d216867222d27Jason Evans p1 = mallocx(42, 0); 2361cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_ptr_not_null(p1, "Unexpected mallocx() failure"); 2371cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_ptr_eq(p0, p1, "Expected tcache to allocate cached region"); 2381cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2391cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Clean up. */ 2401cb181ed632e7573fb4eab194e4d216867222d27Jason Evans dallocx(p1, MALLOCX_TCACHE_NONE); 2411cb181ed632e7573fb4eab194e4d216867222d27Jason Evans} 2421cb181ed632e7573fb4eab194e4d216867222d27Jason EvansTEST_END 2431cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2441cb181ed632e7573fb4eab194e4d216867222d27Jason EvansTEST_BEGIN(test_tcache) 2451cb181ed632e7573fb4eab194e4d216867222d27Jason Evans{ 2461cb181ed632e7573fb4eab194e4d216867222d27Jason Evans#define NTCACHES 10 2471cb181ed632e7573fb4eab194e4d216867222d27Jason Evans unsigned tis[NTCACHES]; 2481cb181ed632e7573fb4eab194e4d216867222d27Jason Evans void *ps[NTCACHES]; 2491cb181ed632e7573fb4eab194e4d216867222d27Jason Evans void *qs[NTCACHES]; 2501cb181ed632e7573fb4eab194e4d216867222d27Jason Evans unsigned i; 2511cb181ed632e7573fb4eab194e4d216867222d27Jason Evans size_t sz, psz, qsz; 2521cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2531cb181ed632e7573fb4eab194e4d216867222d27Jason Evans test_skip_if(!config_tcache); 2541cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2551cb181ed632e7573fb4eab194e4d216867222d27Jason Evans psz = 42; 2561cb181ed632e7573fb4eab194e4d216867222d27Jason Evans qsz = nallocx(psz, 0) + 1; 2571cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2581cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Create tcaches. */ 2591cb181ed632e7573fb4eab194e4d216867222d27Jason Evans for (i = 0; i < NTCACHES; i++) { 2601cb181ed632e7573fb4eab194e4d216867222d27Jason Evans sz = sizeof(unsigned); 2611cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_d_eq(mallctl("tcache.create", &tis[i], &sz, NULL, 0), 0, 2621cb181ed632e7573fb4eab194e4d216867222d27Jason Evans "Unexpected mallctl() failure, i=%u", i); 2631cb181ed632e7573fb4eab194e4d216867222d27Jason Evans } 2641cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2659e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans /* Exercise tcache ID recycling. */ 2669e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans for (i = 0; i < NTCACHES; i++) { 2679e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans assert_d_eq(mallctl("tcache.destroy", NULL, NULL, &tis[i], 2689e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans sizeof(unsigned)), 0, "Unexpected mallctl() failure, i=%u", 2699e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans i); 2709e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans } 2719e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans for (i = 0; i < NTCACHES; i++) { 2729e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans sz = sizeof(unsigned); 2739e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans assert_d_eq(mallctl("tcache.create", &tis[i], &sz, NULL, 0), 0, 2749e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans "Unexpected mallctl() failure, i=%u", i); 2759e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans } 2769e561e8d3f3c625b98b57df069eeac0fa2f522fbJason Evans 2771cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Flush empty tcaches. */ 2781cb181ed632e7573fb4eab194e4d216867222d27Jason Evans for (i = 0; i < NTCACHES; i++) { 2791cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_d_eq(mallctl("tcache.flush", NULL, NULL, &tis[i], 2801cb181ed632e7573fb4eab194e4d216867222d27Jason Evans sizeof(unsigned)), 0, "Unexpected mallctl() failure, i=%u", 2811cb181ed632e7573fb4eab194e4d216867222d27Jason Evans i); 2821cb181ed632e7573fb4eab194e4d216867222d27Jason Evans } 2831cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2841cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Cache some allocations. */ 2851cb181ed632e7573fb4eab194e4d216867222d27Jason Evans for (i = 0; i < NTCACHES; i++) { 2861cb181ed632e7573fb4eab194e4d216867222d27Jason Evans ps[i] = mallocx(psz, MALLOCX_TCACHE(tis[i])); 2871cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_ptr_not_null(ps[i], "Unexpected mallocx() failure, i=%u", 2881cb181ed632e7573fb4eab194e4d216867222d27Jason Evans i); 2891cb181ed632e7573fb4eab194e4d216867222d27Jason Evans dallocx(ps[i], MALLOCX_TCACHE(tis[i])); 2901cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2911cb181ed632e7573fb4eab194e4d216867222d27Jason Evans qs[i] = mallocx(qsz, MALLOCX_TCACHE(tis[i])); 2921cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_ptr_not_null(qs[i], "Unexpected mallocx() failure, i=%u", 2931cb181ed632e7573fb4eab194e4d216867222d27Jason Evans i); 2941cb181ed632e7573fb4eab194e4d216867222d27Jason Evans dallocx(qs[i], MALLOCX_TCACHE(tis[i])); 2951cb181ed632e7573fb4eab194e4d216867222d27Jason Evans } 2961cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 2971cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Verify that tcaches allocate cached regions. */ 2981cb181ed632e7573fb4eab194e4d216867222d27Jason Evans for (i = 0; i < NTCACHES; i++) { 2991cb181ed632e7573fb4eab194e4d216867222d27Jason Evans void *p0 = ps[i]; 3001cb181ed632e7573fb4eab194e4d216867222d27Jason Evans ps[i] = mallocx(psz, MALLOCX_TCACHE(tis[i])); 3011cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_ptr_not_null(ps[i], "Unexpected mallocx() failure, i=%u", 3021cb181ed632e7573fb4eab194e4d216867222d27Jason Evans i); 3031cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_ptr_eq(ps[i], p0, 3041cb181ed632e7573fb4eab194e4d216867222d27Jason Evans "Expected mallocx() to allocate cached region, i=%u", i); 3051cb181ed632e7573fb4eab194e4d216867222d27Jason Evans } 3061cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 3071cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Verify that reallocation uses cached regions. */ 3081cb181ed632e7573fb4eab194e4d216867222d27Jason Evans for (i = 0; i < NTCACHES; i++) { 3091cb181ed632e7573fb4eab194e4d216867222d27Jason Evans void *q0 = qs[i]; 3101cb181ed632e7573fb4eab194e4d216867222d27Jason Evans qs[i] = rallocx(ps[i], qsz, MALLOCX_TCACHE(tis[i])); 3111cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_ptr_not_null(qs[i], "Unexpected rallocx() failure, i=%u", 3121cb181ed632e7573fb4eab194e4d216867222d27Jason Evans i); 3131cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_ptr_eq(qs[i], q0, 3141cb181ed632e7573fb4eab194e4d216867222d27Jason Evans "Expected rallocx() to allocate cached region, i=%u", i); 3151cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Avoid undefined behavior in case of test failure. */ 3161cb181ed632e7573fb4eab194e4d216867222d27Jason Evans if (qs[i] == NULL) 3171cb181ed632e7573fb4eab194e4d216867222d27Jason Evans qs[i] = ps[i]; 3181cb181ed632e7573fb4eab194e4d216867222d27Jason Evans } 3191cb181ed632e7573fb4eab194e4d216867222d27Jason Evans for (i = 0; i < NTCACHES; i++) 3201cb181ed632e7573fb4eab194e4d216867222d27Jason Evans dallocx(qs[i], MALLOCX_TCACHE(tis[i])); 3211cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 3221cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Flush some non-empty tcaches. */ 3231cb181ed632e7573fb4eab194e4d216867222d27Jason Evans for (i = 0; i < NTCACHES/2; i++) { 3241cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_d_eq(mallctl("tcache.flush", NULL, NULL, &tis[i], 3251cb181ed632e7573fb4eab194e4d216867222d27Jason Evans sizeof(unsigned)), 0, "Unexpected mallctl() failure, i=%u", 3261cb181ed632e7573fb4eab194e4d216867222d27Jason Evans i); 3271cb181ed632e7573fb4eab194e4d216867222d27Jason Evans } 3281cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 3291cb181ed632e7573fb4eab194e4d216867222d27Jason Evans /* Destroy tcaches. */ 3301cb181ed632e7573fb4eab194e4d216867222d27Jason Evans for (i = 0; i < NTCACHES; i++) { 3311cb181ed632e7573fb4eab194e4d216867222d27Jason Evans assert_d_eq(mallctl("tcache.destroy", NULL, NULL, &tis[i], 3321cb181ed632e7573fb4eab194e4d216867222d27Jason Evans sizeof(unsigned)), 0, "Unexpected mallctl() failure, i=%u", 3331cb181ed632e7573fb4eab194e4d216867222d27Jason Evans i); 3341cb181ed632e7573fb4eab194e4d216867222d27Jason Evans } 3351cb181ed632e7573fb4eab194e4d216867222d27Jason Evans} 3361cb181ed632e7573fb4eab194e4d216867222d27Jason EvansTEST_END 3371cb181ed632e7573fb4eab194e4d216867222d27Jason Evans 338de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_thread_arena) 339de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 340de73296d6b56abe70b08654342e136c2612d1dbdJason Evans unsigned arena_old, arena_new, narenas; 341de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(unsigned); 342de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 343de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arenas.narenas", &narenas, &sz, NULL, 0), 0, 344de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() failure"); 345de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_u_eq(narenas, opt_narenas, "Number of arenas incorrect"); 346de73296d6b56abe70b08654342e136c2612d1dbdJason Evans arena_new = narenas - 1; 347de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("thread.arena", &arena_old, &sz, &arena_new, 348de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sizeof(unsigned)), 0, "Unexpected mallctl() failure"); 349de73296d6b56abe70b08654342e136c2612d1dbdJason Evans arena_new = 0; 350de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("thread.arena", &arena_old, &sz, &arena_new, 351de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sizeof(unsigned)), 0, "Unexpected mallctl() failure"); 352de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 353de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 354de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 3558d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason EvansTEST_BEGIN(test_arena_i_lg_dirty_mult) 3568d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans{ 3578d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans ssize_t lg_dirty_mult, orig_lg_dirty_mult, prev_lg_dirty_mult; 3588d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans size_t sz = sizeof(ssize_t); 3598d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 360e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris test_skip_if(opt_purge != purge_mode_ratio); 361e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 3628d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans assert_d_eq(mallctl("arena.0.lg_dirty_mult", &orig_lg_dirty_mult, &sz, 3638d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans NULL, 0), 0, "Unexpected mallctl() failure"); 3648d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 3658d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans lg_dirty_mult = -2; 3668d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans assert_d_eq(mallctl("arena.0.lg_dirty_mult", NULL, NULL, 3678d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans &lg_dirty_mult, sizeof(ssize_t)), EFAULT, 3688d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans "Unexpected mallctl() success"); 3698d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 3708d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans lg_dirty_mult = (sizeof(size_t) << 3); 3718d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans assert_d_eq(mallctl("arena.0.lg_dirty_mult", NULL, NULL, 3728d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans &lg_dirty_mult, sizeof(ssize_t)), EFAULT, 3738d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans "Unexpected mallctl() success"); 3748d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 3758d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans for (prev_lg_dirty_mult = orig_lg_dirty_mult, lg_dirty_mult = -1; 376bd16ea49c3e36706a52ef9c8f560813c167fa085Jason Evans lg_dirty_mult < (ssize_t)(sizeof(size_t) << 3); prev_lg_dirty_mult 377bd16ea49c3e36706a52ef9c8f560813c167fa085Jason Evans = lg_dirty_mult, lg_dirty_mult++) { 3788d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans ssize_t old_lg_dirty_mult; 3798d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 3808d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans assert_d_eq(mallctl("arena.0.lg_dirty_mult", &old_lg_dirty_mult, 3818d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans &sz, &lg_dirty_mult, sizeof(ssize_t)), 0, 3828d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans "Unexpected mallctl() failure"); 3838d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans assert_zd_eq(old_lg_dirty_mult, prev_lg_dirty_mult, 3848d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans "Unexpected old arena.0.lg_dirty_mult"); 3858d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans } 3868d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans} 3878d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason EvansTEST_END 3888d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 389e42940346e47de63bfc47470c86c3c132ec2db8cChristopher FerrisTEST_BEGIN(test_arena_i_decay_time) 390e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris{ 391e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris ssize_t decay_time, orig_decay_time, prev_decay_time; 392e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris size_t sz = sizeof(ssize_t); 393e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 394e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris test_skip_if(opt_purge != purge_mode_decay); 395e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 396e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctl("arena.0.decay_time", &orig_decay_time, &sz, 397e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris NULL, 0), 0, "Unexpected mallctl() failure"); 398e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 399e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris decay_time = -2; 400e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctl("arena.0.decay_time", NULL, NULL, 401e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris &decay_time, sizeof(ssize_t)), EFAULT, 402e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Unexpected mallctl() success"); 403e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 404e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris decay_time = 0x7fffffff; 405e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctl("arena.0.decay_time", NULL, NULL, 406e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris &decay_time, sizeof(ssize_t)), 0, 407e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Unexpected mallctl() failure"); 408e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 409e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris for (prev_decay_time = decay_time, decay_time = -1; 410e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris decay_time < 20; prev_decay_time = decay_time, decay_time++) { 411e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris ssize_t old_decay_time; 412e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 413e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctl("arena.0.decay_time", &old_decay_time, 414e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris &sz, &decay_time, sizeof(ssize_t)), 0, 415e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Unexpected mallctl() failure"); 416e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_zd_eq(old_decay_time, prev_decay_time, 417e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Unexpected old arena.0.decay_time"); 418e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris } 419e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris} 420e42940346e47de63bfc47470c86c3c132ec2db8cChristopher FerrisTEST_END 421e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 422de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_arena_i_purge) 423de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 424de73296d6b56abe70b08654342e136c2612d1dbdJason Evans unsigned narenas; 425de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(unsigned); 426de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t mib[3]; 427de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t miblen = 3; 428de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 429de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arena.0.purge", NULL, NULL, NULL, 0), 0, 430de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() failure"); 431de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 432de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arenas.narenas", &narenas, &sz, NULL, 0), 0, 433de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() failure"); 434de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlnametomib("arena.0.purge", mib, &miblen), 0, 435de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctlnametomib() failure"); 436de73296d6b56abe70b08654342e136c2612d1dbdJason Evans mib[1] = narenas; 437de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, NULL, 0), 0, 438de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctlbymib() failure"); 439de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 440de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 441de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 442e42940346e47de63bfc47470c86c3c132ec2db8cChristopher FerrisTEST_BEGIN(test_arena_i_decay) 443e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris{ 444e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris unsigned narenas; 445e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris size_t sz = sizeof(unsigned); 446e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris size_t mib[3]; 447e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris size_t miblen = 3; 448e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 449e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctl("arena.0.decay", NULL, NULL, NULL, 0), 0, 450e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Unexpected mallctl() failure"); 451e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 452e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctl("arenas.narenas", &narenas, &sz, NULL, 0), 0, 453e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Unexpected mallctl() failure"); 454e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctlnametomib("arena.0.decay", mib, &miblen), 0, 455e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Unexpected mallctlnametomib() failure"); 456e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris mib[1] = narenas; 457e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, NULL, 0), 0, 458e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Unexpected mallctlbymib() failure"); 459e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris} 460e42940346e47de63bfc47470c86c3c132ec2db8cChristopher FerrisTEST_END 461e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 462de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_arena_i_dss) 463de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 464de73296d6b56abe70b08654342e136c2612d1dbdJason Evans const char *dss_prec_old, *dss_prec_new; 465de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(dss_prec_old); 4664d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans size_t mib[3]; 4674d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans size_t miblen; 4684d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans 4694d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans miblen = sizeof(mib)/sizeof(size_t); 4704d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans assert_d_eq(mallctlnametomib("arena.0.dss", mib, &miblen), 0, 4714d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans "Unexpected mallctlnametomib() error"); 472de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 4734d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans dss_prec_new = "disabled"; 4744d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_old, &sz, &dss_prec_new, 475de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sizeof(dss_prec_new)), 0, "Unexpected mallctl() failure"); 476de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_str_ne(dss_prec_old, "primary", 477de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected default for dss precedence"); 478de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 4794d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_new, &sz, &dss_prec_old, 480de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sizeof(dss_prec_old)), 0, "Unexpected mallctl() failure"); 4814d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans 482586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_old, &sz, NULL, 0), 0, 483586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans "Unexpected mallctl() failure"); 484586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans assert_str_ne(dss_prec_old, "primary", 485586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans "Unexpected value for dss precedence"); 486586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans 4874d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans mib[1] = narenas_total_get(); 4884d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans dss_prec_new = "disabled"; 4894d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_old, &sz, &dss_prec_new, 4904d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans sizeof(dss_prec_new)), 0, "Unexpected mallctl() failure"); 4914d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans assert_str_ne(dss_prec_old, "primary", 4924d434adb146375ad17f0d5e994ed5728d2942e3fJason Evans "Unexpected default for dss precedence"); 493586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans 494586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_new, &sz, &dss_prec_old, 495586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans sizeof(dss_prec_new)), 0, "Unexpected mallctl() failure"); 496586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans 497586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_old, &sz, NULL, 0), 0, 498586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans "Unexpected mallctl() failure"); 499586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans assert_str_ne(dss_prec_old, "primary", 500586c8ede42d7d0545d36d9cbb0235fb39221ef3eJason Evans "Unexpected value for dss precedence"); 501de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 502de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 503de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 504de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_arenas_initialized) 505de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 506de73296d6b56abe70b08654342e136c2612d1dbdJason Evans unsigned narenas; 507de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(narenas); 508de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 509de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arenas.narenas", &narenas, &sz, NULL, 0), 0, 510de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() failure"); 511de73296d6b56abe70b08654342e136c2612d1dbdJason Evans { 512f41f14366877538b03109ecf346dbff2e21bbb16Mike Hommey VARIABLE_ARRAY(bool, initialized, narenas); 513de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 514de73296d6b56abe70b08654342e136c2612d1dbdJason Evans sz = narenas * sizeof(bool); 515de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arenas.initialized", initialized, &sz, 516de73296d6b56abe70b08654342e136c2612d1dbdJason Evans NULL, 0), 0, "Unexpected mallctl() failure"); 517de73296d6b56abe70b08654342e136c2612d1dbdJason Evans } 518de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 519de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 520de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 5218d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason EvansTEST_BEGIN(test_arenas_lg_dirty_mult) 5228d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans{ 5238d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans ssize_t lg_dirty_mult, orig_lg_dirty_mult, prev_lg_dirty_mult; 5248d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans size_t sz = sizeof(ssize_t); 5258d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 526e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris test_skip_if(opt_purge != purge_mode_ratio); 527e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 5288d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans assert_d_eq(mallctl("arenas.lg_dirty_mult", &orig_lg_dirty_mult, &sz, 5298d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans NULL, 0), 0, "Unexpected mallctl() failure"); 5308d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 5318d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans lg_dirty_mult = -2; 5328d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans assert_d_eq(mallctl("arenas.lg_dirty_mult", NULL, NULL, 5338d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans &lg_dirty_mult, sizeof(ssize_t)), EFAULT, 5348d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans "Unexpected mallctl() success"); 5358d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 5368d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans lg_dirty_mult = (sizeof(size_t) << 3); 5378d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans assert_d_eq(mallctl("arenas.lg_dirty_mult", NULL, NULL, 5388d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans &lg_dirty_mult, sizeof(ssize_t)), EFAULT, 5398d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans "Unexpected mallctl() success"); 5408d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 5418d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans for (prev_lg_dirty_mult = orig_lg_dirty_mult, lg_dirty_mult = -1; 542bd16ea49c3e36706a52ef9c8f560813c167fa085Jason Evans lg_dirty_mult < (ssize_t)(sizeof(size_t) << 3); prev_lg_dirty_mult = 5438d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans lg_dirty_mult, lg_dirty_mult++) { 5448d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans ssize_t old_lg_dirty_mult; 5458d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 5468d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans assert_d_eq(mallctl("arenas.lg_dirty_mult", &old_lg_dirty_mult, 5478d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans &sz, &lg_dirty_mult, sizeof(ssize_t)), 0, 5488d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans "Unexpected mallctl() failure"); 5498d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans assert_zd_eq(old_lg_dirty_mult, prev_lg_dirty_mult, 5508d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans "Unexpected old arenas.lg_dirty_mult"); 5518d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans } 5528d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans} 5538d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason EvansTEST_END 5548d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans 555e42940346e47de63bfc47470c86c3c132ec2db8cChristopher FerrisTEST_BEGIN(test_arenas_decay_time) 556e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris{ 557e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris ssize_t decay_time, orig_decay_time, prev_decay_time; 558e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris size_t sz = sizeof(ssize_t); 559e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 560e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris test_skip_if(opt_purge != purge_mode_decay); 561e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 562e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctl("arenas.decay_time", &orig_decay_time, &sz, 563e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris NULL, 0), 0, "Unexpected mallctl() failure"); 564e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 565e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris decay_time = -2; 566e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctl("arenas.decay_time", NULL, NULL, 567e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris &decay_time, sizeof(ssize_t)), EFAULT, 568e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Unexpected mallctl() success"); 569e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 570e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris decay_time = 0x7fffffff; 571e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctl("arenas.decay_time", NULL, NULL, 572e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris &decay_time, sizeof(ssize_t)), 0, 573e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Expected mallctl() failure"); 574e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 575e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris for (prev_decay_time = decay_time, decay_time = -1; 576e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris decay_time < 20; prev_decay_time = decay_time, decay_time++) { 577e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris ssize_t old_decay_time; 578e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 579e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_d_eq(mallctl("arenas.decay_time", &old_decay_time, 580e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris &sz, &decay_time, sizeof(ssize_t)), 0, 581e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Unexpected mallctl() failure"); 582e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris assert_zd_eq(old_decay_time, prev_decay_time, 583e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris "Unexpected old arenas.decay_time"); 584e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris } 585e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris} 586e42940346e47de63bfc47470c86c3c132ec2db8cChristopher FerrisTEST_END 587e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris 588de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_arenas_constants) 589de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 590de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 591de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#define TEST_ARENAS_CONSTANT(t, name, expected) do { \ 592de73296d6b56abe70b08654342e136c2612d1dbdJason Evans t name; \ 593de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(t); \ 594de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arenas."#name, &name, &sz, NULL, 0), 0, \ 595de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() failure"); \ 596de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_zu_eq(name, expected, "Incorrect "#name" size"); \ 597de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} while (0) 598de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 599de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_ARENAS_CONSTANT(size_t, quantum, QUANTUM); 600de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_ARENAS_CONSTANT(size_t, page, PAGE); 601de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_ARENAS_CONSTANT(unsigned, nbins, NBINS); 6023c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans TEST_ARENAS_CONSTANT(unsigned, nlruns, nlclasses); 6033c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans TEST_ARENAS_CONSTANT(unsigned, nhchunks, nhclasses); 604de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 605de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#undef TEST_ARENAS_CONSTANT 606de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 607de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 608de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 609de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_arenas_bin_constants) 610de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 611de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 612de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#define TEST_ARENAS_BIN_CONSTANT(t, name, expected) do { \ 613de73296d6b56abe70b08654342e136c2612d1dbdJason Evans t name; \ 614de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(t); \ 615de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arenas.bin.0."#name, &name, &sz, NULL, 0), \ 616de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 0, "Unexpected mallctl() failure"); \ 617de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_zu_eq(name, expected, "Incorrect "#name" size"); \ 618de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} while (0) 619de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 620de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_ARENAS_BIN_CONSTANT(size_t, size, arena_bin_info[0].reg_size); 621de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_ARENAS_BIN_CONSTANT(uint32_t, nregs, arena_bin_info[0].nregs); 622de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_ARENAS_BIN_CONSTANT(size_t, run_size, arena_bin_info[0].run_size); 623de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 624de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#undef TEST_ARENAS_BIN_CONSTANT 625de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 626de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 627de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 628de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_arenas_lrun_constants) 629de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 630de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 631de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#define TEST_ARENAS_LRUN_CONSTANT(t, name, expected) do { \ 632de73296d6b56abe70b08654342e136c2612d1dbdJason Evans t name; \ 633de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(t); \ 634de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arenas.lrun.0."#name, &name, &sz, NULL, \ 635de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 0), 0, "Unexpected mallctl() failure"); \ 636de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_zu_eq(name, expected, "Incorrect "#name" size"); \ 637de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} while (0) 638de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 639fc0b3b7383373d66cfed2cd4e2faa272a6868d32Jason Evans TEST_ARENAS_LRUN_CONSTANT(size_t, size, LARGE_MINCLASS); 640de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 641de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#undef TEST_ARENAS_LRUN_CONSTANT 642de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 643de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 644de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 6453c4d92e82a31f652a7c77ca937a02d0185085b06Jason EvansTEST_BEGIN(test_arenas_hchunk_constants) 6463c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans{ 6473c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans 6483c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans#define TEST_ARENAS_HCHUNK_CONSTANT(t, name, expected) do { \ 6493c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans t name; \ 6503c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans size_t sz = sizeof(t); \ 6513c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans assert_d_eq(mallctl("arenas.hchunk.0."#name, &name, &sz, NULL, \ 6523c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans 0), 0, "Unexpected mallctl() failure"); \ 6533c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans assert_zu_eq(name, expected, "Incorrect "#name" size"); \ 6543c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans} while (0) 6553c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans 6563c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans TEST_ARENAS_HCHUNK_CONSTANT(size_t, size, chunksize); 6573c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans 6583c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans#undef TEST_ARENAS_HCHUNK_CONSTANT 6593c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans} 6603c4d92e82a31f652a7c77ca937a02d0185085b06Jason EvansTEST_END 6613c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans 662de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_arenas_extend) 663de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 664de73296d6b56abe70b08654342e136c2612d1dbdJason Evans unsigned narenas_before, arena, narenas_after; 665de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(unsigned); 666de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 667de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arenas.narenas", &narenas_before, &sz, NULL, 0), 0, 668de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() failure"); 669de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arenas.extend", &arena, &sz, NULL, 0), 0, 670de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() failure"); 671de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("arenas.narenas", &narenas_after, &sz, NULL, 0), 0, 672de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected mallctl() failure"); 673de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 674de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_u_eq(narenas_before+1, narenas_after, 675de73296d6b56abe70b08654342e136c2612d1dbdJason Evans "Unexpected number of arenas before versus after extension"); 676de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_u_eq(arena, narenas_after-1, "Unexpected arena index"); 677de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 678de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 679de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 680de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_BEGIN(test_stats_arenas) 681de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 682de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 683de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#define TEST_STATS_ARENAS(t, name) do { \ 684de73296d6b56abe70b08654342e136c2612d1dbdJason Evans t name; \ 685de73296d6b56abe70b08654342e136c2612d1dbdJason Evans size_t sz = sizeof(t); \ 686de73296d6b56abe70b08654342e136c2612d1dbdJason Evans assert_d_eq(mallctl("stats.arenas.0."#name, &name, &sz, NULL, \ 687de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 0), 0, "Unexpected mallctl() failure"); \ 688de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} while (0) 689de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 690de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_STATS_ARENAS(unsigned, nthreads); 691e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_STATS_ARENAS(const char *, dss); 692e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_STATS_ARENAS(ssize_t, lg_dirty_mult); 693e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris TEST_STATS_ARENAS(ssize_t, decay_time); 694de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_STATS_ARENAS(size_t, pactive); 695de73296d6b56abe70b08654342e136c2612d1dbdJason Evans TEST_STATS_ARENAS(size_t, pdirty); 696de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 697de73296d6b56abe70b08654342e136c2612d1dbdJason Evans#undef TEST_STATS_ARENAS 698de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 699de73296d6b56abe70b08654342e136c2612d1dbdJason EvansTEST_END 700de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 701de73296d6b56abe70b08654342e136c2612d1dbdJason Evansint 702de73296d6b56abe70b08654342e136c2612d1dbdJason Evansmain(void) 703de73296d6b56abe70b08654342e136c2612d1dbdJason Evans{ 704de73296d6b56abe70b08654342e136c2612d1dbdJason Evans 705de73296d6b56abe70b08654342e136c2612d1dbdJason Evans return (test( 706de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_mallctl_errors, 707de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_mallctlnametomib_errors, 708de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_mallctlbymib_errors, 709de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_mallctl_read_write, 710de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_mallctlnametomib_short_mib, 711de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_mallctl_config, 712de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_mallctl_opt, 713de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_manpage_example, 7141cb181ed632e7573fb4eab194e4d216867222d27Jason Evans test_tcache_none, 7151cb181ed632e7573fb4eab194e4d216867222d27Jason Evans test_tcache, 716de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_thread_arena, 7178d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans test_arena_i_lg_dirty_mult, 718e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris test_arena_i_decay_time, 719de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_arena_i_purge, 720e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris test_arena_i_decay, 721de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_arena_i_dss, 722de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_arenas_initialized, 7238d6a3e8321a7767cb2ca0930b85d5d488a8cc659Jason Evans test_arenas_lg_dirty_mult, 724e42940346e47de63bfc47470c86c3c132ec2db8cChristopher Ferris test_arenas_decay_time, 725de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_arenas_constants, 726de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_arenas_bin_constants, 727de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_arenas_lrun_constants, 7283c4d92e82a31f652a7c77ca937a02d0185085b06Jason Evans test_arenas_hchunk_constants, 729de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_arenas_extend, 730de73296d6b56abe70b08654342e136c2612d1dbdJason Evans test_stats_arenas)); 731de73296d6b56abe70b08654342e136c2612d1dbdJason Evans} 732