From: Jeff Hostetler Date: Tue, 13 Jul 2021 17:06:21 GMT Subject: Re: [PATCH v3 24/34] t/perf/p7519: speed up test using "test-tool touch" Message-ID: In-Reply-To: <87h7hdbpgb.fsf@evledraar.gmail.com> On 7/1/21 7:09 PM, Ævar Arnfjörð Bjarmason wrote: > > On Thu, Jul 01 2021, Jeff Hostetler via GitGitGadget wrote: > >> From: Jeff Hostetler >> >> 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 >> --- >> 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. > a quick test on my Windows machine shows that test_seq 1 10000 | xargs touch takes 3.1 seconds. just a simple test_seq 1 10000 >/dev/null take 0.2 seconds. using my test-tool helper cuts that time in half. Jeff