From 2b876d1039e8c18ba9a1cdbaa7c9c5b6e1bc975d Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Thu, 22 Feb 2024 14:14:39 +0100 Subject: pkg/repro: check reproducibility before bisecting In many cases bisection does not seem to bring any results, but it takes quite a while to run. Let's save some time by running the whole log before the proces. --- pkg/repro/repro.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'pkg/repro') diff --git a/pkg/repro/repro.go b/pkg/repro/repro.go index 6a2eff44c..21c15fc66 100644 --- a/pkg/repro/repro.go +++ b/pkg/repro/repro.go @@ -357,8 +357,18 @@ func (ctx *context) extractProgBisect(entries []*prog.LogEntry, baseDuration tim return baseDuration + time.Duration(entries/4)*time.Second } + // First check if replaying the log may crash the kernel at all. + ret, err := ctx.testProgs(entries, duration(len(entries)), opts) + if !ret { + ctx.reproLogf(3, "replaying the whole log did not cause a kernel crash") + return nil, nil + } + if err != nil { + return nil, err + } + // Bisect the log to find multiple guilty programs. - entries, err := ctx.bisectProgs(entries, func(progs []*prog.LogEntry) (bool, error) { + entries, err = ctx.bisectProgs(entries, func(progs []*prog.LogEntry) (bool, error) { return ctx.testProgs(progs, duration(len(progs)), opts) }) if err != nil { -- cgit mrf-deployment