260 Commits

Author SHA1 Message Date
ede71d589c stream: fix returnBuffers race during retry (#3293)
And release the buffer after Write(), unless the buffer needs to be kept for retries.
2020-01-07 17:17:22 -08:00
642675125e codec/proto: reuse of marshal byte buffers (#3167)
Performance benchmarks can be found below. Obviously, a 8 KiB
request/response is tailored to showcase this improvement as this is
where codec buffer reuse shines, but I've run other benchmarks too (like
1-byte requests and responses) and there's no discernable impact on
performance.

We do not allow reuse of buffers when stat handlers or binlogs are
turned on. This is because those two may need access to the data and
payload even after the data has been written to the wire. In such cases,
we never return the data back to the pool.

A buffer reuse threshold of 1 KiB was determined after several
experiments. There's diminished returns when buffer reuse is enabled for
smaller messages (actually, a negative impact).

unary-networkMode_none-bufConn_false-keepalive_false-benchTime_40s-trace_false-latency_0s-kbps_0-MTU_0-maxConcurrentCalls_6-reqSize_8192B-respSize_8192B-compressor_off-channelz_false-preloader_false
               Title       Before        After Percentage
            TotalOps       839638       906223     7.93%
             SendOps            0            0      NaN%
             RecvOps            0            0      NaN%
            Bytes/op    103788.29     80592.47   -22.35%
           Allocs/op       183.33       189.30     3.27%
             ReqT/op 1375662899.20 1484755763.20     7.93%
            RespT/op 1375662899.20 1484755763.20     7.93%
            50th-Lat    238.746µs    225.019µs    -5.75%
            90th-Lat    514.253µs    456.439µs   -11.24%
            99th-Lat    711.083µs    702.466µs    -1.21%
             Avg-Lat     285.45µs    264.456µs    -7.35%
2019-12-20 09:41:23 -08:00
3180dcb49d server.go: combine defers to reduce stack usage (#3208)
Continuing the war on stacks, we can reduce the amount of stack required
per-RPC by combining defers from different components into one.

Each defer statement in process{Unary,Streaming}RPC goes on the stack
and occupies about 56-64 bytes the entire lifetime of an RPC, which
could be very long. More importantly, a call to runtime.morestack is
often required to allocate a new, larger stack when the handler
goroutine runs out of stack memory (Go's default stack size is 2 KiB).

Before:

    $ go tool objdump <binary> | grep "TEXT.*processUnaryRPC(SB)" -A 10 | grep "SUBQ.*SP"
      server.go:867   0x9132fb    4881ec80030000      SUBQ $0x380, SP
    $ go tool objdump <binary> | grep "TEXT.*processStreamingRPC(SB)" -A 10 | grep "SUBQ.*SP"
      server.go:1099  0x9151bb    4881ec68020000      SUBQ $0x268, SP

After:

    $ go tool objdump <binary> | grep "TEXT.*processUnaryRPC(SB)" -A 10 | grep "SUBQ.*SP"
      server.go:867   0x9132fb    4881ecd0020000      SUBQ $0x2d0, SP
    $ go tool objdump <binary> | grep "TEXT.*processStreamingRPC(SB)" -A 10 | grep "SUBQ.*SP"
      server.go:1116  0x9150fb    4881ecf8010000      SUBQ $0x1f8, SP

As one can observe, the processUnaryRPC's stack goes down from 0x380
bytes to 0x2d0 bytes (896 - 720 = 176 bytes) while processStreamingRPC's
stack goes down from 0x2d8 bytes to 0x1f8 bytes (616 - 504 = 112 bytes).

There are probably other things we can do here, but these are some low
hanging fruits to pick off.
2019-12-05 14:50:20 -08:00
24f6331d7e server: correct doc regarding unknown handlers and interceptors (#3195) 2019-11-19 14:30:36 -08:00
fb2e5cdc85 server: add ServerOption HeaderTableSize (#2931) 2019-10-03 16:08:31 -07:00
92635fa6bf server: avoid call to trace.FromContext and resulting allocations when tracing is disabled (#2926) 2019-07-30 10:14:53 -07:00
b5748caae7 server: populate WireLength on stats.InPayload for unary RPCs (#2932)
Fixes #2692 which was incompletely fixed by #2711.

Also adds updates stats/stat_test.go to sanity check WireLength.
2019-07-24 16:24:45 -07:00
04c71b7aac server: avoid an unnecessary allocation per-RPC for OK status (#2920) 2019-07-22 09:53:08 -07:00
59fd1f3d41 server: immediately close all connections created after GracefulStop (#2903)
Internal cleanup: replace quit/quitOnce/done/doneOnce with grpcsync.Events.
2019-07-12 13:14:19 -07:00
915d20dcdb grpc: change type of Server.conns
Change Server.conns from a map[io.Closer]bool to a map[transport.ServerTransport]bool.
2019-06-26 11:09:45 -07:00
1e6ab1e96e server: define ServerOption as interfaces (#2784)
Instead of functions. So custom server options can be made by wrapping an
EmptyServerOption.
2019-04-26 10:33:22 -07:00
f1437f7cc5 server: Improve error message when an unknown method is invoked. (#2723)
Previously only `unknown service <x>` was returned, which is misleading
when the service is known but the method is unknown.
2019-03-27 16:19:28 -07:00
9a2caafd93 client: restore remote address in traces (#2718)
The client-side traces were otherwise only showing `RPC: to <nil>`,
which is not helpful.

Also clean up construction of traceInfo and firstLine in a few places.
2019-03-27 09:52:40 -07:00
a618c37a27 server: Don't log errors on ErrConnDispatched (#2656)
ErrConnDispatched is a normal error -- we should not fill up logs with it.
2019-03-07 13:22:17 -08:00
ed70822b12 keepalive: apply minimum ping time of 10s to client and 1s to server (#2642)
* keepalive: apply minimum ping time of 10s to client and 1s to server

* review fixes
2019-02-21 13:09:37 -08:00
4cad6a6283 comment: default MaxSendMsgSize should be math.MaxInt32 instead of 4MB (#2586) 2019-01-22 10:48:59 -08:00
dfd7708d35 cleanup: use time.Until(t) instead of t.Sub(time.Now) (#2571) 2019-01-15 16:09:50 -08:00
04ea82009c cleanup: replace "x/net/context" import with "context" (#2439) 2018-11-12 13:30:41 -08:00
24638f5984 binarylog: call binary log in Client and Server (#2388)
Also includes:
 - Export `NewLoggerFromConfigString` so it can be also used when config string is specified in another way (e.g. command line flag)
 - Export `Logger` so user can install custom sink
 - Add temp file sink implementation
2018-10-31 10:21:20 -07:00
c4d3b2fa07 channelz: register sockets with meaningful refnames (#2416) 2018-10-30 16:28:48 -07:00
dfaadfecca server: handleStream() cleanup (#2352) 2018-10-15 13:27:22 -07:00
0361d80ffd server: reuse function recv() in processUnary (#2351)
This change splits recv() into two functions so it can be used by processUnary.
2018-10-08 13:55:04 -07:00
59dd9b3f19 test: add go 1.11 to travis and remove go 1.7 (#2278) 2018-08-27 13:31:20 -07:00
07ef407d99 channelz: unexport unnecessary API on grpc entities (#2257) 2018-08-06 16:02:47 -07:00
f4da7eee53 channelz: use atomic instead of mutex (#2218) 2018-08-06 11:17:12 -07:00
a344a35754 internal: remove TestingUseHandlerImpl (#2253) 2018-08-03 09:35:00 -07:00
339b6cb107 transport: eliminate StreamError; use status errors instead (#2239) 2018-07-26 10:30:58 -07:00
e193757038 internal/transport: remove some unused fields from structs (#2213)
- Flush and Authority are never read by the transport.
- Authority is used indirectly; move it to dialOptions.
- Delay is only set to false.
2018-07-13 09:56:47 -07:00
11b582728a transport: move to internal to make room for new, public transport API (#2212)
This is a breaking change, but the transport package was never intended for use outside of grpc.  Any current users that we are aware of are incorrect or have a preferred alternative.
2018-07-11 11:22:45 -07:00
264daa2be4 Set and respect HTTP/2 SETTINGS_MAX_HEADER_LIST_SIZE (#2084) 2018-07-09 11:27:58 -07:00
3ec535a269 client, server: update dial/server buffer options to support a "disable" setting (#2147) 2018-06-27 11:16:33 -07:00
7268ca41d3 channelz: stage 4 - add security and socket option info with appengine build tags (#2149) 2018-06-25 10:32:20 -07:00
b28608a9db channelz: move APIs to internal except channelz service (#2157) 2018-06-18 17:59:08 -07:00
96cefb43cf Revert " channelz: stage 4 - add security and socket option info" (#2124)
Reverts grpc/grpc-go#2098

Appengine will fail with the error below:
```
go-app-builder: Failed parsing input: parser: bad import "syscall" in google.golang.org/grpc/channelz/funcs.go from GOPATH
```

The root cause of it is in type_linux.go.
629f6bc5e5/channelz/types_linux.go (L21-L25)
2018-06-05 18:04:12 -07:00
c1a21e22a6 channelz: stage 4 - add security and socket option info (#2098) 2018-06-05 13:50:19 -07:00
d33a923190 Revert "channelz: stage 4 - add security and socket option info" (#2096)
This reverts commit 7cc2837209c4fa87008717b4e94a085820d7d779.

The PR breaks darwin builds

src/google.golang.org/grpc/channelz/types_unix.go:35:15: undefined: unix.TCPInfo
2018-05-22 15:31:57 -07:00
7cc2837209 channelz: stage 4 - add security and socket option info (#1965) 2018-05-22 13:32:02 -07:00
091a800143 split encode into three functions (#2058) 2018-05-11 13:47:10 -07:00
0bc7c3280e Revert "Less mem (#1987)" (#2049)
This reverts commit 7a8c9895074e03bc7fcff30bd561eaef4fa76dfa.
2018-05-03 11:37:59 -07:00
3592bccfd9 interop: Fix unimplemented method test (#2040)
* Don't send nil requests.

* Fix import name and get rid of condition.

* Let registered encoder deal with nil requests.

* Break encode into encode and compress.
2018-05-02 16:08:12 -07:00
f8dbc38bdc Fix "deprecated" function godoc comments to match standard formatting (#2027) 2018-05-02 08:52:49 -07:00
7a8c989507 Less mem (#1987)
* Export changes to OSS.

* First commit.

* Cherry-pick.

* Documentation.

* Post review updates.
2018-04-30 09:54:33 -07:00
fc37cf1364 server: export ServerTransportStreamFromContext for unary interceptors to control headers/trailers (#2019) 2018-04-26 17:38:15 -07:00
4166ea7dad Stage 2: Channelz metric collection (#1909) 2018-04-23 11:22:25 -07:00
7f73c863c0 Channelz: Entity Registration and Deletion (#1811) 2018-04-09 11:13:06 -07:00
2eae9d0c74 server: add grpc.Method function for extracting method from context (#1961) 2018-04-02 13:08:04 -07:00
57640c0e6f Allow storing alternate transport.ServerStream implementations in context (#1904) 2018-03-20 17:02:32 -07:00
2c2d834e8e stats: add BeginTime to stats.End (#1907) 2018-03-12 09:16:36 -07:00
9aba04495f server: Convert all non-status errors to codes.Unknown (#1881)
- convertCode utilized errors that were not allowed by the library per 9d0bc30edb/doc/statuscodes.md
- Relevant issue: #1672
2018-03-08 13:46:26 -08:00
7646b5360d transport: support stats.Handler in serverHandlerTransport (#1840) 2018-02-06 10:11:40 -08:00