[FEAT MERGE] support log cache for read optimazation

Co-authored-by: HaHaJeff <jeffzhouhhh@gmail.com>
This commit is contained in:
obdev
2024-04-16 10:45:36 +00:00
committed by ob-robot
parent 5302738411
commit 49b1cfbe6b
51 changed files with 2472 additions and 172 deletions

View File

@ -37,6 +37,7 @@ ObTenantMutilAllocator::ObTenantMutilAllocator(uint64_t tenant_id)
PALF_FETCH_LOG_TASK_SIZE(sizeof(palf::FetchLogTask)),
LOG_IO_FLASHBACK_TASK_SIZE(sizeof(palf::LogIOFlashbackTask)),
LOG_IO_PURGE_THROTTLING_TASK_SIZE(sizeof(palf::LogIOPurgeThrottlingTask)),
LOG_FILL_CACHE_TASK_SIZE(sizeof(palf::LogFillCacheTask)),
clog_blk_alloc_(),
replay_log_task_blk_alloc_(REPLAY_MEM_LIMIT_THRESHOLD),
clog_compressing_blk_alloc_(CLOG_COMPRESSION_MEM_LIMIT_THRESHOLD),
@ -50,6 +51,7 @@ ObTenantMutilAllocator::ObTenantMutilAllocator(uint64_t tenant_id)
replay_log_task_alloc_(ObMemAttr(tenant_id, ObModIds::OB_LOG_REPLAY_TASK), common::OB_MALLOC_BIG_BLOCK_SIZE, replay_log_task_blk_alloc_),
log_io_flashback_task_alloc_(LOG_IO_FLASHBACK_TASK_SIZE, ObMemAttr(tenant_id, "Flashback"), choose_blk_size(LOG_IO_FLASHBACK_TASK_SIZE), clog_blk_alloc_, this),
log_io_purge_throttling_task_alloc_(LOG_IO_PURGE_THROTTLING_TASK_SIZE, ObMemAttr(tenant_id, "PurgeThrottle"), choose_blk_size(LOG_IO_PURGE_THROTTLING_TASK_SIZE), clog_blk_alloc_, this),
log_fill_cache_task_alloc_(LOG_FILL_CACHE_TASK_SIZE, ObMemAttr(tenant_id, "FillCache"), choose_blk_size(LOG_FILL_CACHE_TASK_SIZE), clog_blk_alloc_, this),
clog_compression_buf_alloc_(ObMemAttr(tenant_id, "LogComBuf"), common::OB_MALLOC_BIG_BLOCK_SIZE, clog_compressing_blk_alloc_)
{
// set_nway according to tenant's max_cpu
@ -83,6 +85,7 @@ void ObTenantMutilAllocator::destroy()
log_io_purge_throttling_task_alloc_.destroy();
palf_fetch_log_task_alloc_.destroy();
replay_log_task_alloc_.destroy();
log_fill_cache_task_alloc_.destroy();
clog_compression_buf_alloc_.destroy();
}
@ -112,6 +115,7 @@ void ObTenantMutilAllocator::try_purge()
log_io_purge_throttling_task_alloc_.purge_extra_cached_block(0);
palf_fetch_log_task_alloc_.purge_extra_cached_block(0);
replay_log_task_alloc_.purge_extra_cached_block(0);
log_fill_cache_task_alloc_.purge_extra_cached_block(0);
clog_compression_buf_alloc_.purge_extra_cached_block(0);
}
@ -327,6 +331,24 @@ void ObTenantMutilAllocator::free_log_io_purge_throttling_task(palf::LogIOPurgeT
}
}
LogFillCacheTask *ObTenantMutilAllocator::alloc_log_fill_cache_task(const int64_t palf_id, const int64_t palf_epoch)
{
LogFillCacheTask *ret_ptr = NULL;
void *ptr = log_fill_cache_task_alloc_.alloc();
if (NULL != ptr) {
ret_ptr = new (ptr) LogFillCacheTask(palf_id, palf_epoch);
}
return ret_ptr;
}
void ObTenantMutilAllocator::free_log_fill_cache_task(palf::LogFillCacheTask *ptr)
{
if (OB_LIKELY(NULL != ptr)) {
ptr->~LogFillCacheTask();
log_fill_cache_task_alloc_.free(ptr);
}
}
void ObTenantMutilAllocator::set_nway(const int32_t nway)
{

View File

@ -33,6 +33,7 @@ class LogIOFlushMetaTask;
class LogIOFlashbackTask;
class LogIOPurgeThrottlingTask;
class FetchLogTask;
class LogFillCacheTask;
}
namespace logservice
{
@ -75,6 +76,8 @@ public:
virtual void free_log_io_flashback_task(palf::LogIOFlashbackTask *ptr) = 0;
virtual palf::LogIOPurgeThrottlingTask *alloc_log_io_purge_throttling_task(const int64_t palf_id, const int64_t palf_epoch) = 0;
virtual void free_log_io_purge_throttling_task(palf::LogIOPurgeThrottlingTask *ptr) = 0;
virtual palf::LogFillCacheTask *alloc_log_fill_cache_task(const int64_t palf_id, const int64_t palf_epoch) = 0;
virtual void free_log_fill_cache_task(palf::LogFillCacheTask *ptr) = 0;
virtual void *alloc_append_compression_buf(const int64_t size) = 0;
virtual void free_append_compression_buf(void *ptr) = 0;
virtual void *alloc_replay_decompression_buf(const int64_t size) = 0;
@ -150,6 +153,9 @@ public:
void free_log_io_flashback_task(palf::LogIOFlashbackTask *ptr);
palf::LogIOPurgeThrottlingTask *alloc_log_io_purge_throttling_task(const int64_t palf_id, const int64_t palf_epoch);
void free_log_io_purge_throttling_task(palf::LogIOPurgeThrottlingTask *ptr);
palf::LogFillCacheTask *alloc_log_fill_cache_task(const int64_t palf_id, const int64_t palf_epoch);
void free_log_fill_cache_task(palf::LogFillCacheTask *ptr);
void *alloc_append_compression_buf(const int64_t size);
void free_append_compression_buf(void *ptr);
//alloc buf from replay_log_task_alloc
@ -169,6 +175,7 @@ private:
const int PALF_FETCH_LOG_TASK_SIZE;
const int LOG_IO_FLASHBACK_TASK_SIZE;
const int LOG_IO_PURGE_THROTTLING_TASK_SIZE;
const int LOG_FILL_CACHE_TASK_SIZE;
ObBlockAllocMgr clog_blk_alloc_;
ObBlockAllocMgr replay_log_task_blk_alloc_;
ObBlockAllocMgr clog_compressing_blk_alloc_;
@ -182,6 +189,7 @@ private:
ObVSliceAlloc replay_log_task_alloc_;
ObSliceAlloc log_io_flashback_task_alloc_;
ObSliceAlloc log_io_purge_throttling_task_alloc_;
ObSliceAlloc log_fill_cache_task_alloc_;
ObVSliceAlloc clog_compression_buf_alloc_;
};