diff options
author | ilezhankin <ilezhankin@yandex-team.com> | 2024-11-12 18:36:18 +0300 |
---|---|---|
committer | ilezhankin <ilezhankin@yandex-team.com> | 2024-11-12 18:50:50 +0300 |
commit | 1620cea68d4380267df949c1a62270c7e961ba89 (patch) | |
tree | 6971203a7600eeb954a42706a16c9c1e7750e0d6 /yql/essentials/minikql/mkql_alloc.cpp | |
parent | c24e1e13cf409f09b125968fd3717ede0147c52d (diff) | |
download | ydb-1620cea68d4380267df949c1a62270c7e961ba89.tar.gz |
Improve profiling of memory allocations
1. С точки зрения кода не все сценарии в режиме PROFILE_MEMORY_ALLOCATIONS правильно работали - например, arrow аллокации. Это исправлено.
2. С точки зрения сборки не все таргеты правильно получали флаг PROFILE_MEMORY_ALLOCATIONS и в результате, например, аллокация могла быть через tcmalloc, а освобождение через механизм учёта памяти mkql аллокатора. Здесь сделана отдельная либа в yql/utils, которую нужно подключать в сборке.
commit_hash:02ceea3de95ce6a2587238552d0b834d2016333b
Diffstat (limited to 'yql/essentials/minikql/mkql_alloc.cpp')
-rw-r--r-- | yql/essentials/minikql/mkql_alloc.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/yql/essentials/minikql/mkql_alloc.cpp b/yql/essentials/minikql/mkql_alloc.cpp index aba89a4890..1708cbfde8 100644 --- a/yql/essentials/minikql/mkql_alloc.cpp +++ b/yql/essentials/minikql/mkql_alloc.cpp @@ -49,10 +49,14 @@ void TAllocState::CleanupPAllocList(TListEntry* root) { void TAllocState::CleanupArrowList(TListEntry* root) { for (auto curr = root->Right; curr != root; ) { auto next = curr->Right; +#ifdef PROFILE_MEMORY_ALLOCATIONS + free(curr); +#else auto size = ((TMkqlArrowHeader*)curr)->Size; auto fullSize = size + sizeof(TMkqlArrowHeader); ReleaseAlignedPage(curr, fullSize); curr = next; +#endif } root->InitLinks(); @@ -251,8 +255,15 @@ void* MKQLArrowAllocate(ui64 size) { if (state->EnableArrowTracking) { state->OffloadAlloc(fullSize); } - + +#ifdef PROFILE_MEMORY_ALLOCATIONS + auto ptr = malloc(fullSize); + if (!ptr) { + throw TMemoryLimitExceededException(); + } +#else auto ptr = GetAlignedPage(fullSize); +#endif auto header = (TMkqlArrowHeader*)ptr; if (state->EnableArrowTracking) { header->Entry.Link(&state->ArrowBlocksRoot); @@ -286,7 +297,11 @@ void MKQLArrowFree(const void* mem, ui64 size) { } Y_ENSURE(size == header->Size); +#ifdef PROFILE_MEMORY_ALLOCATIONS + free(header); +#else ReleaseAlignedPage(header, fullSize); +#endif } void MKQLArrowUntrack(const void* mem) { |