Skip to content

perf(body): simpler custom Incoming channel - #4168

Open
seanmonstar wants to merge 1 commit into
masterfrom
sean/npppmoosuuzx
Open

perf(body): simpler custom Incoming channel#4168
seanmonstar wants to merge 1 commit into
masterfrom
sean/npppmoosuuzx

Conversation

@seanmonstar

Copy link
Copy Markdown
Member

The previous channel variant for Incoming used several individual channels to handle the various mechanisms: sending data, signaling error/abort, sending trailers, waiting for optional expect-101 polling. Each individual channel would allocate its own internal shared state in an Arc.

Now the Incoming channel variant uses a single combined implementation, putting all the required shared pieces in a single Arc. This resulted in less allocations, and less places to potentially store wakers.

The following performance improvements were noticed with microbenchmarks:

Benchmark Before After Improvement
Create/drop 400 ns 130–139 ns ~66%
Data handoff 229 ns 147–155 ns ~34%
Expect-101 wait 492 ns 267–298 ns ~40–46%

The previous channel variant for `Incoming` used several individual channels to
handle the various mechanisms: sending data, signaling error/abort, sending
trailers, waiting for optional expect-101 polling. Each individual channel would
allocate its own internal shared state in an Arc.

Now the `Incoming` channel variant uses a single combined implementation,
putting all the required shared pieces in a single Arc. This resulted in less
allocations, and less places to potentially store wakers.

The following performance improvements were noticed with microbenchmarks:

| Benchmark       | Before | After      | Improvement |
| --------------- | ------ | ---------- | ----------- |
| Create/drop     | 400 ns | 130–139 ns | ~66%        |
| Data handoff    | 229 ns | 147–155 ns | ~34%        |
| Expect-101 wait | 492 ns | 267–298 ns | ~40–46%     |
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

Successfully merging this pull request may close these issues.

1 participant