Skip to content

Commit 5256637

Browse files
committed
Add proxy library for intercepting user allocation requests
UMF proxy library is a library for intercepting user allocation requests. It intercepts following APIs: - aligned_alloc() - calloc() - free() - malloc() - malloc_usable_size() - realloc() Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 5d4f6c7 commit 5256637

File tree

12 files changed

+580
-0
lines changed

12 files changed

+580
-0
lines changed

.github/workflows/codeql.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@ jobs:
2222
- os: ubuntu-latest
2323
nproc: $(nproc)
2424
pool_scalable: 'ON'
25+
pool_jemalloc: 'ON'
2526
- os: windows-latest
2627
nproc: $Env:NUMBER_OF_PROCESSORS
2728
pool_scalable: 'OFF'
29+
pool_jemalloc: 'OFF'
2830
runs-on: ${{matrix.os}}
2931

3032
steps:
@@ -53,6 +55,7 @@ jobs:
5355
-DUMF_FORMAT_CODE_STYLE=ON
5456
-DUMF_DEVELOPER_MODE=ON
5557
-DUMF_ENABLE_POOL_TRACKING=ON
58+
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=${{matrix.pool_jemalloc}}
5659
-DUMF_BUILD_LIBUMF_POOL_SCALABLE=${{matrix.pool_scalable}}
5760
5861
- name: Build

.github/workflows/pr_push.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,6 @@ jobs:
8585
Benchmark:
8686
needs: [Build]
8787
uses: ./.github/workflows/benchmarks.yml
88+
Proxy_lib:
89+
needs: [Build]
90+
uses: ./.github/workflows/proxy_lib.yml

.github/workflows/proxy_lib.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: Proxy library
2+
3+
on: workflow_call
4+
5+
permissions:
6+
contents: read
7+
8+
jobs:
9+
ubuntu-build:
10+
name: Build - Ubuntu
11+
12+
strategy:
13+
matrix:
14+
os: ['ubuntu-22.04']
15+
build_type: [Release, Debug]
16+
compiler: [{c: gcc, cxx: g++}]
17+
runs-on: ${{matrix.os}}
18+
19+
steps:
20+
- name: Checkout
21+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
22+
23+
- name: Install apt packages
24+
run: |
25+
sudo apt-get update
26+
sudo apt-get install -y cmake libhwloc-dev libnuma-dev libjemalloc-dev libtbb-dev
27+
28+
- name: Configure build
29+
run: >
30+
cmake
31+
-B ${{github.workspace}}/build
32+
-DCMAKE_BUILD_TYPE=${{matrix.build_type}}
33+
-DCMAKE_C_COMPILER=${{matrix.compiler.c}}
34+
-DCMAKE_CXX_COMPILER=${{matrix.compiler.cxx}}
35+
-DUMF_BUILD_SHARED_LIBRARY=ON
36+
-DUMF_BUILD_BENCHMARKS=ON
37+
-DUMF_BUILD_TESTS=OFF
38+
-DUMF_FORMAT_CODE_STYLE=OFF
39+
-DUMF_DEVELOPER_MODE=OFF
40+
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=ON
41+
-DUMF_BUILD_LIBUMF_POOL_DISJOINT=ON
42+
-DUMF_BUILD_LIBUMF_POOL_SCALABLE=OFF
43+
-DUMF_ENABLE_POOL_TRACKING=OFF
44+
45+
- name: Build UMF
46+
run: cmake --build ${{github.workspace}}/build -j $(nproc)
47+
48+
- name: Run benchmarks
49+
working-directory: ${{github.workspace}}/build
50+
run: |
51+
LD_DEBUG=all LD_PRELOAD=./lib/libumf_proxy.so ./benchmark/ubench
52+
echo $?

src/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,12 @@ install(TARGETS umf
103103
)
104104

105105
add_subdirectory(pool)
106+
107+
# TODO: enable proxy_lib on Windows
108+
if(LINUX)
109+
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
110+
add_subdirectory(proxy_lib)
111+
else()
112+
message(STATUS "The proxy library is disabled, because UMF_BUILD_LIBUMF_POOL_JEMALLOC is OFF")
113+
endif()
114+
endif()

src/proxy_lib/CMakeLists.txt

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Copyright (C) 2023-2024 Intel Corporation
2+
# Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
3+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
5+
include(${UMF_CMAKE_SOURCE_DIR}/cmake/helpers.cmake)
6+
7+
set(PROXY_LIBS umf jemalloc_pool)
8+
9+
set(PROXY_SOURCES
10+
proxy_lib.c
11+
)
12+
13+
set(PROXY_SOURCES_LINUX
14+
proxy_lib_linux.c
15+
)
16+
17+
set(PROXY_SOURCES_WINDOWS
18+
proxy_lib_windows.c
19+
)
20+
21+
set(PROXY_SOURCES_MACOSX
22+
proxy_lib_linux.c
23+
)
24+
25+
if(LINUX)
26+
set(PROXY_SOURCES ${PROXY_SOURCES} ${PROXY_SOURCES_LINUX})
27+
elseif(WINDOWS)
28+
set(PROXY_SOURCES ${PROXY_SOURCES} ${PROXY_SOURCES_WINDOWS})
29+
elseif(MACOSX)
30+
set(PROXY_SOURCES ${PROXY_SOURCES} ${PROXY_SOURCES_MACOSX})
31+
endif()
32+
33+
add_umf_library(NAME umf_proxy
34+
TYPE SHARED
35+
SRCS ${PROXY_SOURCES}
36+
LIBS ${PROXY_LIBS}
37+
LINUX_MAP_FILE ${CMAKE_CURRENT_SOURCE_DIR}/proxy_lib.map
38+
WINDOWS_DEF_FILE ${CMAKE_CURRENT_SOURCE_DIR}/proxy_lib.def)
39+
40+
add_library(${PROJECT_NAME}::proxy ALIAS umf_proxy)
41+
42+
target_include_directories(umf_proxy PUBLIC
43+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
44+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/utils>
45+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
46+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
47+
)
48+
49+
install(TARGETS umf_proxy
50+
EXPORT ${PROJECT_NAME}-targets)

0 commit comments

Comments
 (0)