Commit 7e93f20
authored
Grpclite fallout (#235)
* First stab at a stream-based Channel implementation
* tests; basic parsing
* server rig and logging
* starting to get server talking
* basic unary server handling
* flush buffers; correctly track frame count when writing
* working end-to-end unary?
* change header to 8 bytes; lots of evil; explore TFMs
* move things around; use buffer doubling
* yak
* getting ducks in a row
* duplex... works!?
* gates and connection factories (incomplete)
* closer on rework
* so I wrote a memory manager... it seemed like a good idea at the time
* it compiles!
* Building for all TFMs again
* debug serialize
* things aren't listening
* all tests passing
* memory cleanup
* multi-segment buffer
* push model; basic tests working again
* cleanup; check which thread is doing what
* cleanup
* fixings
* unification of stream handlers
* async executor... probably works?
* move all the things to get the memory moving in the right direction
* reader-loop on connection (pull rather than push)
* test server/rig
* get rig almost working
* encouraging numbers; twice the throughput for hello-world examples
* - fix broken rig (cancellation not being applied; client-trailers not being sent for client-streaming/duplex)
- add markdown output
| Scenario | Unary | Client-Streaming | Server-Streaming | Duplex |
| -------- | ----- | ---------------- | ---------------- | ------ |
| local | 13μs | 655ns | 525ns | 4321ns |
| managedHttp | 96μs | 11μs | 900ns | 47μs |
| managedHttps | 106μs | 9836ns | 2498ns | 60μs |
| namedPipe | 51μs | 27μs | 6199ns | 20μs |
| unmanagedHttp | 94μs | 10μs | 3249ns | 51μs |
* show results with/without output merge (dup key)
* make output easier to understand:
| Scenario | Unary | Client-Streaming | Server-Streaming | Duplex |
| -------- | ----- | ---------------- | ---------------- | ------ |
| local | 13,825ns | 683ns | 573ns | 4,370ns |
| managedHttp | 95,446ns | 8,079ns | 864ns | 48,478ns |
| managedHttps | 105,837ns | 8,992ns | 2,393ns | 58,596ns |
| namedPipeMerge | 51,510ns | 27,796ns | 5,974ns | 16,895ns |
| namedPipeVanilla | 49,678ns | 36,878ns | 5,999ns | 18,573ns |
| unmanagedHttp | 92,500ns | 10,699ns | 3,315ns | 53,459ns |
* fix glitches with buffers that cross boundaries
* Add TCP support
* nit namespaces
* TLS named-pipe test; tidy up enum prefixes
| Scenario | Unary | Client-Streaming | Server-Streaming | Duplex |
| -------- | ----- | ---------------- | ---------------- | ------ |
| local | 13,017ns | 951ns | 1,014ns | 3,749ns |
| managedHttp | 99,251ns | 7,895ns | 895ns | 45,723ns |
| managedHttps | 104,132ns | 8,595ns | 2,268ns | 57,337ns |
| namedPipeBuffer | 45,702ns | 36,827ns | 6,018ns | 15,968ns |
| namedPipeMerge | 54,785ns | 28,959ns | 5,837ns | 16,169ns |
| namedPipePassThru | 43,685ns | 38,474ns | 5,897ns | 16,091ns |
| namedPipeTls | 54,717ns | 33,944ns | 7,045ns | 18,387ns |
| tcp | 36,059ns | 4,463ns | 4,519ns | 17,431ns |
| tcpTls | 50,272ns | 5,633ns | 5,866ns | 32,751ns |
| unmanagedHttp | 93,509ns | 10,795ns | 3,420ns | 52,261ns |
* fixed output buffer glitches
| Scenario | Unary | Client-Streaming (b) | Client-Streaming (n) | Server-Streaming (b) | Server-Streaming (n) | Duplex |
| -------- | ----- | -------------------- | -------------------- | -------------------- | -------------------- | ------ |
| local | 15,681ns | 779ns | 580ns | 570ns | 772ns | 4,442ns |
| managedHttp | 99,188ns | 9,080ns | 8,963ns | 697ns | 1,035ns | 51,872ns |
| managedHttps | 115,900ns | 10,019ns | 10,067ns | 604ns | 2,513ns | 63,225ns |
| namedPipe | 43,716ns | 515ns | 474ns | 408ns | 357ns | 18,149ns |
| namedPipeTls | 50,549ns | 449ns | 427ns | 438ns | 413ns | 35,783ns |
| tcp | 39,277ns | 408ns | 376ns | 446ns | 345ns | 31,507ns |
| tcpTls | 49,995ns | 465ns | 403ns | 478ns | 386ns | 41,541ns |
| unmanagedHttp | 95,246ns | 2,553ns | 11,263ns | 3,187ns | 3,391ns | 55,510ns |
* implement out-of-band cancellation
* tidy up stream termination make the frame-write-flags be not part of the frame itself
* fix pipe reader; failed to implement pipe server on Kestrel
* fix pool buffering
| Scenario | Unary | Client-Streaming (b) | Client-Streaming (n) | Server-Streaming (b) | Server-Streaming (n) | Duplex |
| -------- | ----- | -------------------- | -------------------- | -------------------- | -------------------- | ------ |
| local | 11,109ns | 509ns | 495ns | 529ns | 431ns | 4,526ns |
| managedHttp | 104,097ns | 9,201ns | 9,444ns | 669ns | 1,004ns | 51,388ns |
| managedHttps | 112,485ns | 10,180ns | 10,316ns | 620ns | 2,550ns | 62,604ns |
| namedPipe | 43,520ns | 460ns | 401ns | 387ns | 359ns | 18,276ns |
| namedPipeTls | 51,190ns | 454ns | 429ns | 412ns | 392ns | 37,708ns |
| tcp | 41,146ns | 439ns | 425ns | 459ns | 356ns | 31,883ns |
| tcpTls | 50,170ns | 407ns | 368ns | 445ns | 363ns | 40,032ns |
| unmanagedHttp | 97,478ns | 2,580ns | 11,111ns | 3,226ns | 3,401ns | 54,399ns |
* headers/status/etc
* net472
* netfx fixes
* optimize ROS workaround
* make it easier to test combinations
* hide IsAlive
* measure concurrent performance
* yaks
* first stab at SAEA
* usage notes
* get TLS working in net472
* managed httpclient TLS tests
* don't use TcpSAEA on net6 currently; something is unhappy
* Get client certs working
* normalize tests
* add support and metrics for code-first and interceptors
* fix interceptor registration; run duplex in full-duplex mode
* refactor Bind API (moved into protobuf-net.Grpc)
* ref the rev'd protobuf-net.Grpc lib from test (and thus server/runner)
* bump
* always log Debug (for now)
* (and revert)
* parallel tests
* move grpclite to separate repo1 parent c280e62 commit 7e93f20
3 files changed
+4
-4
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
29 | | - | |
| 29 | + | |
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | | - | |
| 3 | + | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
0 commit comments