Loading...
--- libmalloc/libmalloc-283/tests/perf_contended_malloc_free.c
+++ libmalloc/libmalloc-521.120.7/tests/perf_contended_malloc_free.c
@@ -9,6 +9,10 @@
#include <pthread.h>
#include <malloc/malloc.h>
#include <darwintest.h>
+
+#include <../src/internal.h> // for platform.h
+
+T_GLOBAL_META(T_META_TAG_PERF, T_META_TAG_XZONE);
// number of times malloc & free are called per dt_stat batch
#define ITERATIONS_PER_DT_STAT_BATCH 10000ull
@@ -261,7 +265,7 @@
T_DECL(perf_uncontended_nano_bench, "Uncontended nano malloc",
T_META_ALL_VALID_ARCHS(NO),
T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false),
- T_META_ENVVAR("MallocNanoZone=1"), T_META_TAG_PERF)
+ T_META_ENVVAR("MallocNanoZone=1"))
{
malloc_bench(true, 16, 256, 16); // NANO_MAX_SIZE
}
@@ -269,7 +273,7 @@
T_DECL(perf_contended_nano_bench, "Contended nano malloc",
T_META_ALL_VALID_ARCHS(NO),
T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false),
- T_META_ENVVAR("MallocNanoZone=1"), T_META_TAG_PERF)
+ T_META_ENVVAR("MallocNanoZone=1"))
{
malloc_bench(false, 16, 256, 16); // NANO_MAX_SIZE
}
@@ -277,7 +281,7 @@
T_DECL(perf_uncontended_tiny_bench, "Uncontended tiny malloc",
T_META_ALL_VALID_ARCHS(NO),
T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false),
- T_META_ENVVAR("MallocNanoZone=0"), T_META_TAG_PERF)
+ T_META_ENVVAR("MallocNanoZone=0"))
{
malloc_bench(true, 16, 1008, 16); // SMALL_THRESHOLD
}
@@ -285,31 +289,28 @@
T_DECL(perf_contended_tiny_bench, "Contended tiny malloc",
T_META_ALL_VALID_ARCHS(NO),
T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false),
- T_META_ENVVAR("MallocNanoZone=0"), T_META_TAG_PERF)
+ T_META_ENVVAR("MallocNanoZone=0"))
{
malloc_bench(false, 16, 1008, 16); // SMALL_THRESHOLD
}
T_DECL(perf_uncontended_small_bench, "Uncontended small malloc",
T_META_ALL_VALID_ARCHS(NO),
- T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false),
- T_META_TAG_PERF)
+ T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false))
{
malloc_bench(true, 1024, 15 * 1024, 512); // LARGE_THRESHOLD
}
T_DECL(perf_contended_small_bench, "Contended small malloc",
T_META_ALL_VALID_ARCHS(NO),
- T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false),
- T_META_TAG_PERF)
+ T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false))
{
malloc_bench(false, 1024, 15 * 1024, 512); // LARGE_THRESHOLD
}
T_DECL(perf_uncontended_large_bench, "Uncontended large malloc",
T_META_ALL_VALID_ARCHS(NO),
- T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false),
- T_META_TAG_PERF)
+ T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false))
{
iterations_per_dt_stat_batch = ITERATIONS_PER_DT_STAT_BATCH_LARGE_MALLOC;
malloc_bench(true, 16 * 1024, 256 * 1024, 16 * 1024);
@@ -317,9 +318,27 @@
T_DECL(perf_contended_large_bench, "Contended large malloc",
T_META_ALL_VALID_ARCHS(NO),
- T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false),
- T_META_TAG_PERF)
+ T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false))
{
iterations_per_dt_stat_batch = ITERATIONS_PER_DT_STAT_BATCH_LARGE_MALLOC;
malloc_bench(false, 16 * 1024, 256 * 1024, 16 * 1024);
}
+
+// rdar://100479142
+#if CONFIG_DEFERRED_RECLAIM
+
+// If deferred reclaim is available but not enabled by default, test it too
+T_DECL(perf_contended_large_deferred_reclaim_bench,
+ "Contended large malloc (deferred reclaim)",
+ T_META_ALL_VALID_ARCHS(NO),
+ T_META_LTEPHASE(LTE_POSTINIT), T_META_CHECK_LEAKS(false),
+ T_META_ENABLED(!DEFAULT_LARGE_CACHE_ENABLED),
+ T_META_ENVVAR("MallocLargeCache=1"))
+{
+ // Add more iterations to also serve as a stress test for deferred reclaim
+ iterations_per_dt_stat_batch =
+ ITERATIONS_PER_DT_STAT_BATCH_LARGE_MALLOC * 20;
+ malloc_bench(false, 16 * 1024, 256 * 1024, 16 * 1024);
+}
+
+#endif // CONFIG_DEFERRED_RECLAIM