Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Need to debounce pending writes into batches #6

Open
Aaronontheweb opened this issue Feb 23, 2022 · 1 comment
Open

Need to debounce pending writes into batches #6

Aaronontheweb opened this issue Feb 23, 2022 · 1 comment

Comments

@Aaronontheweb
Copy link
Member

The initial performance numbers were about 1/5-1/6 of what DotNetty can do, and one of the reasons why I believe this is the case is that gRPC performs a flush on each write to the stream - and you're required to wait for that flush to complete prior to sending the next message. Thus we have a flow control problem that eats up an enormous amount of CPU and destroys throughput.

We need to do what we did in DotNetty a long time ago and add something similar to our https://github.com/akkadotnet/akka.net/blob/dev/src/core/Akka.Remote/Transport/DotNetty/BatchWriter.cs - which is able to group pending writes together into a continuous (but frame-length encoded) chunk that gets flushed as soon as the transport is ready again.

I think we can do this by simply modifying our Protobuf message definitions to contain arrays of ByteString rather than a single payload - and we can use semantics similar to what the BatchWriter does.

@Aaronontheweb
Copy link
Member Author

Resolved mostly via #7

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant