diff options
author | Ben Caimano <ben.caimano@10gen.com> | 2020-11-11 20:12:55 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-12-03 20:34:08 +0000 |
commit | ab78fd25adaea0603cf9497c1acc0d88cb739b84 (patch) | |
tree | e1116636176ea926ef06eb25ae59c219293c445f /src/mongo/transport/service_executor.cpp | |
parent | a3fa43c5f48e8e7c723b463c1f3cabd0b84c1ddb (diff) | |
download | mongo-ab78fd25adaea0603cf9497c1acc0d88cb739b84.tar.gz |
SERVER-52820 Reintroduce yields before waiting for data
Diffstat (limited to 'src/mongo/transport/service_executor.cpp')
-rw-r--r-- | src/mongo/transport/service_executor.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/mongo/transport/service_executor.cpp b/src/mongo/transport/service_executor.cpp index 0a8815bdd22..18efe4c1013 100644 --- a/src/mongo/transport/service_executor.cpp +++ b/src/mongo/transport/service_executor.cpp @@ -40,6 +40,7 @@ #include "mongo/transport/service_executor_fixed.h" #include "mongo/transport/service_executor_reserved.h" #include "mongo/transport/service_executor_synchronous.h" +#include "mongo/util/processinfo.h" #include "mongo/util/synchronized_value.h" namespace mongo { @@ -253,5 +254,17 @@ ServiceExecutor* ServiceExecutorContext::getServiceExecutor() noexcept { return transport::ServiceExecutorSynchronous::get(_client->getServiceContext()); } +void ServiceExecutor::yieldIfAppropriate() const { + /* + * In perf testing we found that yielding after running a each request produced + * at 5% performance boost in microbenchmarks if the number of worker threads + * was greater than the number of available cores. + */ + static const auto cores = ProcessInfo::getNumAvailableCores(); + if (getRunningThreads() > cores) { + stdx::this_thread::yield(); + } +} + } // namespace transport } // namespace mongo |