Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
internal/mod/modimports: avoid extra fs.Stat calls in AllModuleFiles
As reported by a user on a large repository with many hundreds of directories, CUE_EXPERIMENT=modules now being the default caused a sudden increase in the number of file operations being done by cmd/cue when loading packages, causing a slow-down. We can easily reproduce the issue via strace in our CUE repository, using `cue fmt ./internal/ci` as an example to load one CUE package. Where we used to only stat or open 8 cue.mod files, we now do 360: $ CUE_EXPERIMENT=modules=0 strace -f -t -e trace=file cue fmt ./internal/ci |& grep 'cue\.mod"' | wc -l 8 $ strace -f -t -e trace=file cue fmt ./internal/ci |& grep 'cue\.mod"' | wc -l 360 The culprit turned out to be AllModuleFiles; the way it needs to skip walking nested CUE modules did not fit well with the fs.WalkDir API. Using fs.ReadDir and recursive func calls instead works better: $ strace -f -t -e trace=file cue fmt ./internal/ci |& grep 'cue\.mod"' | wc -l 8 Updates #3155. Signed-off-by: Daniel Martí <mvdan@mvdan.cc> Change-Id: I32dc0c39ea795f795077feff88475d38cb324433 Reviewed-on: https://review.gerrithub.io/c/cue-lang/cue/+/1194921 Reviewed-by: Paul Jolly <paul@myitcv.io> Unity-Result: CUE porcuepine <cue.porcuepine@gmail.com> TryBot-Result: CUEcueckoo <cueckoo@cuelang.org>
- Loading branch information