Eli Zaretskii writes: >> Cc: Glenn Morris , dmitry@gutov.dev >> From: Spencer Baugh >> Date: Tue, 21 May 2024 10:35:07 -0400 >> >> grep.el prefers to run "find" and "xargs grep" in a pipeline, >> which means that "find" can continue searching the filesystem >> while "xargs grep" searches files. If find and xargs don't >> support the flags required for this behavior, grep.el will fall >> back to using the -exec flags to "find", which meant "find" will >> wait for each "grep" process to complete before continuing to >> search the filesystem tree. This behavior is controlled by >> grep-find-use-xargs; `gnu' produces the pipeline and `exec' is >> the slower fallback. >> >> In f3ca7378c1336b3ff98ecb5a99a98c7b2eceece9, the `exec-plus' >> option was added for grep-find-use-xargs, which improves on >> `exec' by running one "grep" process to search multiple files, >> which `gnu' (by using xargs) already did. However, the change >> erroneously added the `exec-plus' case before the `gnu' case in >> the autodetection code in grep-compute-defaults, so `exec-plus' >> would be used even if `gnu' was supported. >> >> This change just swaps the two cases, so the faster `gnu' option >> is once again used in preference to `exec-plus'. In my >> benchmarking on a large repository, this provides a ~40% >> speedup. > > With how many files did you measure the 40% speedup? 700k > Can you show the performance with much fewer and much more files than > what you used? Much more is maybe hard, but much fewer is easy: with 212 files (a subset of the original directory I searched), there's no performance change. > I suspect that the effect depends on that. (It also depends on the >system limit on the number of files and the length of the command line >that xargs can use.) The argument about 'find' waiting is no longer >relevant with 'exec-plus', since in most cases there will be just one >invocation of 'grep'. True, it only matters when the directory tree contains more files than can be passed to a single invocation of grep. > In any case, please modify the patch so that 'exec-plus' is still > preferred on MS-Windows (because most Windows ports of xargs are IME > abysmally buggy, so better avoided as much as possible). > > A comment there with the justification of the order will also be > appreciated. Done, attached.