diff options
Diffstat (limited to 'examples/redis-unstable/deps/jemalloc/test/integration/slab_sizes.c')
| -rw-r--r-- | examples/redis-unstable/deps/jemalloc/test/integration/slab_sizes.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/examples/redis-unstable/deps/jemalloc/test/integration/slab_sizes.c b/examples/redis-unstable/deps/jemalloc/test/integration/slab_sizes.c new file mode 100644 index 0000000..f6a66f2 --- /dev/null +++ b/examples/redis-unstable/deps/jemalloc/test/integration/slab_sizes.c | |||
| @@ -0,0 +1,80 @@ | |||
| 1 | #include "test/jemalloc_test.h" | ||
| 2 | |||
| 3 | /* Note that this test relies on the unusual slab sizes set in slab_sizes.sh. */ | ||
| 4 | |||
| 5 | TEST_BEGIN(test_slab_sizes) { | ||
| 6 | unsigned nbins; | ||
| 7 | size_t page; | ||
| 8 | size_t sizemib[4]; | ||
| 9 | size_t slabmib[4]; | ||
| 10 | size_t len; | ||
| 11 | |||
| 12 | len = sizeof(nbins); | ||
| 13 | expect_d_eq(mallctl("arenas.nbins", &nbins, &len, NULL, 0), 0, | ||
| 14 | "nbins mallctl failure"); | ||
| 15 | |||
| 16 | len = sizeof(page); | ||
| 17 | expect_d_eq(mallctl("arenas.page", &page, &len, NULL, 0), 0, | ||
| 18 | "page mallctl failure"); | ||
| 19 | |||
| 20 | len = 4; | ||
| 21 | expect_d_eq(mallctlnametomib("arenas.bin.0.size", sizemib, &len), 0, | ||
| 22 | "bin size mallctlnametomib failure"); | ||
| 23 | |||
| 24 | len = 4; | ||
| 25 | expect_d_eq(mallctlnametomib("arenas.bin.0.slab_size", slabmib, &len), | ||
| 26 | 0, "slab size mallctlnametomib failure"); | ||
| 27 | |||
| 28 | size_t biggest_slab_seen = 0; | ||
| 29 | |||
| 30 | for (unsigned i = 0; i < nbins; i++) { | ||
| 31 | size_t bin_size; | ||
| 32 | size_t slab_size; | ||
| 33 | len = sizeof(size_t); | ||
| 34 | sizemib[2] = i; | ||
| 35 | slabmib[2] = i; | ||
| 36 | expect_d_eq(mallctlbymib(sizemib, 4, (void *)&bin_size, &len, | ||
| 37 | NULL, 0), 0, "bin size mallctlbymib failure"); | ||
| 38 | |||
| 39 | len = sizeof(size_t); | ||
| 40 | expect_d_eq(mallctlbymib(slabmib, 4, (void *)&slab_size, &len, | ||
| 41 | NULL, 0), 0, "slab size mallctlbymib failure"); | ||
| 42 | |||
| 43 | if (bin_size < 100) { | ||
| 44 | /* | ||
| 45 | * Then we should be as close to 17 as possible. Since | ||
| 46 | * not all page sizes are valid (because of bitmap | ||
| 47 | * limitations on the number of items in a slab), we | ||
| 48 | * should at least make sure that the number of pages | ||
| 49 | * goes up. | ||
| 50 | */ | ||
| 51 | expect_zu_ge(slab_size, biggest_slab_seen, | ||
| 52 | "Slab sizes should go up"); | ||
| 53 | biggest_slab_seen = slab_size; | ||
| 54 | } else if ( | ||
| 55 | (100 <= bin_size && bin_size < 128) | ||
| 56 | || (128 < bin_size && bin_size <= 200)) { | ||
| 57 | expect_zu_eq(slab_size, page, | ||
| 58 | "Forced-small slabs should be small"); | ||
| 59 | } else if (bin_size == 128) { | ||
| 60 | expect_zu_eq(slab_size, 2 * page, | ||
| 61 | "Forced-2-page slab should be 2 pages"); | ||
| 62 | } else if (200 < bin_size && bin_size <= 4096) { | ||
| 63 | expect_zu_ge(slab_size, biggest_slab_seen, | ||
| 64 | "Slab sizes should go up"); | ||
| 65 | biggest_slab_seen = slab_size; | ||
| 66 | } | ||
| 67 | } | ||
| 68 | /* | ||
| 69 | * For any reasonable configuration, 17 pages should be a valid slab | ||
| 70 | * size for 4096-byte items. | ||
| 71 | */ | ||
| 72 | expect_zu_eq(biggest_slab_seen, 17 * page, "Didn't hit page target"); | ||
| 73 | } | ||
| 74 | TEST_END | ||
| 75 | |||
| 76 | int | ||
| 77 | main(void) { | ||
| 78 | return test( | ||
| 79 | test_slab_sizes); | ||
| 80 | } | ||
