From 0e6221e714759ad3d12fb1a94b62c5c607a4dbab Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Thu, 7 Nov 2024 16:01:04 +0100 Subject: syz-manager: add pause function The pause function is useful to make manager stop consuming CPU for some time, e.g. when it runs on a shared machine, and a user wants to use CPU for something else. Previously one would need to kill the manager process and restart later to achieve this, but the restart is costly, and aborts all bug reproductions. --- pkg/manager/http.go | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'pkg') diff --git a/pkg/manager/http.go b/pkg/manager/http.go index 06fa9ca2b..05972ba3d 100644 --- a/pkg/manager/http.go +++ b/pkg/manager/http.go @@ -46,13 +46,14 @@ type CoverageInfo struct { type HTTPServer struct { // To be set before calling Serve. - Cfg *mgrconfig.Config - StartTime time.Time - CrashStore *CrashStore - DiffStore *DiffFuzzerStore - ReproLoop *ReproLoop - Pool *vm.Dispatcher - Pools map[string]*vm.Dispatcher + Cfg *mgrconfig.Config + StartTime time.Time + CrashStore *CrashStore + DiffStore *DiffFuzzerStore + ReproLoop *ReproLoop + Pool *vm.Dispatcher + Pools map[string]*vm.Dispatcher + TogglePause func(paused bool) // Can be set dynamically after calling Serve. Corpus atomic.Pointer[corpus.Corpus] @@ -62,6 +63,7 @@ type HTTPServer struct { // Internal state. expertMode bool + paused bool } func (serv *HTTPServer) Serve() { @@ -113,6 +115,13 @@ func (serv *HTTPServer) httpAction(w http.ResponseWriter, r *http.Request) { switch r.FormValue("action") { case "toggle-expert": serv.expertMode = !serv.expertMode + case "pause-unpause": + if serv.TogglePause == nil { + http.Error(w, "pause is not implemented", http.StatusNotImplemented) + return + } + serv.paused = !serv.paused + serv.TogglePause(serv.paused) } http.Redirect(w, r, r.FormValue("url"), http.StatusFound) } @@ -960,6 +969,7 @@ type UIPageHeader struct { GitRevision string GitRevisionLink string ExpertMode bool + Paused bool } func (serv *HTTPServer) pageHeader(r *http.Request, title string) UIPageHeader { @@ -979,6 +989,7 @@ func (serv *HTTPServer) pageHeader(r *http.Request, title string) UIPageHeader { GitRevision: revision, GitRevisionLink: revisionLink, ExpertMode: serv.expertMode, + Paused: serv.paused, } } @@ -1003,6 +1014,9 @@ func createPage(data any, body string) *template.Template {