aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pkg/rpctype/rpc.go34
-rw-r--r--syz-manager/rpc.go6
-rw-r--r--syz-manager/stats.go2
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()