Skip to content

Commit bdf34d1

Browse files
committed
Add jemalloc pool manager to benchmark
Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 4376a81 commit bdf34d1

File tree

3 files changed

+57
-4
lines changed

3 files changed

+57
-4
lines changed

.github/workflows/benchmarks.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
- name: Install apt packages
2121
run: |
2222
sudo apt-get update
23-
sudo apt-get install -y cmake libnuma-dev
23+
sudo apt-get install -y cmake libnuma-dev libjemalloc-dev
2424
2525
- name: Configure build
2626
run: >
@@ -33,7 +33,7 @@ jobs:
3333
-DUMF_BUILD_TESTS=OFF
3434
-DUMF_FORMAT_CODE_STYLE=OFF
3535
-DUMF_DEVELOPER_MODE=OFF
36-
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=OFF
36+
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=ON
3737
-DUMF_BUILD_LIBUMF_POOL_DISJOINT=ON
3838
-DUMF_ENABLE_POOL_TRACKING=OFF
3939

benchmark/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ if(UMF_BUILD_LIBUMF_POOL_DISJOINT)
1010
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} disjoint_pool)
1111
endif()
1212

13+
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
14+
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} jemalloc_pool)
15+
endif()
16+
1317
add_executable(ubench ubench.c)
1418

1519
add_dependencies(ubench
@@ -27,3 +31,7 @@ target_link_libraries(ubench
2731
if (UMF_BUILD_LIBUMF_POOL_DISJOINT)
2832
target_compile_definitions(ubench PRIVATE UMF_BUILD_LIBUMF_POOL_DISJOINT=1)
2933
endif()
34+
35+
if (UMF_BUILD_LIBUMF_POOL_JEMALLOC)
36+
target_compile_definitions(ubench PRIVATE UMF_BUILD_LIBUMF_POOL_JEMALLOC=1)
37+
endif()

benchmark/ubench.c

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,17 @@
77
*
88
*/
99

10+
#include <umf/memory_pool.h>
1011
#include <umf/providers/provider_os_memory.h>
1112

1213
#ifdef UMF_BUILD_LIBUMF_POOL_DISJOINT
1314
#include <umf/pools/pool_disjoint.h>
1415
#endif
1516

17+
#ifdef UMF_BUILD_LIBUMF_POOL_JEMALLOC
18+
#include <umf/pools/pool_jemalloc.h>
19+
#endif
20+
1621
#include <stdbool.h>
1722
#include <unistd.h>
1823

@@ -148,8 +153,8 @@ UBENCH_EX(simple, os_memory_provider) {
148153
free(array);
149154
}
150155

151-
#ifdef UMF_BUILD_LIBUMF_POOL_DISJOINT
152-
////////////////// DISJOINT POOL WITH OS MEMORY PROVIDER
156+
#if (defined UMF_BUILD_LIBUMF_POOL_DISJOINT) || \
157+
(defined UMF_BUILD_LIBUMF_POOL_JEMALLOC)
153158

154159
static void *w_umfPoolMalloc(void *provider, size_t size, size_t alignment) {
155160
umf_memory_pool_handle_t hPool = (umf_memory_pool_handle_t)provider;
@@ -164,6 +169,10 @@ static void w_umfPoolFree(void *provider, void *ptr, size_t size) {
164169
exit(-1);
165170
}
166171
}
172+
#endif /* (defined UMF_BUILD_LIBUMF_POOL_TBB) || (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) */
173+
174+
#ifdef UMF_BUILD_LIBUMF_POOL_DISJOINT
175+
////////////////// DISJOINT POOL WITH OS MEMORY PROVIDER
167176

168177
UBENCH_EX(simple, disjoint_pool_with_os_memory_provider) {
169178
alloc_t *array = alloc_array(N_ITERATIONS);
@@ -206,4 +215,40 @@ UBENCH_EX(simple, disjoint_pool_with_os_memory_provider) {
206215
}
207216
#endif /* UMF_BUILD_LIBUMF_POOL_DISJOINT */
208217

218+
#ifdef UMF_BUILD_LIBUMF_POOL_JEMALLOC
219+
////////////////// JEMALLOC POOL WITH OS MEMORY PROVIDER
220+
221+
UBENCH_EX(simple, jemalloc_pool_with_os_memory_provider) {
222+
alloc_t *array = alloc_array(N_ITERATIONS);
223+
224+
enum umf_result_t umf_result;
225+
umf_memory_provider_handle_t os_memory_provider = NULL;
226+
umf_result = umfMemoryProviderCreate(&UMF_OS_MEMORY_PROVIDER_OPS,
227+
&UMF_OS_MEMORY_PROVIDER_PARAMS,
228+
&os_memory_provider);
229+
if (umf_result != UMF_RESULT_SUCCESS) {
230+
exit(-1);
231+
}
232+
233+
umf_memory_pool_handle_t jemalloc_pool;
234+
umf_result = umfPoolCreate(&UMF_JEMALLOC_POOL_OPS, os_memory_provider, NULL,
235+
&jemalloc_pool);
236+
if (umf_result != UMF_RESULT_SUCCESS) {
237+
exit(-1);
238+
}
239+
240+
do_benchmark(array, N_ITERATIONS, w_umfPoolMalloc, w_umfPoolFree,
241+
jemalloc_pool); // WARMUP
242+
243+
UBENCH_DO_BENCHMARK() {
244+
do_benchmark(array, N_ITERATIONS, w_umfPoolMalloc, w_umfPoolFree,
245+
jemalloc_pool);
246+
}
247+
248+
umfPoolDestroy(jemalloc_pool);
249+
umfMemoryProviderDestroy(os_memory_provider);
250+
free(array);
251+
}
252+
#endif /* UMF_BUILD_LIBUMF_POOL_JEMALLOC */
253+
209254
UBENCH_MAIN();

0 commit comments

Comments
 (0)