summaryrefslogtreecommitdiff
path: root/src/mongo/transport/service_executor.cpp
diff options
context:
space:
mode:
authorBen Caimano <ben.caimano@10gen.com>2020-11-11 20:12:55 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-12-03 20:34:08 +0000
commitab78fd25adaea0603cf9497c1acc0d88cb739b84 (patch)
treee1116636176ea926ef06eb25ae59c219293c445f /src/mongo/transport/service_executor.cpp
parenta3fa43c5f48e8e7c723b463c1f3cabd0b84c1ddb (diff)
downloadmongo-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.cpp13
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