From 0651593f81ea3065ad4a032f0bd78a7369acd656 Mon Sep 17 00:00:00 2001 From: wuyuechuan Date: Sat, 24 Dec 2022 15:30:56 +0800 Subject: [PATCH] solve the xlog cpu cost too much for yeild waiting --- src/gausskernel/storage/access/transam/xlog.cpp | 4 ++++ src/include/access/xlog.h | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/gausskernel/storage/access/transam/xlog.cpp b/src/gausskernel/storage/access/transam/xlog.cpp index c636146a01..9eb46324c7 100755 --- a/src/gausskernel/storage/access/transam/xlog.cpp +++ b/src/gausskernel/storage/access/transam/xlog.cpp @@ -698,6 +698,10 @@ static XLogRecPtr XLogInsertRecordGroup(XLogRecData *rdata, XLogRecPtr fpw_lsn) break; } #else + if (extra_waits % FOLLOWER_TRIGER_SLEEP_LOOP_COUNT == 0 && extra_waits > 0) { + pg_usleep(FOLLOWER_SLEEP_USECS); + } + pg_read_barrier(); if (!proc->xlogGroupMember) { break; diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index a065374867..db5903d524 100755 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -256,6 +256,9 @@ struct WALInitSegLockPadded { #define CHECKPOINTPLUS_LEN (SizeOfXLogRecord + SizeOfXLogRecordDataHeaderShort + sizeof(CheckPointPlus)) #define CHECKPOINTUNDO_LEN (SizeOfXLogRecord + SizeOfXLogRecordDataHeaderShort + sizeof(CheckPointUndo)) +#define FOLLOWER_TRIGER_SLEEP_LOOP_COUNT 1000 +#define FOLLOWER_SLEEP_USECS 1000 + /* Checkpoint statistics */ typedef struct CheckpointStatsData { TimestampTz ckpt_start_t; /* start of checkpoint */ -- Gitee