diff options
| -rw-r--r-- | pkg/rpctype/rpc.go | 34 | ||||
| -rw-r--r-- | syz-manager/rpc.go | 6 | ||||
| -rw-r--r-- | syz-manager/stats.go | 2 |
3 files changed, 39 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 +} diff --git a/syz-manager/rpc.go b/syz-manager/rpc.go index 0fdaf3b46..37c548dcb 100644 --- a/syz-manager/rpc.go +++ b/syz-manager/rpc.go @@ -90,6 +90,12 @@ func startRPCServer(mgr *Manager) (*RPCServer, error) { log.Logf(0, "serving rpc on tcp://%v", s.Addr()) serv.port = s.Addr().(*net.TCPAddr).Port go s.Serve() + go func() { + for { + time.Sleep(time.Second) + mgr.stats.rpcTraffic.add(int(s.TotalBytes.Swap(0))) + } + }() return serv, nil } diff --git a/syz-manager/stats.go b/syz-manager/stats.go index 3598e66ca..0ab84746d 100644 --- a/syz-manager/stats.go +++ b/syz-manager/stats.go @@ -21,6 +21,7 @@ type Stats struct { newInputs Stat rotatedInputs Stat execTotal Stat + rpcTraffic Stat hubSendProgAdd Stat hubSendProgDel Stat hubSendRepro Stat @@ -73,6 +74,7 @@ func (stats *Stats) all() map[string]uint64 { "filtered coverage": stats.corpusCoverFiltered.get(), "signal": stats.corpusSignal.get(), "max signal": stats.maxSignal.get(), + "rpc traffic (MB)": stats.rpcTraffic.get() / 1e6, } if stats.haveHub { m["hub: send prog add"] = stats.hubSendProgAdd.get() |
