Skip to content

Commit 2372e9f

Browse files
authored
Merge pull request #112 from ldorau/Add_UMF_BUILD_OS_MEMORY_PROVIDER_option
Add UMF_BUILD_OS_MEMORY_PROVIDER option to disable OS memory provider
2 parents 6c485a2 + dc48e27 commit 2372e9f

File tree

7 files changed

+73
-34
lines changed

7 files changed

+73
-34
lines changed

.github/workflows/basic.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ jobs:
1616
compiler: [{c: gcc, cxx: g++}]
1717
pool_tracking: ['ON', 'OFF']
1818
shared_library: ['OFF']
19+
os_provider: ['ON']
1920
include:
2021
- os: 'ubuntu-20.04'
2122
build_type: Release
@@ -29,6 +30,18 @@ jobs:
2930
build_type: Release
3031
compiler: {c: gcc, cxx: g++}
3132
shared_library: 'ON'
33+
# test os_provider='OFF' with shared_library='ON'
34+
- os: 'ubuntu-22.04'
35+
build_type: Release
36+
compiler: {c: gcc, cxx: g++}
37+
shared_library: 'ON'
38+
os_provider: 'OFF'
39+
# test os_provider='OFF' with shared_library='OFF'
40+
- os: 'ubuntu-22.04'
41+
build_type: Release
42+
compiler: {c: gcc, cxx: g++}
43+
shared_library: 'OFF'
44+
os_provider: 'OFF'
3245
runs-on: ${{matrix.os}}
3346

3447
steps:
@@ -54,6 +67,7 @@ jobs:
5467
-DUMF_BUILD_SHARED_LIBRARY=${{matrix.shared_library}}
5568
-DCMAKE_C_COMPILER=${{matrix.compiler.c}}
5669
-DCMAKE_CXX_COMPILER=${{matrix.compiler.cxx}}
70+
-DUMF_BUILD_OS_MEMORY_PROVIDER=${{matrix.os_provider}}
5771
-DUMF_ENABLE_POOL_TRACKING=${{matrix.pool_tracking}}
5872
-DUMF_FORMAT_CODE_STYLE=OFF
5973
-DUMF_DEVELOPER_MODE=ON

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ include(helpers)
1717

1818
# Build Options
1919
option(UMF_BUILD_SHARED_LIBRARY "Build UMF as shared library" OFF)
20+
option(UMF_BUILD_OS_MEMORY_PROVIDER "Build OS memory provider" ON)
2021
option(UMF_BUILD_LIBUMF_POOL_DISJOINT "Build the libumf_pool_disjoint static library" OFF)
2122
option(UMF_BUILD_LIBUMF_POOL_JEMALLOC "Build the libumf_pool_jemalloc static library" OFF)
2223
option(UMF_BUILD_LIBUMF_POOL_SCALABLE "Build the libumf_pool_scalable static library" OFF)

README.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ UMF comes with predefined pool allocators (see include/pool) and providers (see
2222

2323
A memory provider that provides memory from an operating system.
2424

25+
#### Requirements
26+
27+
1) Linux OS
28+
2) The `UMF_BUILD_OS_MEMORY_PROVIDER` option turned `ON` (by default)
29+
3) Required packages:
30+
- libnuma-dev
31+
2532
## Memory pool managers
2633

2734
### libumf_pool_disjoint
@@ -41,7 +48,7 @@ The `UMF_BUILD_LIBUMF_POOL_JEMALLOC` option has to be turned `ON` to build this
4148

4249
1) The `UMF_BUILD_LIBUMF_POOL_JEMALLOC` option turned `ON`
4350
2) Required packages:
44-
- libjemalloc-dev
51+
- libjemalloc-dev
4552

4653
### libumf_pool_scalable (Linux-only)
4754

@@ -52,7 +59,7 @@ The `UMF_BUILD_LIBUMF_POOL_SCALABLE` option has to be turned `ON` to build this
5259

5360
1) The `UMF_BUILD_LIBUMF_POOL_SCALABLE` option turned `ON`
5461
2) Required packages:
55-
- libtbb-dev (libraries: libtbbmalloc.so.2)
62+
- libtbb-dev (libraries: libtbbmalloc.so.2)
5663

5764
## Building
5865

@@ -61,7 +68,6 @@ The `UMF_BUILD_LIBUMF_POOL_SCALABLE` option has to be turned `ON` to build this
6168
Required packages:
6269
- C++ compiler with C++17 support
6370
- [CMake](https://cmake.org/) >= 3.14.0
64-
- Linux only: libnuma-dev
6571

6672
For development and contributions:
6773
- clang-format-15.0 (can be installed with `python -m pip install clang-format==15.0.7`)
@@ -115,6 +121,7 @@ List of options provided by CMake:
115121
| Name | Description | Values | Default |
116122
| - | - | - | - |
117123
| UMF_BUILD_SHARED_LIBRARY | Build UMF as shared library | ON/OFF | OFF |
124+
| UMF_BUILD_OS_MEMORY_PROVIDER | Build OS memory provider | ON/OFF | ON |
118125
| UMF_BUILD_LIBUMF_POOL_DISJOINT | Build the libumf_pool_disjoint static library | ON/OFF | OFF |
119126
| UMF_BUILD_LIBUMF_POOL_JEMALLOC | Build the libumf_pool_jemalloc static library | ON/OFF | OFF |
120127
| UMF_BUILD_LIBUMF_POOL_SCALABLE | Build the libumf_pool_scalable static library | ON/OFF | OFF |

benchmark/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ target_link_libraries(ubench
3232
pthread
3333
m)
3434

35+
if (UMF_BUILD_OS_MEMORY_PROVIDER)
36+
target_compile_definitions(ubench PRIVATE UMF_BUILD_OS_MEMORY_PROVIDER=1)
37+
endif()
38+
3539
if (UMF_BUILD_LIBUMF_POOL_DISJOINT)
3640
target_compile_definitions(ubench PRIVATE UMF_BUILD_LIBUMF_POOL_DISJOINT=1)
3741
endif()

benchmark/ubench.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ UBENCH_EX(simple, glibc_malloc) {
9393
free(array);
9494
}
9595

96+
#ifdef UMF_BUILD_OS_MEMORY_PROVIDER
9697
////////////////// OS MEMORY PROVIDER
9798

9899
static umf_os_memory_provider_params_t UMF_OS_MEMORY_PROVIDER_PARAMS = {
@@ -156,10 +157,12 @@ UBENCH_EX(simple, os_memory_provider) {
156157
umfMemoryProviderDestroy(os_memory_provider);
157158
free(array);
158159
}
160+
#endif /* UMF_BUILD_OS_MEMORY_PROVIDER */
159161

160-
#if (defined UMF_BUILD_LIBUMF_POOL_DISJOINT) || \
161-
(defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) || \
162-
(defined UMF_BUILD_LIBUMF_POOL_SCALABLE)
162+
#if (defined UMF_BUILD_OS_MEMORY_PROVIDER) && \
163+
((defined UMF_BUILD_LIBUMF_POOL_DISJOINT) || \
164+
(defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) || \
165+
(defined UMF_BUILD_LIBUMF_POOL_SCALABLE))
163166

164167
static void *w_umfPoolMalloc(void *provider, size_t size, size_t alignment) {
165168
umf_memory_pool_handle_t hPool = (umf_memory_pool_handle_t)provider;
@@ -174,9 +177,10 @@ static void w_umfPoolFree(void *provider, void *ptr, size_t size) {
174177
exit(-1);
175178
}
176179
}
177-
#endif /* (defined UMF_BUILD_LIBUMF_POOL_DISJOINT) || (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) || (defined UMF_BUILD_LIBUMF_POOL_SCALABLE) */
180+
#endif /* (defined UMF_BUILD_OS_MEMORY_PROVIDER) && ((defined UMF_BUILD_LIBUMF_POOL_DISJOINT) || (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) || (defined UMF_BUILD_LIBUMF_POOL_SCALABLE)) */
178181

179-
#ifdef UMF_BUILD_LIBUMF_POOL_DISJOINT
182+
#if (defined UMF_BUILD_LIBUMF_POOL_DISJOINT) && \
183+
(defined UMF_BUILD_OS_MEMORY_PROVIDER)
180184
////////////////// DISJOINT POOL WITH OS MEMORY PROVIDER
181185

182186
UBENCH_EX(simple, disjoint_pool_with_os_memory_provider) {
@@ -218,9 +222,10 @@ UBENCH_EX(simple, disjoint_pool_with_os_memory_provider) {
218222
umfMemoryProviderDestroy(os_memory_provider);
219223
free(array);
220224
}
221-
#endif /* UMF_BUILD_LIBUMF_POOL_DISJOINT */
225+
#endif /* (defined UMF_BUILD_LIBUMF_POOL_DISJOINT) && (defined UMF_BUILD_OS_MEMORY_PROVIDER) */
222226

223-
#ifdef UMF_BUILD_LIBUMF_POOL_JEMALLOC
227+
#if (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) && \
228+
(defined UMF_BUILD_OS_MEMORY_PROVIDER)
224229
////////////////// JEMALLOC POOL WITH OS MEMORY PROVIDER
225230

226231
UBENCH_EX(simple, jemalloc_pool_with_os_memory_provider) {
@@ -254,9 +259,10 @@ UBENCH_EX(simple, jemalloc_pool_with_os_memory_provider) {
254259
umfMemoryProviderDestroy(os_memory_provider);
255260
free(array);
256261
}
257-
#endif /* UMF_BUILD_LIBUMF_POOL_JEMALLOC */
262+
#endif /* (defined UMF_BUILD_LIBUMF_POOL_JEMALLOC) && (defined UMF_BUILD_OS_MEMORY_PROVIDER) */
258263

259-
#ifdef UMF_BUILD_LIBUMF_POOL_SCALABLE
264+
#if (defined UMF_BUILD_LIBUMF_POOL_SCALABLE) && \
265+
(defined UMF_BUILD_OS_MEMORY_PROVIDER)
260266
////////////////// SCALABLE (TBB) POOL WITH OS MEMORY PROVIDER
261267

262268
UBENCH_EX(simple, scalable_pool_with_os_memory_provider) {
@@ -290,6 +296,6 @@ UBENCH_EX(simple, scalable_pool_with_os_memory_provider) {
290296
umfMemoryProviderDestroy(os_memory_provider);
291297
free(array);
292298
}
293-
#endif /* UMF_BUILD_LIBUMF_POOL_SCALABLE */
299+
#endif /* (defined UMF_BUILD_LIBUMF_POOL_SCALABLE) && (defined UMF_BUILD_OS_MEMORY_PROVIDER) */
294300

295301
UBENCH_MAIN();

src/CMakeLists.txt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,35 @@ include(${UMF_CMAKE_SOURCE_DIR}/cmake/helpers.cmake)
66

77
add_subdirectory(utils)
88

9+
set(UMF_LIBS umf_utils)
10+
911
set(UMF_SOURCES
1012
memory_pool.c
1113
memory_provider.c
1214
memory_provider_get_last_failed.c
13-
provider/provider_os_memory.c
1415
provider/provider_tracking.c
1516
critnib/critnib.c
1617
)
1718

18-
set(UMF_SOURCES_LINUX
19-
provider/provider_os_memory_linux.c
20-
)
21-
2219
set(UMF_SOURCES_WINDOWS
23-
provider/provider_os_memory_windows.c
2420
provider/provider_tracking_windows.cpp
2521
)
2622

23+
if(UMF_BUILD_OS_MEMORY_PROVIDER)
24+
set(UMF_SOURCES ${UMF_SOURCES} provider/provider_os_memory.c)
25+
set(UMF_SOURCES_LINUX ${UMF_SOURCES_LINUX} provider/provider_os_memory_linux.c)
26+
set(UMF_SOURCES_WINDOWS ${UMF_SOURCES_WINDOWS} provider/provider_os_memory_windows.c)
27+
if(LINUX)
28+
set(UMF_LIBS ${UMF_LIBS} numa)
29+
endif()
30+
endif()
31+
2732
if(LINUX)
2833
set(UMF_SOURCES ${UMF_SOURCES} ${UMF_SOURCES_LINUX})
2934
elseif(WINDOWS)
3035
set(UMF_SOURCES ${UMF_SOURCES} ${UMF_SOURCES_WINDOWS})
3136
endif()
3237

33-
if(LINUX)
34-
set(UMF_LIBS umf_utils numa)
35-
else()
36-
set(UMF_LIBS umf_utils)
37-
endif()
38-
3938
if(UMF_BUILD_SHARED_LIBRARY)
4039
add_umf_library(NAME umf
4140
TYPE SHARED

test/CMakeLists.txt

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,19 +78,27 @@ if(UMF_BUILD_LIBUMF_POOL_DISJOINT)
7878
LIBS disjoint_pool)
7979
endif()
8080

81-
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
82-
add_umf_test(NAME jemalloc_pool
83-
SRCS pools/jemalloc_pool.cpp malloc_compliance_tests.cpp
84-
LIBS jemalloc_pool)
81+
if(UMF_BUILD_OS_MEMORY_PROVIDER)
82+
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
83+
add_umf_test(NAME jemalloc_pool
84+
SRCS pools/jemalloc_pool.cpp malloc_compliance_tests.cpp
85+
LIBS jemalloc_pool)
86+
endif()
87+
else()
88+
message(STATUS "The jemalloc_pool test is DISABLED, because it uses OS_MEMORY_PROVIDER, while the UMF_BUILD_OS_MEMORY_PROVIDER option is set to OFF")
8589
endif()
8690

87-
if(UMF_BUILD_LIBUMF_POOL_SCALABLE)
88-
add_umf_test(NAME scalable_pool
89-
SRCS pools/scalable_pool.cpp malloc_compliance_tests.cpp
90-
LIBS scalable_pool)
91+
if(UMF_BUILD_OS_MEMORY_PROVIDER)
92+
if(UMF_BUILD_LIBUMF_POOL_SCALABLE)
93+
add_umf_test(NAME scalable_pool
94+
SRCS pools/scalable_pool.cpp malloc_compliance_tests.cpp
95+
LIBS scalable_pool)
96+
endif()
97+
else()
98+
message(STATUS "The scalable_pool test is DISABLED, because it uses OS_MEMORY_PROVIDER, while the UMF_BUILD_OS_MEMORY_PROVIDER option is set to OFF")
9199
endif()
92100

93-
if(LINUX) # OS-specific functions are implemented only for Linux now
101+
if(UMF_BUILD_OS_MEMORY_PROVIDER AND LINUX) # OS-specific functions are implemented only for Linux now
94102
add_umf_test(NAME provider_os_memory
95103
SRCS provider_os_memory.cpp
96104
LIBS umf_utils)

0 commit comments

Comments
 (0)