aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/minikql/mkql_alloc.cpp
diff options
context:
space:
mode:
authorilezhankin <ilezhankin@yandex-team.com>2024-11-12 18:36:18 +0300
committerilezhankin <ilezhankin@yandex-team.com>2024-11-12 18:50:50 +0300
commit1620cea68d4380267df949c1a62270c7e961ba89 (patch)
tree6971203a7600eeb954a42706a16c9c1e7750e0d6 /yql/essentials/minikql/mkql_alloc.cpp
parentc24e1e13cf409f09b125968fd3717ede0147c52d (diff)
downloadydb-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.cpp17
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) {