Skip to content

Commit ddf05f4

Browse files
committed
tracker props
1 parent 1de8ce0 commit ddf05f4

File tree

9 files changed

+42
-47
lines changed

9 files changed

+42
-47
lines changed

.github/workflows/pr_push.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ jobs:
2020
Build:
2121
name: Basic builds
2222
uses: ./.github/workflows/reusable_basic.yml
23-
23+
Sanitizers:
24+
uses: ./.github/workflows/reusable_sanitizers.yml

FlameGraph

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit 41fee1f99f9276008b7cd112fca19dc3ea84ac32

src/ipc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ umf_result_t umfGetIPCHandle(const void *ptr, umf_ipc_handle_t *umfIPCHandle,
5858
}
5959

6060
size_t ipcHandleSize = 0;
61-
umf_alloc_info_t allocInfo;
62-
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &allocInfo, NULL);
61+
umf_alloc_info_t allocInfo = {NULL, 0, NULL, NULL};
62+
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &allocInfo);
6363
if (ret != UMF_RESULT_SUCCESS) {
6464
LOG_ERR("cannot get alloc info for ptr = %p.", ptr);
6565
return ret;

src/memory_props.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,17 @@ umf_result_t
1919
umfGetMemoryPropertiesHandle(const void *ptr,
2020
umf_memory_properties_handle_t *props_handle) {
2121

22-
// TODO remove?
23-
umf_alloc_info_t allocInfo = {NULL, 0, NULL};
24-
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &allocInfo, props_handle);
22+
if (props_handle == NULL) {
23+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
24+
}
25+
26+
umf_alloc_info_t allocInfo = {NULL, 0, NULL, NULL};
27+
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &allocInfo);
2528
if (ret != UMF_RESULT_SUCCESS) {
2629
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
2730
}
2831

32+
*props_handle = allocInfo.props;
2933

3034
return UMF_RESULT_SUCCESS;
3135
}

src/memory_props_internal.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,13 @@ extern "C" {
2626
#endif
2727

2828
typedef struct umf_memory_properties_t {
29-
// TODO move to alloc_info_t w/o gpu_props
29+
// TODO alloc_info_t
3030
void *ptr;
3131
umf_memory_pool_handle_t pool;
3232
umf_memory_provider_handle_t provider;
3333
uint64_t id;
3434
void *base;
3535
size_t base_size;
36-
37-
// TODO
38-
bool gpu_properties_initialized;
39-
union {
40-
#if UMF_BUILD_LEVEL_ZERO_PROVIDER
41-
ze_memory_allocation_properties_t ze_properties;
42-
#endif
43-
int unused; // in case of no GPU support
44-
} gpu;
4536
} umf_memory_properties_t;
4637

4738
#ifdef __cplusplus

src/pool/pool_disjoint.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -884,8 +884,8 @@ size_t disjoint_pool_malloc_usable_size(void *pool, const void *ptr) {
884884
critnib_release(disjoint_pool->known_slabs, ref_slab);
885885
}
886886

887-
umf_alloc_info_t allocInfo = {NULL, 0, NULL};
888-
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &allocInfo, NULL);
887+
umf_alloc_info_t allocInfo = {NULL, 0, NULL, NULL};
888+
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &allocInfo);
889889
if (ret != UMF_RESULT_SUCCESS) {
890890
return 0;
891891
}
@@ -925,8 +925,8 @@ umf_result_t disjoint_pool_free(void *pool, void *ptr) {
925925
critnib_release(disjoint_pool->known_slabs, ref_slab);
926926
}
927927

928-
umf_alloc_info_t allocInfo = {NULL, 0, NULL};
929-
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &allocInfo, NULL);
928+
umf_alloc_info_t allocInfo = {NULL, 0, NULL, NULL};
929+
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &allocInfo);
930930
if (ret != UMF_RESULT_SUCCESS) {
931931
TLS_last_allocation_error = ret;
932932
LOG_ERR("failed to get allocation info from the memory tracker");

src/pool/pool_proxy.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,8 @@ static umf_result_t proxy_free(void *pool, void *ptr) {
9797
struct proxy_memory_pool *hPool = (struct proxy_memory_pool *)pool;
9898

9999
if (ptr) {
100-
umf_alloc_info_t allocInfo = {NULL, 0, NULL};
101-
umf_result_t umf_result =
102-
umfMemoryTrackerGetAllocInfo(ptr, &allocInfo, NULL);
100+
umf_alloc_info_t allocInfo = {NULL, 0, NULL, NULL};
101+
umf_result_t umf_result = umfMemoryTrackerGetAllocInfo(ptr, &allocInfo);
103102
if (umf_result == UMF_RESULT_SUCCESS) {
104103
size = allocInfo.baseSize;
105104
}

src/provider/provider_tracking.c

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ typedef struct tracker_alloc_info_t {
5050
umf_memory_properties_t props;
5151

5252
// TODO remove
53-
umf_memory_pool_handle_t pool;
5453
size_t size;
5554

5655
// number of overlapping memory regions in the next level of map falling
@@ -198,13 +197,13 @@ umfMemoryTrackerAddAtLevel(umf_memory_tracker_handle_t hTracker, int level,
198197
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY;
199198
}
200199

201-
value->pool = pool;
202-
203200
memset(&value->props, 0, sizeof(umf_memory_properties_t));
204201
umfPoolGetMemoryProvider(pool, &value->props.provider);
205202
value->props.id = utils_atomic_increment_u64(&unique_alloc_id);
206203
value->props.base = (void *)ptr;
207204
value->props.base_size = size;
205+
value->props.pool = pool;
206+
value->props.ptr = (void *)ptr;
208207

209208
value->size = size;
210209
value->n_children = 0;
@@ -313,8 +312,8 @@ static umf_result_t umfMemoryTrackerAdd(umf_memory_tracker_handle_t hTracker,
313312
"cannot insert to the tracker value (pool=%p, ptr=%p, "
314313
"size=%zu) "
315314
"that exceeds the parent value (pool=%p, ptr=%p, size=%zu)",
316-
(void *)pool, ptr, size, (void *)rvalue->pool, (void *)rkey,
317-
(size_t)rsize);
315+
(void *)pool, ptr, size, (void *)rvalue->props.pool,
316+
(void *)rkey, (size_t)rsize);
318317
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
319318
}
320319
parent_key = rkey;
@@ -376,7 +375,8 @@ static umf_result_t umfMemoryTrackerRemove(umf_memory_tracker_handle_t hTracker,
376375

377376
LOG_DEBUG("memory region removed: tracker=%p, level=%i, pool=%p, ptr=%p, "
378377
"size=%zu",
379-
(void *)hTracker, level, (void *)value->pool, ptr, value->size);
378+
(void *)hTracker, level, (void *)value->props.pool, ptr,
379+
value->size);
380380

381381
// release the reference to the value got from critnib_remove()
382382
assert(ref_value);
@@ -388,8 +388,9 @@ static umf_result_t umfMemoryTrackerRemove(umf_memory_tracker_handle_t hTracker,
388388
LOG_DEBUG(
389389
"child #%zu removed from memory region: tracker=%p, level=%i, "
390390
"pool=%p, ptr=%p, size=%zu",
391-
n_children, (void *)hTracker, level - 1, (void *)parent_value->pool,
392-
(void *)parent_key, parent_value->size);
391+
n_children, (void *)hTracker, level - 1,
392+
(void *)parent_value->props.pool, (void *)parent_key,
393+
parent_value->size);
393394

394395
assert(ref_parent_value);
395396
assert(level >= 1);
@@ -472,18 +473,17 @@ umfMemoryTrackerRemoveIpcSegment(umf_memory_tracker_handle_t hTracker,
472473
}
473474

474475
umf_memory_pool_handle_t umfMemoryTrackerGetPool(const void *ptr) {
475-
umf_alloc_info_t allocInfo = {NULL, 0, NULL};
476-
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &allocInfo, NULL);
476+
umf_alloc_info_t allocInfo = {NULL, 0, NULL, NULL};
477+
umf_result_t ret = umfMemoryTrackerGetAllocInfo(ptr, &allocInfo);
477478
if (ret != UMF_RESULT_SUCCESS) {
478479
return NULL;
479480
}
480481

481482
return allocInfo.pool;
482483
}
483484

484-
umf_result_t
485-
umfMemoryTrackerGetAllocInfo(const void *ptr, umf_alloc_info_t *pAllocInfo,
486-
umf_memory_properties_handle_t *props) {
485+
umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
486+
umf_alloc_info_t *pAllocInfo) {
487487
assert(pAllocInfo);
488488

489489
if (ptr == NULL) {
@@ -571,12 +571,9 @@ umfMemoryTrackerGetAllocInfo(const void *ptr, umf_alloc_info_t *pAllocInfo,
571571

572572
pAllocInfo->base = (void *)top_most_key;
573573
pAllocInfo->baseSize = top_most_value->size;
574-
pAllocInfo->pool = top_most_value->pool;
574+
pAllocInfo->pool = top_most_value->props.pool;
575+
pAllocInfo->props = &top_most_value->props;
575576

576-
if (props != NULL) {
577-
*props = &top_most_value->props;
578-
}
579-
580577
assert(ref_top_most_value);
581578
critnib_release(TRACKER->alloc_segments_map[ref_level], ref_top_most_value);
582579

@@ -823,7 +820,7 @@ static umf_result_t trackingAllocationMerge(void *hProvider, void *lowPtr,
823820
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT;
824821
goto err_fatal;
825822
}
826-
if (lowValue->pool != highValue->pool) {
823+
if (lowValue->props.pool != highValue->props.pool) {
827824
LOG_FATAL("pool mismatch");
828825
ret = UMF_RESULT_ERROR_INVALID_ARGUMENT;
829826
goto err_fatal;
@@ -968,12 +965,13 @@ static void check_if_tracker_is_empty(umf_memory_tracker_handle_t hTracker,
968965

969966
while (1 == critnib_find(hTracker->alloc_segments_map[i], last_key,
970967
FIND_G, &rkey, (void **)&rvalue, &ref_value)) {
971-
if (rvalue && ((rvalue->pool == pool) || pool == NULL)) {
968+
if (rvalue && ((rvalue->props.pool == pool) || pool == NULL)) {
972969
n_items++;
973970
LOG_DEBUG(
974971
"found abandoned allocation in the tracking provider: "
975972
"pool=%p, ptr=%p, size=%zu",
976-
(void *)rvalue->pool, (void *)rkey, (size_t)rvalue->size);
973+
(void *)rvalue->props.pool, (void *)rkey,
974+
(size_t)rvalue->size);
977975
}
978976

979977
if (ref_value) {

src/provider/provider_tracking.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@ typedef struct umf_alloc_info_t {
4141
void *base;
4242
size_t baseSize;
4343
umf_memory_pool_handle_t pool;
44+
45+
umf_memory_properties_handle_t props;
4446
} umf_alloc_info_t;
4547

46-
umf_result_t
47-
umfMemoryTrackerGetAllocInfo(const void *ptr, umf_alloc_info_t *pAllocInfo,
48-
umf_memory_properties_handle_t *props_handle);
48+
umf_result_t umfMemoryTrackerGetAllocInfo(const void *ptr,
49+
umf_alloc_info_t *pAllocInfo);
4950

5051
typedef struct umf_ipc_info_t {
5152
void *base;

0 commit comments

Comments
 (0)