diff mbox series

helper/test-genzeros: allow more than 2G zeros in Windows

Message ID 20211028085446.78536-1-carenas@gmail.com (mailing list archive)
State Accepted
Commit cbc985a1f403a09dd22511aca3e6699d3f3c1c7c
Headers show
Series helper/test-genzeros: allow more than 2G zeros in Windows | expand

Commit Message

Carlo Marcelo Arenas Belón Oct. 28, 2021, 8:54 a.m. UTC
d5cfd142ec (tests: teach the test-tool to generate NUL bytes and
use it, 2019-02-14), add a way to generate zeroes in a portable
way without using /dev/zero (needed by HP NonStop), but uses a
long variable that is limited to 2^31 in Windows.

Use instead a (POSIX/C99) intmax_t that is at least 64bit wide
in 64-bit Windows to use in a future test.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
---
 t/helper/test-genzeros.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Johannes Schindelin Oct. 28, 2021, 8:32 p.m. UTC | #1
Hi Carlo,

On Thu, 28 Oct 2021, Carlo Marcelo Arenas Belón wrote:

> d5cfd142ec (tests: teach the test-tool to generate NUL bytes and
> use it, 2019-02-14), add a way to generate zeroes in a portable
> way without using /dev/zero (needed by HP NonStop), but uses a
> long variable that is limited to 2^31 in Windows.
>
> Use instead a (POSIX/C99) intmax_t that is at least 64bit wide
> in 64-bit Windows to use in a future test.
>
> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>

Thank you for this patch. I integrated it into the patch series.

Unfortunately, it is incomplete, not because it does not work, but because
it comes at a hefty performance cost. In my tests, generating a gigabyte
of NULs took around 27 seconds with `genzeros`. Compare that to ~0.75
seconds with `dd`, and it is not funny, stop laughing.

Happily, I was able to rewrite the core part of `genzeros` to write chunks
of a 256kB array instead, which pushed it back down to ~0.6 seconds.

Will send out a new iteration as soon as the CI build passes.

Ciao,
Dscho

> ---
>  t/helper/test-genzeros.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/t/helper/test-genzeros.c b/t/helper/test-genzeros.c
> index 9532f5bac9..b1197e91a8 100644
> --- a/t/helper/test-genzeros.c
> +++ b/t/helper/test-genzeros.c
> @@ -3,14 +3,14 @@
>
>  int cmd__genzeros(int argc, const char **argv)
>  {
> -	long count;
> +	intmax_t count;
>
>  	if (argc > 2) {
>  		fprintf(stderr, "usage: %s [<count>]\n", argv[0]);
>  		return 1;
>  	}
>
> -	count = argc > 1 ? strtol(argv[1], NULL, 0) : -1L;
> +	count = argc > 1 ? strtoimax(argv[1], NULL, 0) : -1;
>
>  	while (count < 0 || count--) {
>  		if (putchar(0) == EOF)
> --
> 2.33.0.1155.gbdb71ac078
>
>
>
diff mbox series

Patch

diff --git a/t/helper/test-genzeros.c b/t/helper/test-genzeros.c
index 9532f5bac9..b1197e91a8 100644
--- a/t/helper/test-genzeros.c
+++ b/t/helper/test-genzeros.c
@@ -3,14 +3,14 @@ 
 
 int cmd__genzeros(int argc, const char **argv)
 {
-	long count;
+	intmax_t count;
 
 	if (argc > 2) {
 		fprintf(stderr, "usage: %s [<count>]\n", argv[0]);
 		return 1;
 	}
 
-	count = argc > 1 ? strtol(argv[1], NULL, 0) : -1L;
+	count = argc > 1 ? strtoimax(argv[1], NULL, 0) : -1;
 
 	while (count < 0 || count--) {
 		if (putchar(0) == EOF)