diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-03-19 13:25:24 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2024-03-19 13:42:28 +0000 |
| commit | f51578614c22875edddf3d0af93e164915ecf751 (patch) | |
| tree | 0b2274827983e76dd9d8aa5da1cd4b5626aa4c1f /pkg | |
| parent | e104824c06ba54122c1d17b5b26dd21c57e427b6 (diff) | |
pkg/rpc: measure total RPC traffic
Measure and display the total RPC communication traffic.
It will help better evaluate #4579.
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/rpctype/rpc.go | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/pkg/rpctype/rpc.go b/pkg/rpctype/rpc.go index 6cf878543..4bd0a17d0 100644 --- a/pkg/rpctype/rpc.go +++ b/pkg/rpctype/rpc.go @@ -10,14 +10,16 @@ import ( "net" "net/rpc" "os" + "sync/atomic" "time" "github.com/google/syzkaller/pkg/log" ) type RPCServer struct { - ln net.Listener - s *rpc.Server + ln net.Listener + s *rpc.Server + TotalBytes atomic.Uint64 } func NewRPCServer(addr, name string, receiver interface{}) (*RPCServer, error) { @@ -44,7 +46,7 @@ func (serv *RPCServer) Serve() { continue } setupKeepAlive(conn, time.Minute) - go serv.s.ServeConn(newFlateConn(conn)) + go serv.s.ServeConn(newFlateConn(newCountedConn(serv, conn))) } } @@ -160,3 +162,29 @@ func (fc *flateConn) Close() error { } return err0 } + +// countedConn wraps net.Conn to record the transferred bytes. +type countedConn struct { + io.ReadWriteCloser + server *RPCServer +} + +func newCountedConn(server *RPCServer, + conn io.ReadWriteCloser) io.ReadWriteCloser { + return &countedConn{ + ReadWriteCloser: conn, + server: server, + } +} + +func (cc countedConn) Read(p []byte) (n int, err error) { + n, err = cc.ReadWriteCloser.Read(p) + cc.server.TotalBytes.Add(uint64(n)) + return +} + +func (cc countedConn) Write(b []byte) (n int, err error) { + n, err = cc.ReadWriteCloser.Write(b) + cc.server.TotalBytes.Add(uint64(n)) + return +} |
