tokio-postgres: buffer sockets to avoid excessive syscalls #777
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.
The current implementation forwards all read requests to the operating system through the socket causing excessive system calls. The effect is magnified when the underlying
Socket
is wrapped around a TLS implementation.This commit changes the underlying socket to be read-buffered by default with a buffer size of 16K, following the implementation of the official client.
The effect can be seen from these two
strace
captures:Before
Many sub 100 byte reads
After
16K buffered reads
This is the test program that was used to generate these traces: