From db4369b62bd4c452cd078c39454b32b1f7c3edeb Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Thu, 11 Aug 2016 01:05:02 +0200 Subject: [PATCH 1/7] updated Dspeed graph --- images/Dspeed4.png | Bin 9927 -> 8997 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/Dspeed4.png b/images/Dspeed4.png index e75091dd7ff03532409004fea06549c87d3281ea..74ccda0781749b43c42a8d5d403755463abbfe1f 100644 GIT binary patch literal 8997 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 WhVOl30r=ev1eq9`85HQ*NBkE?+C)wO From f6199ed13029fb5deac680413b2e89ebe9ba5c15 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Thu, 11 Aug 2016 01:13:15 +0200 Subject: [PATCH 2/7] updated Dspeed graph --- images/Dspeed4.png | Bin 8997 -> 8984 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/Dspeed4.png b/images/Dspeed4.png index 74ccda0781749b43c42a8d5d403755463abbfe1f..eba485d0d1ed779b61c1dd1698049ad6628a8a5e 100644 GIT binary patch literal 8984 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 Date: Thu, 11 Aug 2016 22:09:09 +0200 Subject: [PATCH 3/7] fixed msan warning (#281) --- lib/dictBuilder/zdict.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/dictBuilder/zdict.c b/lib/dictBuilder/zdict.c index a18ab446..3416a979 100644 --- a/lib/dictBuilder/zdict.c +++ b/lib/dictBuilder/zdict.c @@ -611,18 +611,17 @@ static void ZDICT_countEStats(EStats_ress_t esr, ZSTD_parameters params, { const BYTE* codePtr = seqStorePtr->llCode; U32 u; for (u=0; usequences; - U32 offset1 = seq[0].offset - 3; - U32 offset2 = seq[1].offset - 3; - if (offset1 >= MAXREPOFFSET) offset1 = 0; - if (offset2 >= MAXREPOFFSET) offset2 = 0; - repOffsets[offset1] += 3; - repOffsets[offset2] += 1; - } - } + if (nbSeq >= 2) { /* rep offsets */ + const seqDef* const seq = seqStorePtr->sequencesStart; + U32 offset1 = seq[0].offset - 3; + U32 offset2 = seq[1].offset - 3; + if (offset1 >= MAXREPOFFSET) offset1 = 0; + if (offset2 >= MAXREPOFFSET) offset2 = 0; + repOffsets[offset1] += 3; + repOffsets[offset2] += 1; + } } } } /* @@ -676,7 +675,7 @@ static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize, short matchLengthNCount[MaxML+1]; U32 litLengthCount[MaxLL+1]; short litLengthNCount[MaxLL+1]; - U32 repOffset[MAXREPOFFSET] = { 0 }; + U32 repOffset[MAXREPOFFSET]; offsetCount_t bestRepOffset[ZSTD_REP_NUM+1]; EStats_ress_t esr; ZSTD_parameters params; @@ -701,6 +700,7 @@ static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize, for (u=0; u<=offcodeMax; u++) offcodeCount[u]=1; for (u=0; u<=MaxML; u++) matchLengthCount[u]=1; for (u=0; u<=MaxLL; u++) litLengthCount[u]=1; + memset(repOffset, 0, sizeof(repOffset)); repOffset[1] = repOffset[4] = repOffset[8] = 1; memset(bestRepOffset, 0, sizeof(bestRepOffset)); if (compressionLevel==0) compressionLevel=g_compressionLevel_default; From 6c36449ef3ea4cc919ed0e7ac0516e23847391f9 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Fri, 12 Aug 2016 00:05:59 +0200 Subject: [PATCH 4/7] minor comments --- Makefile | 2 +- NEWS | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d8e740bd..6e83f33a 100644 --- a/Makefile +++ b/Makefile @@ -120,7 +120,7 @@ asan: clean $(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=address" msan: clean - $(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=memory" # datagen.c used to fail this test for no obvious reason + $(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=memory -fno-omit-frame-pointer" # datagen.c fails this test for no obvious reason asan32: clean $(MAKE) -C $(PRGDIR) test32 CC=clang MOREFLAGS="-g -fsanitize=address" diff --git a/NEWS b/NEWS index 5e46e0a7..2202d192 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,7 @@ v0.8.1 Changed : -i# now selects benchmark time in second Fixed : ZSTD_compress* can now compress > 4 GB in a single pass, reported by Nick Terrell +Fixed : speed regression for specific patterns (#272) v0.8.0 Improved : better speed on clang and gcc -O2, thanks to Eric Biggers From fe0590f63fea2e21c6eea3f34e91a61ad59cb233 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Fri, 12 Aug 2016 18:04:15 +0200 Subject: [PATCH 5/7] new --ultra policy --- NEWS | 3 ++- programs/zstdcli.c | 29 +++++++++++++++++++---------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/NEWS b/NEWS index 2202d192..20765a3d 100644 --- a/NEWS +++ b/NEWS @@ -1,7 +1,8 @@ v0.8.1 +Changed : --ultra now enables levels beyond 19 Changed : -i# now selects benchmark time in second Fixed : ZSTD_compress* can now compress > 4 GB in a single pass, reported by Nick Terrell -Fixed : speed regression for specific patterns (#272) +Fixed : speed regression on specific patterns (#272) v0.8.0 Improved : better speed on clang and gcc -O2, thanks to Eric Biggers diff --git a/programs/zstdcli.c b/programs/zstdcli.c index f4fbba53..17fba708 100644 --- a/programs/zstdcli.c +++ b/programs/zstdcli.c @@ -35,6 +35,10 @@ # define ZSTDCLI_CLEVEL_DEFAULT 3 #endif +#ifndef ZSTDCLI_CLEVEL_MAX +# define ZSTDCLI_CLEVEL_MAX 19 +#endif + /*-************************************ * Includes @@ -115,7 +119,7 @@ static int usage(const char* programName) DISPLAY( " with no FILE, or when FILE is - , read standard input\n"); DISPLAY( "Arguments :\n"); #ifndef ZSTD_NOCOMPRESS - DISPLAY( " -# : # compression level (1-%u, default:%u) \n", ZSTD_maxCLevel(), ZSTDCLI_CLEVEL_DEFAULT); + DISPLAY( " -# : # compression level (1-%u, default:%u) \n", ZSTDCLI_CLEVEL_MAX, ZSTDCLI_CLEVEL_DEFAULT); #endif #ifndef ZSTD_NODECOMPRESS DISPLAY( " -d : decompression \n"); @@ -143,7 +147,7 @@ static int usage_advanced(const char* programName) DISPLAY( " -r : operate recursively on directories\n"); #endif #ifndef ZSTD_NOCOMPRESS - DISPLAY( "--ultra : enable ultra modes (requires more memory to decompress)\n"); + DISPLAY( "--ultra : enable levels beyond %i, up to %i (requires more memory)\n", ZSTDCLI_CLEVEL_MAX, ZSTD_maxCLevel()); DISPLAY( "--no-dictID : don't write dictID into header (dictionary compression)\n"); DISPLAY( "--[no-]check : integrity check (default:enabled)\n"); #endif @@ -215,7 +219,8 @@ int main(int argCount, const char** argv) nextArgumentIsOutFileName=0, nextArgumentIsMaxDict=0, nextArgumentIsDictID=0, - nextArgumentIsFile=0; + nextArgumentIsFile=0, + ultra=0; int cLevel = ZSTDCLI_CLEVEL_DEFAULT; int cLevelLast = 1; unsigned recursive = 0; @@ -268,7 +273,7 @@ int main(int argCount, const char** argv) if (!strcmp(argument, "--verbose")) { displayLevel++; continue; } if (!strcmp(argument, "--quiet")) { displayLevel--; continue; } if (!strcmp(argument, "--stdout")) { forceStdout=1; outFileName=stdoutmark; displayLevel-=(displayLevel==2); continue; } - if (!strcmp(argument, "--ultra")) { FIO_setMaxWLog(0); continue; } + if (!strcmp(argument, "--ultra")) { ultra=1; FIO_setMaxWLog(0); continue; } if (!strcmp(argument, "--check")) { FIO_setChecksumFlag(2); continue; } if (!strcmp(argument, "--no-check")) { FIO_setChecksumFlag(0); continue; } if (!strcmp(argument, "--no-dictID")) { FIO_setDictIDFlag(0); continue; } @@ -298,10 +303,7 @@ int main(int argCount, const char** argv) #ifndef ZSTD_NOCOMPRESS /* compression Level */ if ((*argument>='0') && (*argument<='9')) { - cLevel = readU32FromChar(&argument); - dictCLevel = cLevel; - if (dictCLevel > ZSTD_maxCLevel()) - CLEAN_RETURN(badusage(programName)); + dictCLevel = cLevel = readU32FromChar(&argument); continue; } #endif @@ -317,7 +319,7 @@ int main(int argCount, const char** argv) case 'd': decode=1; argument++; break; /* Force stdout, even if stdout==console */ - case 'c': forceStdout=1; outFileName=stdoutmark; displayLevel-=(displayLevel==2); argument++; break; + case 'c': forceStdout=1; outFileName=stdoutmark; argument++; break; /* Use file content as dictionary */ case 'D': nextEntryIsDictionary = 1; argument++; break; @@ -488,7 +490,14 @@ int main(int argCount, const char** argv) CLEAN_RETURN(filenameIdx); } - /* No warning message in pipe mode (stdin + stdout) or multiple mode */ + /* check compression level limits */ + { int const maxCLevel = ultra ? ZSTD_maxCLevel() : ZSTDCLI_CLEVEL_MAX; + if (cLevel > maxCLevel) { + DISPLAYLEVEL(2, "Warning : compression level higher than max, reduced to %i \n", maxCLevel); + cLevel = maxCLevel; + } } + + /* No warning message in pipe mode (stdin + stdout) or multi-files mode */ if (!strcmp(filenameTable[0], stdinmark) && outFileName && !strcmp(outFileName,stdoutmark) && (displayLevel==2)) displayLevel=1; if ((filenameIdx>1) & (displayLevel==2)) displayLevel=1; From fab023010df5cb99e9f895e9d66851af1283d305 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Fri, 12 Aug 2016 19:00:18 +0200 Subject: [PATCH 6/7] changed test, in compliance with new --ultra policy --- programs/playTests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/playTests.sh b/programs/playTests.sh index 1fc508f9..70ac35ec 100755 --- a/programs/playTests.sh +++ b/programs/playTests.sh @@ -47,7 +47,7 @@ $ECHO "\n**** simple tests **** " $ZSTD -f tmp # trivial compression case, creates tmp.zst $ZSTD -df tmp.zst # trivial decompression case (overwrites tmp) $ECHO "test : too large compression level (must fail)" -$ZSTD -99 tmp && die "too large compression level undetected" +$ZSTD -99 -f tmp # too large compression level, automatic sized down $ECHO "test : compress to stdout" $ZSTD tmp -c > tmpCompressed $ZSTD tmp --stdout > tmpCompressed # long command format From ac43e9582e459b83940dea518f6d89df1a2563e4 Mon Sep 17 00:00:00 2001 From: David Lam Date: Fri, 12 Aug 2016 14:49:05 -0700 Subject: [PATCH 7/7] Add more descriptive message to -v option in zstd CLI --- programs/zstdcli.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/programs/zstdcli.c b/programs/zstdcli.c index 17fba708..faf3bb7b 100644 --- a/programs/zstdcli.c +++ b/programs/zstdcli.c @@ -92,6 +92,8 @@ #define MB *(1 <<20) #define GB *(1U<<30) +#define DEFAULT_DISPLAY_LEVEL 2 + static const char* g_defaultDictName = "dictionary"; static const unsigned g_defaultMaxDictSize = 110 KB; static const int g_defaultDictCLevel = 5; @@ -104,7 +106,7 @@ static const unsigned g_defaultSelectivityLevel = 9; #define DISPLAY(...) fprintf(displayOut, __VA_ARGS__) #define DISPLAYLEVEL(l, ...) if (displayLevel>=l) { DISPLAY(__VA_ARGS__); } static FILE* displayOut; -static unsigned displayLevel = 2; /* 0 : no display, 1: errors, 2 : + result + interaction + warnings, 3 : + progression, 4 : + information */ +static unsigned displayLevel = DEFAULT_DISPLAY_LEVEL; /* 0 : no display, 1: errors, 2 : + result + interaction + warnings, 3 : + progression, 4 : + information */ /*-************************************ @@ -140,7 +142,7 @@ static int usage_advanced(const char* programName) DISPLAY( "\n"); DISPLAY( "Advanced arguments :\n"); DISPLAY( " -V : display Version number and exit\n"); - DISPLAY( " -v : verbose mode\n"); + DISPLAY( " -v : verbose mode; specify multiple times to increase log level (default:%d)\n", DEFAULT_DISPLAY_LEVEL); DISPLAY( " -q : suppress warnings; specify twice to suppress errors too\n"); DISPLAY( " -c : force write to standard output, even if it is the console\n"); #ifdef UTIL_HAS_CREATEFILELIST