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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 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 delta 7974 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 L>gTe~DWM4fWy$kY delta 8033 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 From e9b414d8250e2c13332cc71f95fbb9280123a429 Mon Sep 17 00:00:00 2001 From: Yann Collet 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 a18ab4469..3416a979a 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 d8e740bdb..6e83f33a9 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 5e46e0a7f..2202d1922 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 2202d1922..20765a3d7 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 f4fbba53f..17fba708f 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 1fc508f9d..70ac35ecb 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 17fba708f..faf3bb7ba 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