Git development
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: Jeff King <peff@peff.net>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
	Johannes Schindelin <Johannes.Schindelin@gmx.de>
Subject: Re: [PATCH 3/9] t4141: fix inefficient use of dd(1)
Date: Fri, 3 Jul 2026 07:42:00 +0200	[thread overview]
Message-ID: <akdLqNHW3pGThQat@pks.im> (raw)
In-Reply-To: <20260702211614.GB2051171@coredump.intra.peff.net>

On Thu, Jul 02, 2026 at 05:16:14PM -0400, Jeff King wrote:
> On Thu, Jul 02, 2026 at 02:00:56PM +0200, Patrick Steinhardt wrote:
> 
> > This test setup is extremely expensive, as `test_copy_bytes` is
> > implemented via `dd ibs=1 count="$1"`, which copies data one byte at a
> > time. So as we write 1GB of data, we end up doing 1 billion reads and
> > writes. This naturally takes a while: it takes 6 minutes on my system,
> > and around 40 minutes in some CI jobs!
> > 
> > We can do much better though, as genzeros already knows to handle an
> > optional limit of how much data it is supposed to write, which allows us
> > to remove the call to `test_copy_bytes`. Furthermore, it has already
> > been optimized to generate the data fast.
> 
> Seems like a good fix for this case, where we can skip the extra process
> entirely.
> 
> It feels like test_copy_bytes should be able to do much better in
> general. The obvious thing to reach for is "head -c", but the function
> was originally added because that wasn't portable. The "-c" option is
> not in POSIX, though the original comment claims IRIX was the problem,
> so I wonder if "head -c" is de facto portable these days.

An alternative could be to implement a simple helper as part of our
test-tool. But I doubt it's really worth it: almost all callers only
want to copy a small number of bytes. The only exception seems to be
t0021, where we copy up to 65kB. But that whole test suite still only
takes ~3 seconds, so optimizing that feels like wasted time to me.

Patrick

  reply	other threads:[~2026-07-03  5:42 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-02 12:00 [PATCH 0/9] t: fixes and improvements for GIT_TEST_LONG Patrick Steinhardt
2026-07-02 12:00 ` [PATCH 1/9] README: add GitLab CI badge to make it more discoverable Patrick Steinhardt
2026-07-02 12:00 ` [PATCH 2/9] t0021: skip EXPENSIVE test that is broken without SIZE_T_IS_32BIT Patrick Steinhardt
2026-07-02 12:00 ` [PATCH 3/9] t4141: fix inefficient use of dd(1) Patrick Steinhardt
2026-07-02 17:49   ` SZEDER Gábor
2026-07-03  5:42     ` Patrick Steinhardt
2026-07-02 21:16   ` Jeff King
2026-07-03  5:42     ` Patrick Steinhardt [this message]
2026-07-03  7:00       ` Jeff King
2026-07-02 12:00 ` [PATCH 4/9] t5608: reduce maximum disk usage Patrick Steinhardt
2026-07-02 12:00 ` [PATCH 5/9] t7508: skip EXPENSIVE test that is broken without SIZE_T_IS_32BIT Patrick Steinhardt
2026-07-02 21:22   ` Jeff King
2026-07-02 22:18     ` Jeff King
2026-07-02 12:00 ` [PATCH 6/9] t7900: clean up large EXPENSIVE repository Patrick Steinhardt
2026-07-02 21:30   ` Jeff King
2026-07-03  5:42     ` Patrick Steinhardt
2026-07-03  7:00       ` Jeff King
2026-07-02 12:01 ` [PATCH 7/9] t: use `test_bool_env` to parse GIT_TEST_LONG Patrick Steinhardt
2026-07-02 12:01 ` [PATCH 8/9] gitlab-ci: disable RAM disk on macOS jobs Patrick Steinhardt
2026-07-02 12:01 ` [PATCH 9/9] gitlab-ci: enable "GIT_TEST_LONG" Patrick Steinhardt
2026-07-03  9:24 ` [PATCH v2 0/9] t: fixes and improvements for GIT_TEST_LONG Patrick Steinhardt
2026-07-03  9:24   ` [PATCH v2 1/9] README: add GitLab CI badge to make it more discoverable Patrick Steinhardt
2026-07-03  9:24   ` [PATCH v2 2/9] t0021: skip EXPENSIVE test that is broken without SIZE_T_IS_32BIT Patrick Steinhardt
2026-07-03 17:36     ` Junio C Hamano
2026-07-06  6:23       ` Patrick Steinhardt
2026-07-03  9:24   ` [PATCH v2 3/9] t4141: fix inefficient use of dd(1) Patrick Steinhardt
2026-07-03  9:24   ` [PATCH v2 4/9] t5608: reduce maximum disk usage Patrick Steinhardt
2026-07-03  9:24   ` [PATCH v2 5/9] t7508: skip EXPENSIVE test that is broken without SIZE_T_IS_32BIT Patrick Steinhardt
2026-07-03 17:38     ` Junio C Hamano
2026-07-03  9:24   ` [PATCH v2 6/9] t7900: clean up large EXPENSIVE repository Patrick Steinhardt
2026-07-03  9:24   ` [PATCH v2 7/9] t: use `test_bool_env` to parse GIT_TEST_LONG Patrick Steinhardt
2026-07-03  9:24   ` [PATCH v2 8/9] gitlab-ci: disable RAM disk on macOS jobs Patrick Steinhardt
2026-07-03  9:24   ` [PATCH v2 9/9] gitlab-ci: enable "GIT_TEST_LONG" Patrick Steinhardt
2026-07-06  6:23 ` [PATCH v3 0/9] t: fixes and improvements for GIT_TEST_LONG Patrick Steinhardt
2026-07-06  6:23   ` [PATCH v3 1/9] README: add GitLab CI badge to make it more discoverable Patrick Steinhardt
2026-07-06  6:23   ` [PATCH v3 2/9] t0021: skip EXPENSIVE test that is broken without SIZE_T_IS_64BIT Patrick Steinhardt
2026-07-06  6:23   ` [PATCH v3 3/9] t4141: fix inefficient use of dd(1) Patrick Steinhardt
2026-07-06  6:23   ` [PATCH v3 4/9] t5608: reduce maximum disk usage Patrick Steinhardt
2026-07-06  6:24   ` [PATCH v3 5/9] t7508: skip EXPENSIVE test that is broken without SIZE_T_IS_64BIT Patrick Steinhardt
2026-07-06  6:24   ` [PATCH v3 6/9] t7900: clean up large EXPENSIVE repository Patrick Steinhardt
2026-07-06  6:24   ` [PATCH v3 7/9] t: use `test_bool_env` to parse GIT_TEST_LONG Patrick Steinhardt
2026-07-06  6:24   ` [PATCH v3 8/9] gitlab-ci: disable RAM disk on macOS jobs Patrick Steinhardt
2026-07-06  6:24   ` [PATCH v3 9/9] gitlab-ci: enable "GIT_TEST_LONG" Patrick Steinhardt
2026-07-06 20:29   ` [PATCH v3 0/9] t: fixes and improvements for GIT_TEST_LONG Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=akdLqNHW3pGThQat@pks.im \
    --to=ps@pks.im \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox