Skip to content

Commit 11f9117

Browse files
authored
PDisk noop scheduler (#9332)
1 parent 6bd8708 commit 11f9117

12 files changed

+345
-207
lines changed

ydb/core/blobstorage/lwtrace_probes/blobstorage_probes.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ struct TEventTypeField {
156156
PROBE(PDiskAddToScheduler, GROUPS("PDisk", "PDiskRequest"), \
157157
TYPES(TPDiskIdField, ui64, double, ui64, bool, ui64), \
158158
NAMES("pdisk", "reqId", "creationTimeSec", "owner", "isFast", "priorityClass")) \
159+
PROBE(PDiskAddToNoopScheduler, GROUPS("PDisk", "PDiskRequest"), \
160+
TYPES(TPDiskIdField, ui64, double, ui64, bool, ui64), \
161+
NAMES("pdisk", "reqId", "creationTimeSec", "owner", "isFast", "priorityClass")) \
159162
PROBE(PDiskRouteRequest, GROUPS("PDisk", "PDiskRequest"), \
160163
TYPES(TPDiskIdField, ui64, double, ui64, bool, ui64), \
161164
NAMES("pdisk", "reqId", "creationTimeSec", "owner", "isFast", "priorityClass")) \
@@ -265,11 +268,16 @@ struct TEventTypeField {
265268
NAMES("pdisk", "entireUpdateMs", "inputQueueMs", "schedulingMs", "processingMs", "waitingMs")) \
266269
PROBE(PDiskEnqueueAllDetails, GROUPS("PDisk"), \
267270
TYPES(ui64, size_t, size_t, size_t, double), \
268-
NAMES("pdisk", "initialQueueSize", "processedReqs", "pushedToForsetiReqs", "spentTimeMs")) \
271+
NAMES("pdisk", "initialQueueSize", "processedReqs", "pushedToSchedulerReqs", "spentTimeMs")) \
269272
PROBE(PDiskUpdateStarted, GROUPS("PDisk"), TYPES(ui64), NAMES("pdisk")) \
270-
PROBE(PDiskProcessLogWriteQueue, GROUPS("PDisk"), TYPES(ui64, size_t, size_t), NAMES("pdisk", "logQueueSize", "commitQueueSize")) \
271-
PROBE(PDiskProcessChunkReadQueue, GROUPS("PDisk"), TYPES(ui64, size_t), NAMES("pdisk", "queueSize")) \
272-
PROBE(PDiskProcessChunkWriteQueue, GROUPS("PDisk"), TYPES(ui64, size_t), NAMES("pdisk", "queueSize")) \
273+
PROBE(PDiskProcessLogWriteQueue, GROUPS("PDisk"), TYPES(ui64, size_t, size_t, size_t), NAMES("pdisk", "remainingLogWritesSize", "logWritesSize", "commitsSize")) \
274+
PROBE(PDiskProcessLogWriteBatch, GROUPS("PDisk"), TYPES(ui64, size_t, size_t), NAMES("pdisk", "logQueueSize", "commitQueueSize")) \
275+
PROBE(PDiskProcessChunkReadQueue, GROUPS("PDisk"), \
276+
TYPES(ui64, size_t, size_t, size_t, double), \
277+
NAMES("pdisk", "initialQueueSize", "processed", "processedBytes", "processedCostMs")) \
278+
PROBE(PDiskProcessChunkWriteQueue, GROUPS("PDisk"), \
279+
TYPES(ui64, size_t, size_t, size_t, double), \
280+
NAMES("pdisk", "initialQueueSize", "processed", "processedBytes", "processedCostMs")) \
273281
PROBE(PDiskStartWaiting, GROUPS("PDisk"), TYPES(ui64), NAMES("pdisk")) \
274282
PROBE(PDiskUpdateEnded, GROUPS("PDisk"), TYPES(ui64, float), NAMES("pdisk", "entireUpdateMs")) \
275283
PROBE(DSProxyGetEnqueue, GROUPS("DSProxy", "LWTrackStart"), TYPES(), NAMES()) \

ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_async.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ class TRealBlockDevice : public IBlockDevice {
223223
TRealBlockDevice &Device;
224224
std::shared_ptr<TPDiskCtx> &PCtx;
225225
TCountedQueueOneOne<IAsyncIoOperation*, 4 << 10> OperationsToBeSubmit;
226-
static constexpr TAtomicBase SubmitInFlightBytesMax = 1ull << 15;
226+
static constexpr TAtomicBase SubmitInFlightBytesMax = 1ull << 17;
227227
TMutex SubmitMtx;
228228
TCondVar SubmitCondVar;
229229
TAtomicBlockCounter SubmitQuitCounter;

ydb/core/blobstorage/pdisk/blobstorage_pdisk_completion_impl.cpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ void TCompletionLogWrite::Exec(TActorSystem *actorSystem) {
4242
NHPTimer::STime now = HPNow();
4343
for (auto it = LogWriteQueue.begin(); it != LogWriteQueue.end(); ++it) {
4444
TLogWrite &evLog = *(*it);
45+
evLog.Replied = true;
4546
TLogWrite *&batch = batchMap[evLog.Owner];
4647
LOG_DEBUG_S(*actorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << PDisk->PCtx->PDiskId
4748
<< " ReqId# " << evLog.ReqId.Id << " TEvLogResult Sender# " << evLog.Sender.LocalId()
@@ -98,17 +99,12 @@ void TCompletionLogWrite::Exec(TActorSystem *actorSystem) {
9899
}
99100

100101
void TCompletionLogWrite::Release(TActorSystem *actorSystem) {
101-
switch (Result) {
102-
case EIoResult::Ok:
103-
case EIoResult::Unknown:
104-
break;
105-
default:
106-
for (TLogWrite *logWrite : LogWriteQueue) {
107-
auto res = MakeHolder<TEvLogResult>(NKikimrProto::CORRUPTED, NKikimrBlobStorage::StatusIsValid,
108-
ErrorReason);
109-
actorSystem->Send(logWrite->Sender, res.Release());
110-
PDisk->Mon.WriteLog.CountResponse();
111-
}
102+
for (TLogWrite *logWrite : LogWriteQueue) {
103+
auto res = MakeHolder<TEvLogResult>(NKikimrProto::CORRUPTED, NKikimrBlobStorage::StatusIsValid,
104+
ErrorReason);
105+
logWrite->Replied = true;
106+
actorSystem->Send(logWrite->Sender, res.Release());
107+
PDisk->Mon.WriteLog.CountResponse();
112108
}
113109

114110
delete this;

ydb/core/blobstorage/pdisk/blobstorage_pdisk_config.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ struct TPDiskSchedulerConfig {
3030
ui64 LoadWeight = LoadWeightDefault;
3131
ui64 LowReadWeight = LowWeightDefault;
3232

33+
size_t MaxChunkReadsPerCycle = 16;
34+
double MaxChunkReadsDurationPerCycleMs = 0.25;
35+
size_t MaxChunkWritesPerCycle = 8;
36+
double MaxChunkWritesDurationPerCycleMs = 1;
37+
3338
TString ToString(bool isMultiline) const {
3439
const char *x = isMultiline ? "\n" : "";
3540
TStringStream str;
@@ -44,6 +49,10 @@ struct TPDiskSchedulerConfig {
4449
str << " OtherReadWeight# " << OtherReadWeight << x;
4550
str << " LoadWeight# " << LoadWeight << x;
4651
str << " LowReadWeight# " << LowReadWeight << x;
52+
str << " MaxChunkReadsPerCycle# " << MaxChunkReadsPerCycle << x;
53+
str << " MaxChunkReadsDurationPerCycleMs# " << MaxChunkReadsDurationPerCycleMs << x;
54+
str << " MaxChunkWritesPerCycle# " << MaxChunkWritesPerCycle << x;
55+
str << " MaxChunkWritesDurationPerCycleMs# " << MaxChunkWritesDurationPerCycleMs << x;
4756
str << "}" << x;
4857
return str.Str();
4958
}
@@ -156,6 +165,7 @@ struct TPDiskConfig : public TThrRefBase {
156165
NKikimrBlobStorage::TPDiskSpaceColor::E SpaceColorBorder = NKikimrBlobStorage::TPDiskSpaceColor::GREEN;
157166

158167
ui32 CompletionThreadsCount = 1;
168+
bool UseNoopScheduler = false;
159169

160170
bool MetadataOnly = false;
161171

@@ -312,6 +322,7 @@ struct TPDiskConfig : public TThrRefBase {
312322
str << " MaxMetadataMegabytes# " << MaxMetadataMegabytes << x;
313323
str << " SpaceColorBorder# " << SpaceColorBorder << x;
314324
str << " CompletionThreadsCount# " << CompletionThreadsCount << x;
325+
str << " UseNoopScheduler# " << (UseNoopScheduler ? "true" : "false") << x;
315326
str << "}";
316327
return str.Str();
317328
}
@@ -400,6 +411,10 @@ struct TPDiskConfig : public TThrRefBase {
400411
if (cfg->HasCompletionThreadsCount()) {
401412
CompletionThreadsCount = cfg->GetCompletionThreadsCount();
402413
}
414+
415+
if (cfg->HasUseNoopScheduler()) {
416+
UseNoopScheduler = cfg->GetUseNoopScheduler();
417+
}
403418
}
404419
};
405420

0 commit comments

Comments
 (0)