From 1cc680471dc68c265d7dd55f80ef7a1de48fa63f Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Thu, 12 Dec 2024 15:02:40 +0100 Subject: pkg/clangtool: cache combined output Instead of caching output for each file separately, cache total combined output in a single file. Caching output for each file is not useful in practice, I either use everything cached, or regenerate whole cache. Caching combined output is much more efficient. With function info there are lots of duplication across individual output files. E.g. I am getting 6GB cache for individual files, and only 60MB for the combined cache. Also change how caching works. Remove the flag and always use the cache if it exists. It's much more convinient and safer to use (accidentially not using the cache). The cache file can be removed to force regeneration. --- tools/syz-declextract/declextract.go | 15 ++++++--------- tools/syz-declextract/declextract_test.go | 9 ++++----- 2 files changed, 10 insertions(+), 14 deletions(-) (limited to 'tools') diff --git a/tools/syz-declextract/declextract.go b/tools/syz-declextract/declextract.go index 5fe1edf52..ab8eac92b 100644 --- a/tools/syz-declextract/declextract.go +++ b/tools/syz-declextract/declextract.go @@ -34,10 +34,8 @@ var target = targets.Get(targets.Linux, targets.AMD64) func main() { var ( - flagConfig = flag.String("config", "", "manager config file") - flagBinary = flag.String("binary", "syz-declextract", "path to syz-declextract binary") - flagCacheExtract = flag.Bool("cache-extract", false, "use cached extract results if present"+ - " (cached in manager.workdir/declextract.cache)") + flagConfig = flag.String("config", "", "manager config file") + flagBinary = flag.String("binary", "syz-declextract", "path to syz-declextract binary") flagCacheProbe = flag.Bool("cache-probe", false, "use cached probe results if present"+ " (cached in manager.workdir/interfaces.json)") ) @@ -51,11 +49,10 @@ func main() { tool.Failf("kernel probing failed: %v", err) } if err := run(filepath.FromSlash("sys/linux/auto.txt"), probeInfo, &clangtool.Config{ - ToolBin: *flagBinary, - KernelSrc: cfg.KernelSrc, - KernelObj: cfg.KernelObj, - CacheDir: filepath.Join(cfg.Workdir, "declextract.cache"), - ReuseCache: *flagCacheExtract, + ToolBin: *flagBinary, + KernelSrc: cfg.KernelSrc, + KernelObj: cfg.KernelObj, + CacheFile: filepath.Join(cfg.Workdir, "declextract.cache"), }); err != nil { tool.Fail(err) } diff --git a/tools/syz-declextract/declextract_test.go b/tools/syz-declextract/declextract_test.go index e6f8da464..6d0f12039 100644 --- a/tools/syz-declextract/declextract_test.go +++ b/tools/syz-declextract/declextract_test.go @@ -129,11 +129,10 @@ func testEachFile(t *testing.T, fn func(t *testing.T, cfg *clangtool.Config, fil t.Fatal(err) } cfg := &clangtool.Config{ - ToolBin: *flagBin, - KernelSrc: testdata, - KernelObj: buildDir, - CacheDir: buildDir, - ReuseCache: true, + ToolBin: *flagBin, + KernelSrc: testdata, + KernelObj: buildDir, + CacheFile: filepath.Join(buildDir, filepath.Base(file)+".json"), } fn(t, cfg, file) }) -- cgit mrf-deployment