summaryrefslogtreecommitdiff
path: root/src/mongo/util
diff options
context:
space:
mode:
authorJordi Olivares Provencio <jordi.olivares-provencio@mongodb.com>2022-08-18 15:30:37 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-08-18 16:57:38 +0000
commita69ead6192c05bc49330dc868bbe6e08f0f652cf (patch)
treeff4cdbdbf659371eb39387cc01b47ee8fdb85fd1 /src/mongo/util
parent2093127e8f06b3ba98ccc1f77eae01d822f1963e (diff)
downloadmongo-a69ead6192c05bc49330dc868bbe6e08f0f652cf.tar.gz
SERVER-68893 Remove unnecessary TicketHolder benchmarks
Diffstat (limited to 'src/mongo/util')
-rw-r--r--src/mongo/util/concurrency/ticketholder_bm.cpp186
1 files changed, 12 insertions, 174 deletions
diff --git a/src/mongo/util/concurrency/ticketholder_bm.cpp b/src/mongo/util/concurrency/ticketholder_bm.cpp
index 03918822930..82121375d8d 100644
--- a/src/mongo/util/concurrency/ticketholder_bm.cpp
+++ b/src/mongo/util/concurrency/ticketholder_bm.cpp
@@ -42,7 +42,7 @@ namespace mongo {
namespace {
static int kTickets = 128;
-static int kThreadMin = 8;
+static int kThreadMin = 16;
static int kThreadMax = 1024;
static TicketHolder::WaitMode waitMode = TicketHolder::WaitMode::kUninterruptible;
@@ -73,175 +73,6 @@ static stdx::condition_variable isReadyCv;
static bool isReady = false;
template <class TicketHolderImpl>
-static void BM_tryAcquire(benchmark::State& state) {
- static std::unique_ptr<TicketHolderFixture<TicketHolderImpl>> readTicketHolder;
- static std::unique_ptr<TicketHolderFixture<TicketHolderImpl>> writeTicketHolder;
- static ServiceContext::UniqueServiceContext serviceContext;
- {
- stdx::unique_lock lk(isReadyMutex);
- if (state.thread_index == 0) {
- serviceContext = ServiceContext::make();
- serviceContext->setTickSource(std::make_unique<TickSourceMock<Microseconds>>());
- serviceContext->registerClientObserver(std::make_unique<LockerNoopClientObserver>());
- readTicketHolder = std::make_unique<TicketHolderFixture<TicketHolderImpl>>(
- state.threads, serviceContext.get());
- writeTicketHolder = std::make_unique<TicketHolderFixture<TicketHolderImpl>>(
- state.threads, serviceContext.get());
- isReady = true;
- isReadyCv.notify_all();
- } else {
- isReadyCv.wait(lk, [&] { return isReady; });
- }
- }
- auto mode = (state.thread_index % 2) == 0 ? MODE_IS : MODE_IX;
- double attempted = 0, acquired = 0;
- TicketHolderFixture<TicketHolderImpl>* fixture;
- if constexpr (std::is_base_of_v<SchedulingTicketHolder, TicketHolderImpl>) {
- fixture = readTicketHolder.get();
- } else {
- fixture = (mode == MODE_IS ? readTicketHolder : writeTicketHolder).get();
- }
- for (auto _ : state) {
- AdmissionContext admCtx;
- admCtx.setLockMode(mode);
- auto ticket = fixture->ticketHolder->tryAcquire(&admCtx);
- state.PauseTiming();
- sleepmicros(1);
- attempted++;
- if (ticket) {
- acquired++;
- }
- ticket.reset();
- state.ResumeTiming();
- }
- state.counters["Attempted"] = attempted;
- state.counters["Acquired"] = acquired;
- if (state.thread_index == 0) {
- readTicketHolder.reset();
- writeTicketHolder.reset();
- serviceContext.reset();
- isReady = false;
- }
-}
-
-BENCHMARK_TEMPLATE(BM_tryAcquire, SemaphoreTicketHolder)->ThreadRange(kThreadMin, kThreadMax);
-
-BENCHMARK_TEMPLATE(BM_tryAcquire, FifoTicketHolder)->ThreadRange(kThreadMin, kThreadMax);
-
-template <class TicketHolderImpl>
-void BM_acquire(benchmark::State& state) {
- static std::unique_ptr<TicketHolderFixture<TicketHolderImpl>> readTicketHolder;
- static std::unique_ptr<TicketHolderFixture<TicketHolderImpl>> writeTicketHolder;
- static ServiceContext::UniqueServiceContext serviceContext;
- {
- stdx::unique_lock lk(isReadyMutex);
- if (state.thread_index == 0) {
- serviceContext = ServiceContext::make();
- serviceContext->setTickSource(std::make_unique<TickSourceMock<Microseconds>>());
- serviceContext->registerClientObserver(std::make_unique<LockerNoopClientObserver>());
- readTicketHolder = std::make_unique<TicketHolderFixture<TicketHolderImpl>>(
- state.threads, serviceContext.get());
- writeTicketHolder = std::make_unique<TicketHolderFixture<TicketHolderImpl>>(
- state.threads, serviceContext.get());
- isReady = true;
- isReadyCv.notify_all();
- } else {
- isReadyCv.wait(lk, [&] { return isReady; });
- }
- }
- double acquired = 0;
- auto mode = (state.thread_index % 2) == 0 ? MODE_IS : MODE_IX;
- TicketHolderFixture<TicketHolderImpl>* fixture;
- if constexpr (std::is_base_of_v<SchedulingTicketHolder, TicketHolderImpl>) {
- fixture = readTicketHolder.get();
- } else {
- fixture = (mode == MODE_IS ? readTicketHolder : writeTicketHolder).get();
- }
- for (auto _ : state) {
- AdmissionContext admCtx;
- admCtx.setLockMode(mode);
- auto opCtx = fixture->opCtxs[state.thread_index].get();
- {
- auto ticket = fixture->ticketHolder->waitForTicket(opCtx, &admCtx, waitMode);
- state.PauseTiming();
- sleepmicros(1);
- }
- acquired++;
- state.ResumeTiming();
- }
- state.counters["Acquired"] = benchmark::Counter(acquired, benchmark::Counter::kIsRate);
- state.counters["AcquiredPerThread"] =
- benchmark::Counter(acquired, benchmark::Counter::kAvgThreadsRate);
- if (state.thread_index == 0) {
- readTicketHolder.reset();
- writeTicketHolder.reset();
- serviceContext.reset();
- isReady = false;
- }
-}
-
-BENCHMARK_TEMPLATE(BM_acquire, SemaphoreTicketHolder)->ThreadRange(kThreadMin, kThreadMax);
-
-BENCHMARK_TEMPLATE(BM_acquire, FifoTicketHolder)->ThreadRange(kThreadMin, kThreadMax);
-
-template <class TicketHolderImpl>
-void BM_release(benchmark::State& state) {
- static std::unique_ptr<TicketHolderFixture<TicketHolderImpl>> readTicketHolder;
- static std::unique_ptr<TicketHolderFixture<TicketHolderImpl>> writeTicketHolder;
- static ServiceContext::UniqueServiceContext serviceContext;
- {
- stdx::unique_lock lk(isReadyMutex);
- if (state.thread_index == 0) {
- serviceContext = ServiceContext::make();
- serviceContext->setTickSource(std::make_unique<TickSourceMock<Microseconds>>());
- serviceContext->registerClientObserver(std::make_unique<LockerNoopClientObserver>());
- readTicketHolder = std::make_unique<TicketHolderFixture<TicketHolderImpl>>(
- state.threads, serviceContext.get());
- writeTicketHolder = std::make_unique<TicketHolderFixture<TicketHolderImpl>>(
- state.threads, serviceContext.get());
- isReady = true;
- isReadyCv.notify_all();
- } else {
- isReadyCv.wait(lk, [&] { return isReady; });
- }
- }
- double acquired = 0;
- auto mode = (state.thread_index % 2) == 0 ? MODE_IS : MODE_IX;
- TicketHolderFixture<TicketHolderImpl>* fixture;
- if constexpr (std::is_base_of_v<SchedulingTicketHolder, TicketHolderImpl>) {
- fixture = readTicketHolder;
- } else {
- fixture = (mode == MODE_IS ? readTicketHolder : writeTicketHolder).get();
- }
- for (auto _ : state) {
- AdmissionContext admCtx;
- admCtx.setLockMode(mode);
- auto opCtx = fixture->opCtxs[state.thread_index].get();
- state.PauseTiming();
- {
- auto ticket = fixture->ticketHolder->waitForTicket(opCtx, &admCtx, waitMode);
- sleepmicros(1);
- state.ResumeTiming();
- }
- acquired++;
- }
- state.counters["Acquired"] = benchmark::Counter(acquired, benchmark::Counter::kIsRate);
- state.counters["AcquiredPerThread"] =
- benchmark::Counter(acquired, benchmark::Counter::kAvgThreadsRate);
- if (state.thread_index == 0) {
- readTicketHolder.reset();
- writeTicketHolder.reset();
- serviceContext.reset();
- isReady = false;
- }
-}
-
-BENCHMARK_TEMPLATE(BM_release, SemaphoreTicketHolder)->ThreadRange(kThreadMin, kThreadMax);
-
-BENCHMARK_TEMPLATE(BM_release, FifoTicketHolder)->ThreadRange(kThreadMin, kThreadMax);
-
-
-template <class TicketHolderImpl>
void BM_acquireAndRelease(benchmark::State& state) {
static std::unique_ptr<TicketHolderFixture<TicketHolderImpl>> readTicketHolder;
static std::unique_ptr<TicketHolderFixture<TicketHolderImpl>> writeTicketHolder;
@@ -278,9 +109,9 @@ void BM_acquireAndRelease(benchmark::State& state) {
auto ticket = fixture->ticketHolder->waitForTicket(opCtx, &admCtx, waitMode);
state.PauseTiming();
sleepmicros(1);
+ acquired++;
state.ResumeTiming();
}
- acquired++;
}
state.counters["Acquired"] = benchmark::Counter(acquired, benchmark::Counter::kIsRate);
state.counters["AcquiredPerThread"] =
@@ -294,12 +125,19 @@ void BM_acquireAndRelease(benchmark::State& state) {
}
BENCHMARK_TEMPLATE(BM_acquireAndRelease, SemaphoreTicketHolder)
- ->ThreadRange(kThreadMin, kThreadMax);
+ ->Threads(kThreadMin)
+ ->Threads(kTickets)
+ ->Threads(kThreadMax);
-BENCHMARK_TEMPLATE(BM_acquireAndRelease, FifoTicketHolder)->ThreadRange(kThreadMin, kThreadMax);
+BENCHMARK_TEMPLATE(BM_acquireAndRelease, FifoTicketHolder)
+ ->Threads(kThreadMin)
+ ->Threads(kTickets)
+ ->Threads(kThreadMax);
BENCHMARK_TEMPLATE(BM_acquireAndRelease, StochasticTicketHolder)
- ->ThreadRange(kThreadMin, kThreadMax);
+ ->Threads(kThreadMin)
+ ->Threads(kTickets)
+ ->Threads(kThreadMax);
} // namespace
} // namespace mongo