From: Yonatan Komornik Date: Fri, 7 Jan 2022 23:55:19 +0000 (-0800) Subject: ZSTD CLI: Use buffered output for improved performance X-Git-Tag: v1.5.4^2~269^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df5013b4632eda82a0cc745969ca305ac55dfe36;p=thirdparty%2Fzstd.git ZSTD CLI: Use buffered output for improved performance --- diff --git a/programs/fileio.c b/programs/fileio.c index 379d334eb..9945daa46 100644 --- a/programs/fileio.c +++ b/programs/fileio.c @@ -718,6 +718,17 @@ FIO_openDstFile(FIO_ctx_t* fCtx, FIO_prefs_t* const prefs, if (f == NULL) { DISPLAYLEVEL(1, "zstd: %s: %s\n", dstFileName, strerror(errno)); } + /* An increased buffer size can provide a significant performance boost on some platforms. + * Note that providing a NULL buf with a size that's not 0 is not defined in ANSI C, but is defined + * in an extension. There are three possibilities here - + * 1. Libc supports the extended version and everything is good. + * 2. Libc ignores the size when buf is NULL, in which case everything will continue as if we didn't + * call `setvbuf`. + * 3. We fail the call and execution continues but a warning message might be shown. + * In all cases due execution continues. For now, I believe that this is a more cost-effective + * solution than managing the buffers allocations ourselves (will require an API change). */ + if(setvbuf(f, NULL, _IOFBF, 1 MB)) + DISPLAYLEVEL(2, "Warning: setvbuf failed for %s\n", dstFileName); return f; } }