aboutsummaryrefslogtreecommitdiff
path: root/examples/redis-unstable/deps/jemalloc/test/integration/slab_sizes.c
diff options
context:
space:
mode:
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.c80
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
5TEST_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}
74TEST_END
75
76int
77main(void) {
78 return test(
79 test_slab_sizes);
80}