Details
Description
during test scalability of mongos/shard, found performance regression of mongos due to lock sleep
the traffic is YCSB
- single doc insert
- shard with {_id: hashed}
- total 7 shards, each is 3 member replica set
- writer with 64 threads
- only change mongos binary, 3.1.1/3.1.2 show lower throughput.
3.0.2 3.1.2 throughput 43451 7065
from off-cpu perf analysis
## with master 3.1.2 (c8e2c0546b30621f78cd436d96714cc064bbb8a7)
|
|
-36.26%-- futex_wait_queue_me
|
futex_wait
|
do_futex
|
sys_futex
|
system_call_fastpath
|
|
|
|--100.00%-- __lll_lock_wait
|
| |
|
| |--85.34%-- mongo::StaticShardInfo::reload()
|
| | |
|
| | |--100.00%-- mongo::Shard::findIfExists(std::string const&)
|
| | | mongo::DBClientShardResolver::chooseWriteHost(std::string const&, mongo::ConnectionString*) const
|
| | | mongo::BatchWriteExec::executeBatch(mongo::BatchedCommandRequest const&, mongo::BatchedCommandResponse*
|
| | | mongo::ClusterWriter::write(mongo::BatchedCommandRequest const&, mongo::BatchedCommandResponse*)
|
| | | |
|
| | | --100.00%-- mongo::(anonymous namespace)::ClusterWriteCmd::run(mongo::OperationContext*, std::string c
|
| | | mongo::Command::execCommandClientBasic(mongo::OperationContext*, mongo::Command*, mongo::Cli
|
| | | mongo::Command::runAgainstRegistered(char const*, mongo::BSONObj&, mongo::BSONObjBuilder&, i
|
| | | mongo::Strategy::clientCommandOp(mongo::Request&)
|
| | | mongo::Request::process(int)
|
| | | mongo::ShardedMessageHandler::process(mongo::Message&, mongo::AbstractMessagingPort*, mongo:
|
| | | mongo::PortMessageServer::handleIncomingMsg(void*)
|
| | | start_thread
|
| | --0.00%-- [...]
|
| |
|
| |--14.42%-- mongo::Shard::findIfExists(std::string const&)
|
| | mongo::DBClientShardResolver::chooseWriteHost(std::string const&, mongo::ConnectionString*) const
|
| | mongo::BatchWriteExec::executeBatch(mongo::BatchedCommandRequest const&, mongo::BatchedCommandResponse*)
|
| | mongo::ClusterWriter::write(mongo::BatchedCommandRequest const&, mongo::BatchedCommandResponse*)
|
| | |
|
| | --100.00%-- mongo::(anonymous namespace)::ClusterWriteCmd::run(mongo::OperationContext*, std::string const&, mong
|
| | mongo::Command::execCommandClientBasic(mongo::OperationContext*, mongo::Command*, mongo::ClientBasic&,
|
| | mongo::Command::runAgainstRegistered(char const*, mongo::BSONObj&, mongo::BSONObjBuilder&, int)
|
| | mongo::Strategy::clientCommandOp(mongo::Request&)
|
| | mongo::Request::process(int)
|
| | mongo::ShardedMessageHandler::process(mongo::Message&, mongo::AbstractMessagingPort*, mongo::LastError*
|
| | mongo::PortMessageServer::handleIncomingMsg(void*)
|
| | start_thread
|
| --0.24%-- [...]
|
--0.00%-- [...]
|