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 |
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 --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)
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(-)