[FEAT MERGE] implement of log disk writing throttling

This commit is contained in:
obdev
2023-05-02 01:45:12 +00:00
committed by ob-robot
parent 3ae36f5774
commit 8094743d24
57 changed files with 3492 additions and 216 deletions

View File

@ -34,6 +34,7 @@ ObTenantMutilAllocator::ObTenantMutilAllocator(uint64_t tenant_id)
LOG_IO_TRUNCATE_PREFIX_BLOCKS_TASK_SIZE(sizeof(palf::LogIOTruncatePrefixBlocksTask)),
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)),
clog_blk_alloc_(),
common_blk_alloc_(),
unlimited_blk_alloc_(),
@ -45,7 +46,8 @@ ObTenantMutilAllocator::ObTenantMutilAllocator(uint64_t tenant_id)
log_io_truncate_prefix_blocks_task_alloc_(LOG_IO_TRUNCATE_PREFIX_BLOCKS_TASK_SIZE, ObMemAttr(tenant_id, "FlushMeta"), choose_blk_size(LOG_IO_TRUNCATE_PREFIX_BLOCKS_TASK_SIZE), clog_blk_alloc_, this),
palf_fetch_log_task_alloc_(PALF_FETCH_LOG_TASK_SIZE, ObMemAttr(tenant_id, ObModIds::OB_FETCH_LOG_TASK), choose_blk_size(PALF_FETCH_LOG_TASK_SIZE), clog_blk_alloc_, this),
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_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)
{
// set_nway according to tenant's max_cpu
double min_cpu = 0;
@ -81,6 +83,7 @@ void ObTenantMutilAllocator::try_purge()
log_io_flush_meta_task_alloc_.purge_extra_cached_block(0);
log_io_truncate_prefix_blocks_task_alloc_.purge_extra_cached_block(0);
log_io_flashback_task_alloc_.purge_extra_cached_block(0);
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);
}
@ -258,6 +261,25 @@ void ObTenantMutilAllocator::free_log_io_flashback_task(palf::LogIOFlashbackTask
}
}
LogIOPurgeThrottlingTask *ObTenantMutilAllocator::alloc_log_io_purge_throttling_task(const int64_t palf_id, const int64_t palf_epoch)
{
LogIOPurgeThrottlingTask *ret_ptr = NULL;
void *ptr = log_io_purge_throttling_task_alloc_.alloc();
if (NULL != ptr) {
ret_ptr = new(ptr)LogIOPurgeThrottlingTask(palf_id, palf_epoch);
}
return ret_ptr;
}
void ObTenantMutilAllocator::free_log_io_purge_throttling_task(palf::LogIOPurgeThrottlingTask *ptr)
{
if (OB_LIKELY(NULL != ptr)) {
ptr->~LogIOPurgeThrottlingTask();
log_io_purge_throttling_task_alloc_.free(ptr);
}
}
void ObTenantMutilAllocator::set_nway(const int32_t nway)
{
if (nway > 0) {

View File

@ -30,6 +30,7 @@ class LogIOFlushMetaTask;
class LogIOTruncatePrefixBlocksTask;
class LogIOFlushMetaTask;
class LogIOFlashbackTask;
class LogIOPurgeThrottlingTask;
class FetchLogTask;
}
namespace logservice
@ -69,6 +70,8 @@ public:
virtual void free_replay_log_buf(void *ptr) = 0;
virtual palf::LogIOFlashbackTask *alloc_log_io_flashback_task(const int64_t palf_id, const int64_t palf_epoch) = 0;
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;
TO_STRING_KV(K_(flying_log_task), K_(flying_meta_task));
protected:
@ -129,6 +132,8 @@ public:
void free_replay_log_buf(void *ptr);
palf::LogIOFlashbackTask *alloc_log_io_flashback_task(const int64_t palf_id, const int64_t palf_epoch);
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);
private:
uint64_t tenant_id_ CACHE_ALIGNED;
@ -140,6 +145,7 @@ private:
const int LOG_IO_TRUNCATE_PREFIX_BLOCKS_TASK_SIZE;
const int PALF_FETCH_LOG_TASK_SIZE;
const int LOG_IO_FLASHBACK_TASK_SIZE;
const int LOG_IO_PURGE_THROTTLING_TASK_SIZE;
ObBlockAllocMgr clog_blk_alloc_;
ObBlockAllocMgr common_blk_alloc_;
ObBlockAllocMgr unlimited_blk_alloc_;
@ -151,7 +157,8 @@ private:
ObSliceAlloc log_io_truncate_prefix_blocks_task_alloc_;
ObSliceAlloc palf_fetch_log_task_alloc_;
ObVSliceAlloc replay_log_task_alloc_;
ObSliceAlloc log_io_flashback_task_alloc_;;
ObSliceAlloc log_io_flashback_task_alloc_;
ObSliceAlloc log_io_purge_throttling_task_alloc_;
};
} // end of namespace common