When a command is executed we attempt to extract a "writeConcern" field via extractWriteConcern() call which calls bsonExtractTypedField() to parse write concern from the command object (see here and here).
In the case where the command does not contain a "writeConcern" field (which is valid), an error Status object is generated by bsonExtractField() and creates an error message using str::stream, which is an expensive operation.
This came up as a bottleneck when profiling the Queries.IntNonIdFindOne mongo-perf test, with 8 threads and the --readCmd=true flag. This test performs an indexed findOne(). The extractWriteConcern() call consumed roughly 2% of the command run time.
A few thoughts on fixing:
- We could modify the bsonExtractTypedField()/bsonExtractField() path to be more efficient in the "field not found" case. I suspect extracting an optional field may be a common use case for these methods.
- We could avoid calling bsonExtractTypedField()/bsonExtractField() to confirm existence of a "writeConcern" field. We should make the "No writeConcern field exist, return the default WriteConcern" path in extractWriteConcern() as fast as possible.
- Also consider skipping WriteConcern validation for commands that don't support WriteConcern (weighing the benefits of validation vs cost once we have addressed the above).