Perf[MQB]: callback construction in a fixed buffer #481
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Bind
withbsl::function
has too much overhead. Even if there is a small buffer optimization when binding, copying or moving a binded function tobsl::function
(mqbi::DispatcherEvent::d_callback
field) causes allocations. It happens for every confirm going to the cluster.Profiler
Before (in red - everything related to
Bind
and conversions tod_callback
):After:
This PR was tested on a priority queue, and it saves ~10% of cluster thread processing time. But it should have even greater impact on Fanout queues.
Isolated benchmark
A simple benchmark for both approaches:
Outputs:
So functor to
bsl::function
conversion has 40x overhead in this example.perf
output for this sample code: