Skip to content

Commit 5241b9d

Browse files
authored
Rate parameter (#1994)
1 parent 28fbe05 commit 5241b9d

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

ydb/public/lib/ydb_cli/commands/ydb_workload.cpp

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ TWorkloadCommand::TWorkloadCommand(const TString& name, const std::initializer_l
5858
: TYdbCommand(name, aliases, description)
5959
, TotalSec(0)
6060
, Threads(0)
61+
, Rate(0)
6162
, ClientTimeoutMs(0)
6263
, OperationTimeoutMs(0)
6364
, CancelAfterTimeoutMs(0)
@@ -67,6 +68,7 @@ TWorkloadCommand::TWorkloadCommand(const TString& name, const std::initializer_l
6768
, QueryExecuterType()
6869
, WindowHist(60000, 2) // highestTrackableValue 60000ms = 60s, precision 2
6970
, TotalHist(60000, 2)
71+
, TotalQueries(0)
7072
, TotalRetries(0)
7173
, WindowRetryCount(0)
7274
, TotalErrors(0)
@@ -80,6 +82,17 @@ void TWorkloadCommand::Config(TConfig& config) {
8082
.DefaultValue(10).StoreResult(&TotalSec);
8183
config.Opts->AddLongOption('t', "threads", "Number of parallel threads in workload.")
8284
.DefaultValue(10).StoreResult(&Threads);
85+
86+
const auto name = Parent->Parent->Name;
87+
if (name == "kv") {
88+
config.Opts->AddLongOption("rate", "Total rate for all threads (requests per second).")
89+
.DefaultValue(0).StoreResult(&Rate);
90+
}
91+
else if (name == "stock") {
92+
config.Opts->AddLongOption("rate", "Total rate for all threads (transactions per second).")
93+
.DefaultValue(0).StoreResult(&Rate);
94+
}
95+
8396
config.Opts->AddLongOption("quiet", "Quiet mode. Doesn't print statistics each second.")
8497
.StoreTrue(&Quiet);
8598
config.Opts->AddLongOption("print-timestamp", "Print timestamp each second with statistics.")
@@ -206,10 +219,22 @@ void TWorkloadCommand::WorkerFn(int taskId, NYdbWorkload::IWorkloadQueryGenerato
206219

207220
auto opStartTime = Now();
208221
NYdbWorkload::TQueryInfoList::iterator it;
209-
for (it = queryInfoList.begin(); it != queryInfoList.end(); ++it) {
222+
for (it = queryInfoList.begin(); it != queryInfoList.end(); ) {
223+
224+
if (Rate != 0)
225+
{
226+
const ui64 expectedQueries = (Now() - StartTime).SecondsFloat() * Rate;
227+
if (TotalQueries > expectedQueries) {
228+
Sleep(TDuration::MilliSeconds(1));
229+
continue;
230+
}
231+
}
232+
210233
queryInfo = *it;
211234
auto status = runQuery();
212-
if (!status.IsSuccess()) {
235+
if (status.IsSuccess()) {
236+
TotalQueries++;
237+
} else {
213238
TotalErrors++;
214239
WindowErrors++;
215240
// if (status.GetStatus() != EStatus::ABORTED) {
@@ -222,6 +247,8 @@ void TWorkloadCommand::WorkerFn(int taskId, NYdbWorkload::IWorkloadQueryGenerato
222247
WindowRetryCount += retryCount;
223248
}
224249
retryCount = -1;
250+
251+
++it;
225252
}
226253
if (it != queryInfoList.end()) {
227254
continue;

ydb/public/lib/ydb_cli/commands/ydb_workload.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class TWorkloadCommand : public TYdbCommand {
4343

4444
size_t TotalSec;
4545
size_t Threads;
46+
ui64 Rate;
4647
unsigned int ClientTimeoutMs;
4748
unsigned int OperationTimeoutMs;
4849
unsigned int CancelAfterTimeoutMs;
@@ -60,6 +61,7 @@ class TWorkloadCommand : public TYdbCommand {
6061
NHdr::THistogram WindowHist;
6162
NHdr::THistogram TotalHist;
6263

64+
std::atomic_uint64_t TotalQueries;
6365
std::atomic_uint64_t TotalRetries;
6466
std::atomic_uint64_t WindowRetryCount;
6567
std::atomic_uint64_t TotalErrors;

0 commit comments

Comments
 (0)