Details
Description
Run this script:
#!/bin/bash
|
|
THREADS=$1
|
CMD=$2
|
if [ "$3" == "" ]; then
|
BENCH_SECONDS=10
|
else
|
BENCH_SECONDS="$3"
|
fi
|
|
mongo --quiet -eval 'db.foo.insert({_id:1})'
|
|
if [ $CMD == "false" ]; then
|
mongo --quiet -eval '
|
ops = [{op:"find", ns:"test.foo", query: {_id: 1}}]
|
results = benchRun({ops:ops, parallel:'$THREADS', seconds:'$BENCH_SECONDS'})
|
print(Math.round(results["totalOps/s"]))
|
'
|
else
|
mongo --quiet -eval '
|
ops = [{op:"command", command: {"find": "foo", "filter": {"_id" : 1}}, ns:"test"}]
|
results = benchRun({ops:ops, parallel:'$THREADS', seconds:'$BENCH_SECONDS'})
|
print(Math.round(results["totalOps/s"]))
|
'
|
fi
|
You get much more lock contention with the command path vs not:
benchRun.find 32 false 30
233511 ops/s
- 6.32% mongod [kernel.kallsyms] [k] _raw_spin_lock
|
- _raw_spin_lock
|
- 48.54% futex_wake
|
do_futex
|
sys_futex
|
system_call_fastpath
|
- __lll_unlock_wake
|
+ 41.15% mongo::PlanExecutor::registerExec()
|
+ 35.88% mongo::PlanExecutor::deregisterExec()
|
+ 5.40% mongo::runQuery(mongo::OperationContext*, mongo::QueryMessage&, mongo::Namesp
|
+ 5.26% mongo::AutoGetCollection::AutoGetCollection(mongo::OperationContext*, mongo::
|
+ 4.98% mongo::AutoGetCollectionForRead::~AutoGetCollectionForRead()
|
+ 2.61% mongo::getExecutorFind(mongo::OperationContext*, mongo::Collection*, mongo::N
|
+ 1.92% mongo::WiredTigerCursor::WiredTigerCursor(std::string const&, unsigned long,
|
+ 1.72% mongo::WiredTigerRecoveryUnit::~WiredTigerRecoveryUnit()
|
+ 1.09% mongo::fillOutPlannerParams(mongo::OperationContext*, mongo::Collection*, mon
|
+ 30.15% futex_wait_setup
|
+ 18.51% try_to_wake_up
|
vs:
benchRun.find 32 true 30
119839 ops/s
- 43.11% mongod [kernel.kallsyms] [k] _raw_spin_lock
|
- _raw_spin_lock
|
- 51.98% futex_wake
|
do_futex
|
sys_futex
|
system_call_fastpath
|
- __lll_unlock_wake
|
+ 23.98% mongo::ClientCursor::ClientCursor(mongo::CursorManager*, mongo::PlanExecutor
|
+ 20.36% mongo::ClientCursorPin::deleteUnderlying()
|
+ 19.67% mongo::PlanExecutor::registerExec()
|
+ 18.84% mongo::PlanExecutor::deregisterExec()
|
+ 16.71% mongo::ClientCursorPin::ClientCursorPin(mongo::CursorManager*, long long)
|
- 45.15% futex_wait_setup
|
futex_wait
|
do_futex
|
sys_futex
|
system_call_fastpath
|
- __lll_lock_wait
|
+ 22.64% mongo::ClientCursor::ClientCursor(mongo::CursorManager*, mongo::PlanExecutor
|
+ 22.05% mongo::PlanExecutor::deregisterExec()
|
+ 19.39% mongo::PlanExecutor::registerExec()
|
+ 18.94% mongo::ClientCursorPin::deleteUnderlying()
|
+ 16.70% mongo::ClientCursorPin::ClientCursorPin(mongo::CursorManager*, long long)
|
+ 2.56% try_to_wake_up
|
Contention appears to be CursorManager::_mutex.
Attachments
Issue Links
- is related to
-
SERVER-20596 Performance regression in new mongos query path (about 17% worse than 3.0)
-
- Closed
-