Optimize IO thread offload for modified argv #1360
Open
+83
−44
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.
Improve expired commands performance with IO threads
Background
In our IO threads architecture, IO threads allocate client argv's and later when we free it after processCommand we offload its free to the IO threads.
With jemalloc, it's crucial that the same thread that allocates memory also frees it.
For some commands we modify the client's argv in the main thread during command processing (for example in
SET EX
command we rewrite the command to use absolute time for replication propagation).Current issues
in
c->original_argv
. However, we're currently:c->original_argv
points to new array with oldobjects, while
c->argv
has old array with new objects, making memory free management complicated.Changes
Performance Impact
Benchmark with
SET EX
commands (650 clients, 512 byte value, 8 IO threads):Representing a ~15% performance improvement due to more efficient memory handling.