diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-01-19 13:17:24 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-01-20 14:56:20 +0100 |
| commit | 823604de7e37a64ddca1f3a9b5ac2d287eb2a774 (patch) | |
| tree | c06e57abf23b408d475fa62e9182d7f5dc121ffb | |
| parent | c4f622fcb3a3d46a3802ec144eb60548629ef14e (diff) | |
syz-manager: track fuzzing time
Fuzzing time is amount of time we spent actually fuzzing.
It excludes VM creation time, crash reproducing time, etc.
On the other hand it is multipled by number of currently
fuzzing VMs, so it can be larger than uptime time.
| -rw-r--r-- | syz-manager/html.go | 1 | ||||
| -rw-r--r-- | syz-manager/manager.go | 11 |
2 files changed, 11 insertions, 1 deletions
diff --git a/syz-manager/html.go b/syz-manager/html.go index 75d34c5e5..e9a006d07 100644 --- a/syz-manager/html.go +++ b/syz-manager/html.go @@ -55,6 +55,7 @@ func (mgr *Manager) httpSummary(w http.ResponseWriter, r *http.Request) { Name: mgr.cfg.Name, } data.Stats = append(data.Stats, UIStat{Name: "uptime", Value: fmt.Sprint(time.Since(mgr.startTime) / 1e9 * 1e9)}) + data.Stats = append(data.Stats, UIStat{Name: "fuzzing", Value: fmt.Sprint(mgr.fuzzingTime / 60e9 * 60e9)}) data.Stats = append(data.Stats, UIStat{Name: "corpus", Value: fmt.Sprint(len(mgr.corpus))}) data.Stats = append(data.Stats, UIStat{Name: "triage queue", Value: fmt.Sprint(len(mgr.candidates))}) diff --git a/syz-manager/manager.go b/syz-manager/manager.go index ef079375f..ec8ac79c5 100644 --- a/syz-manager/manager.go +++ b/syz-manager/manager.go @@ -15,6 +15,7 @@ import ( "os/signal" "path/filepath" "sync" + "sync/atomic" "syscall" "time" @@ -49,10 +50,12 @@ type Manager struct { corpusDB *db.DB startTime time.Time firstConnect time.Time + fuzzingTime time.Duration stats map[string]uint64 vmStop chan bool vmChecked bool fresh bool + numFuzzing uint32 mu sync.Mutex enabledSyscalls string @@ -192,9 +195,13 @@ func RunManager(cfg *config.Config, syscalls map[int]bool) { }() go func() { - for { + for lastTime := time.Now(); ; { time.Sleep(10 * time.Second) + now := time.Now() + diff := now.Sub(lastTime) + lastTime = now mgr.mu.Lock() + mgr.fuzzingTime += diff * time.Duration(atomic.LoadUint32(&mgr.numFuzzing)) executed := mgr.stats["exec total"] crashes := mgr.stats["crashes"] mgr.mu.Unlock() @@ -381,6 +388,8 @@ func (mgr *Manager) runInstance(vmCfg *vm.Config, first bool) (*Crash, error) { // Run the fuzzer binary. start := time.Now() + atomic.AddUint32(&mgr.numFuzzing, 1) + defer atomic.AddUint32(&mgr.numFuzzing, ^uint32(0)) cmd := fmt.Sprintf("%v -executor=%v -name=%v -manager=%v -output=%v -procs=%v -leak=%v -cover=%v -sandbox=%v -debug=%v -v=%d", fuzzerBin, executorBin, vmCfg.Name, fwdAddr, mgr.cfg.Output, procs, leak, mgr.cfg.Cover, mgr.cfg.Sandbox, *flagDebug, fuzzerV) outc, errc, err := inst.Run(time.Hour, mgr.vmStop, cmd) |
