[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:
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user