Subject: Re: [PATCH v3 24/34] t/perf/p7519: speed up test using "test-tool touch"

From: Ævar Arnfjörð Bjarmason <[email-masked]>
Date: Fri, 02 Jul 2021 01:09:04 +0200

On Thu, Jul 01 2021, Jeff Hostetler via GitGitGadget wrote:

> From: Jeff Hostetler <[email-masked]>
>
> Change p7519 to use a single "test-tool touch" command to update
> the mtime on a series of (thousands) files instead of invoking
> thousands of commands to update a single file.
>
> This is primarily for Windows where process creation is so
> very slow and reduces the test run time by minutes.
>
> Signed-off-by: Jeff Hostetler <[email-masked]>
> ---
>  t/perf/p7519-fsmonitor.sh | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/t/perf/p7519-fsmonitor.sh b/t/perf/p7519-fsmonitor.sh
> index 5eb5044a103..f74e6014a0a 100755
> --- a/t/perf/p7519-fsmonitor.sh
> +++ b/t/perf/p7519-fsmonitor.sh
> @@ -119,10 +119,11 @@ test_expect_success "one time repo setup" '
>  	fi &&
>  
>  	mkdir 1_file 10_files 100_files 1000_files 10000_files &&
> -	for i in $(test_seq 1 10); do touch 10_files/$i; done &&
> -	for i in $(test_seq 1 100); do touch 100_files/$i; done &&
> -	for i in $(test_seq 1 1000); do touch 1000_files/$i; done &&
> -	for i in $(test_seq 1 10000); do touch 10000_files/$i; done &&
> +	test-tool touch sequence --pattern="10_files/%d" --start=1 --count=10 &&
> +	test-tool touch sequence --pattern="100_files/%d" --start=1 --count=100 &&
> +	test-tool touch sequence --pattern="1000_files/%d" --start=1 --count=1000 &&
> +	test-tool touch sequence --pattern="10000_files/%d" --start=1 --count=10000 &&
> +
>  	git add 1_file 10_files 100_files 1000_files 10000_files &&
>  	git commit -qm "Add files" &&
>  
> @@ -200,15 +201,12 @@ test_fsmonitor_suite() {
>  	# Update the mtimes on upto 100k files to make status think
>  	# that they are dirty.  For simplicity, omit any files with
>  	# LFs (i.e. anything that ls-files thinks it needs to dquote).
> -	# Then fully backslash-quote the paths to capture any
> -	# whitespace so that they pass thru xargs properly.
>  	#
>  	test_perf_w_drop_caches "status (dirty) ($DESC)" '
>  		git ls-files | \
>  			head -100000 | \
>  			grep -v \" | \
> -			sed '\''s/\(.\)/\\\1/g'\'' | \
> -			xargs test-tool chmtime -300 &&
> +			test-tool touch stdin &&
>  		git status
>  	'

Did you try to replace this with some variant of:

    test_seq 1 10000 | xargs touch

Which (depending on your xargs version) would invoke "touch" commands
with however many argv items it thinks you can handle.