[feature-wip] (memory tracker) (step6, End) Fix some details (#9301)

1. Fix LoadTask, ChunkAllocator, TabletMeta, Brpc, the accuracy of memory track.
2. Modified some MemTracker names, deleted some unnecessary trackers, and improved readability.
3. More powerful MemTracker debugging capabilities.
4. Avoid creating TabletColumn temporary objects and improve BE startup time by 8%.
5. Fix some other details.
This commit is contained in:
Xinyi Zou
2022-05-10 18:17:09 +08:00
committed by GitHub
parent 99b8e08a5f
commit b34ed43ec9
35 changed files with 170 additions and 123 deletions

View File

@ -145,6 +145,7 @@ Status ChunkAllocator::allocate(size_t size, Chunk* chunk, MemTracker* tracker,
} else {
_mem_tracker->transfer_to(reset_tracker, size);
}
SCOPED_SWITCH_THREAD_LOCAL_MEM_TRACKER(_mem_tracker);
// fast path: allocate from current core arena
int core_id = CpuInfo::get_current_core();
@ -177,9 +178,6 @@ Status ChunkAllocator::allocate(size_t size, Chunk* chunk, MemTracker* tracker,
SCOPED_RAW_TIMER(&cost_ns);
// allocate from system allocator
chunk->data = SystemAllocator::allocate(size);
// The allocated chunk is consumed in the tls mem tracker, we want to consume in the ChunkAllocator tracker,
// transfer memory ownership. TODO(zxy) replace with switch tls tracker
tls_ctx()->_thread_mem_tracker_mgr->mem_tracker()->transfer_to(_mem_tracker.get(), size);
}
chunk_pool_system_alloc_count->increment(1);
chunk_pool_system_alloc_cost_ns->increment(cost_ns);
@ -193,6 +191,14 @@ Status ChunkAllocator::allocate(size_t size, Chunk* chunk, MemTracker* tracker,
}
void ChunkAllocator::free(const Chunk& chunk, MemTracker* tracker) {
// The chunk's memory ownership is transferred from tls tracker to ChunkAllocator.
if (tracker) {
tracker->transfer_to(_mem_tracker.get(), chunk.size);
} else {
tls_ctx()->_thread_mem_tracker_mgr->mem_tracker()->transfer_to(_mem_tracker.get(),
chunk.size);
}
SCOPED_SWITCH_THREAD_LOCAL_MEM_TRACKER(_mem_tracker);
if (chunk.core_id == -1) {
return;
}
@ -205,12 +211,6 @@ void ChunkAllocator::free(const Chunk& chunk, MemTracker* tracker) {
{
SCOPED_RAW_TIMER(&cost_ns);
SystemAllocator::free(chunk.data, chunk.size);
// The freed chunk is released in the tls mem tracker. When the chunk was allocated,
// it was consumed in the parameter tracker, so if the tls mem tracker and the parameter
// tracker are different, transfer memory ownership.
if (tracker)
tracker->transfer_to(tls_ctx()->_thread_mem_tracker_mgr->mem_tracker().get(),
chunk.size);
}
chunk_pool_system_free_count->increment(1);
chunk_pool_system_free_cost_ns->increment(cost_ns);
@ -219,13 +219,6 @@ void ChunkAllocator::free(const Chunk& chunk, MemTracker* tracker) {
}
} while (!_reserved_bytes.compare_exchange_weak(old_reserved_bytes, new_reserved_bytes));
// The chunk's memory ownership is transferred from MemPool to ChunkAllocator.
if (tracker) {
tracker->transfer_to(_mem_tracker.get(), chunk.size);
} else {
tls_ctx()->_thread_mem_tracker_mgr->mem_tracker()->transfer_to(_mem_tracker.get(),
chunk.size);
}
_arenas[chunk.core_id]->push_free_chunk(chunk.data, chunk.size);
}