Skip to content

Commit 7e93f20

Browse files
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 repo
1 parent c280e62 commit 7e93f20

File tree

3 files changed

+4
-4
lines changed

3 files changed

+4
-4
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<!--<CodeAnalysisRuleset>$(MSBuildThisFileDirectory)Shared.ruleset</CodeAnalysisRuleset>-->
2727

2828
<ExampleRefs>local</ExampleRefs> <!-- local or nuget-->
29-
<PBGRPCLibVersion>1.0.147</PBGRPCLibVersion>
29+
<PBGRPCLibVersion>1.0.167</PBGRPCLibVersion>
3030
<GrpcDotNetVersion>2.44.0</GrpcDotNetVersion>
3131
<GoogleProtobufVersion>3.19.2</GoogleProtobufVersion>
3232
<GrpcVersion>2.44.0</GrpcVersion>

appveyor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ image: Visual Studio 2019
22

33
install:
44
- cmd: >-
5-
choco install dotnet-sdk --version 5.0.100
5+
choco install dotnet-sdk --version 6.0.201
66
77
skip_branch_with_pr: true
88
skip_tags: true

protobuf-net.Grpc.sln

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio Version 16
4-
VisualStudioVersion = 16.0.29006.145
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.2.32210.308
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "protobuf-net.Grpc", "src\protobuf-net.Grpc\protobuf-net.Grpc.csproj", "{30D0874E-DA1A-497E-A181-37739A46CF32}"
77
EndProject

0 commit comments

Comments
 (0)