zstd/contrib/largeNbDicts
Yann Collet 483759a3de Improves decompression speed when using cold dictionary
by triggering the prefetching decoder path
(which used to be dedicated to long-range offsets only).

Figures on my laptop :
no content prefetch : ~300 MB/s (for reference)
full content prefetch : ~325 MB/s (before this patch)
new prefetch path : ~375 MB/s (after this patch)

The benchmark speed is already significant,
but another side-effect is that this version
prefetch less data into memory,
since it only prefetches what's needed, instead of the full dictionary.

This is supposed to help highly active environments
such as active databases,
that can't be properly measured in benchmark environment (too clean).

Also :
fixed the largeNbDict test program
which was working improperly when setting nbBlocks > nbFiles.
2018-11-08 17:00:23 -08:00
..
.gitignore first working test program 2018-08-28 15:47:07 -07:00
largeNbDicts.c Improves decompression speed when using cold dictionary 2018-11-08 17:00:23 -08:00
Makefile Improves decompression speed when using cold dictionary 2018-11-08 17:00:23 -08:00
README.md updated documentation 2018-09-04 14:57:45 -07:00

largeNbDicts

largeNbDicts is a benchmark test tool dedicated to the specific scenario of dictionary decompression using a very large number of dictionaries. When dictionaries are constantly changing, they are always "cold", suffering from increased latency due to cache misses.

The tool is created in a bid to investigate performance for this scenario, and experiment mitigation techniques.

Command line :

largeNbDicts [Options] filename(s)

Options :
-r           : recursively load all files in subdirectories (default: off)
-B#          : split input into blocks of size # (default: no split)
-#           : use compression level # (default: 3)
-D #         : use # as a dictionary (default: create one)
-i#          : nb benchmark rounds (default: 6)
--nbDicts=#  : set nb of dictionaries to # (default: one per block)
-h           : help (this text)