[PATCH 00/11] makedumpfile: Add zstd support for makedumpfile

HAGIO KAZUHITO(萩尾 一仁) k-hagio-ab at nec.com
Tue Sep 14 00:04:24 PDT 2021


Hi Tao Liu,

Thanks for the patchset!

-----Original Message-----
> This patch set adds ZSTD compression support to makedumpfile. With ZSTD compression
> support, the vmcore dump size and time consumption can have a better balance than
> zlib/lzo/snappy.
> 
> How to build:
> 
>   Build using make:
>     $ make USEZSTD=on
> 
> Performance Comparison:
> 
>   How to measure
> 
>     I took a x86_64 machine which had 4T memory, and the compression level
>     range from (-3 to 4) for ZSTD, as well as zlib/lzo/snappy compression.
>     All testing was done by makedumpfile single thread mode.
> 
>     As for compression performance testing, in order to avoid the performance
>     bottle neck of disk I/O, I used the following makedumpfile cmd, which took
>     lzo compression as an example. "--dry-run" will not write any data to disk,
>     "--show-stat" will output the vmcore size after compression, and the time
>     consumption can be collected from the output logs.
> 
>     $ makedumpfile -d 0 -l /proc/kcore vmcore --dry-run --show-stat
> 
> 
>     As for decompression performance testing, I only tested the (-d 31) case,
>     because the vmcore size of (-d 0) case is too big to fit in the disk, in
>     addtion, to read a oversized file from disk will encounter the disk I/O
>     bottle neck.
> 
>     I triggered a kernel crash and collected a vmcore. Then I converted the
>     vmcore into specific compression format using the following makedumpfile
>     cmd, which would get a lzo format vmcore as an example:
> 
>     $ makedumpfile -l vmcore vmcore.lzo
> 
>     After all vmcores were ready, I used the following cmd to perform the
>     decompression, the time consumption can be collected from the logs.
> 
>     $ makedumpfile -F vmcore.lzo --dry-run --show-stat
> 
> 
>   Result charts
> 
>     For compression:
> 
>             makedumpfile -d31			|  makedumpfile -d0
>             Compression time	vmcore size	|  Compression time  vmcore size
>     zstd-3  325.516446	        5285179595	|  8205.452248	     51715430204
>     zstd-2  332.069432	        5319726604	|  8057.381371	     51732062793
>     zstd-1  309.942773	        5730516274	|  8138.060786	     52136191571
>     zstd0   439.773076	        4673859661	|  8873.059963	     50993669657
>     zstd1   406.68036	        4700959521	|  8259.417132	     51036900055
>     zstd2   397.195643	        4699263608	|  8230.308291	     51030410942
>     zstd3   436.491632	        4673306398	|  8803.970103	     51043393637
>     zstd4   543.363928	        4668419304	|  8991.240244	     51058088514
>     zlib    561.217381	        8514803195      | 14381.755611	     78199283893
>     lzo	    248.175953	       16696411879	|  6057.528781	     90020895741
>     snappy  231.868312	       11782236674	|  5290.919894	    245661288355
> 
>     For decompression:
> 
>             makedumpfile -d31
>             decompress time	   vmcore size
>     zstd-3	477.543396	       5289373448
>     zstd-2	478.034534	       5327454123
>     zstd-1	459.066807	       5748037931
>     zstd0	561.687525	       4680009013
>     zstd1	547.248917	       4706358547
>     zstd2	544.219758	       4704780719
>     zstd3	555.726343	       4680009013
>     zstd4	558.031721	       4675545933
>     zlib	630.965426	       8555376229
>     lzo	    	427.292107	      16849457649
>     snappy	446.542806	      11841407957
> 
>   Discussion
> 
>     For zstd range from -3 to 4, compression level 2 (ZSTD_dfast) has
>     the best time consumption and vmcore dump size balance.

Do you have a result of -d 1 compression test?  I think -d 0 is not
practical, I would like to see a -d 1 result of such a large vmcore.

And just out of curiosity, what version of zstd are you using?
When I tested zstd last time, compression level 1 was faster than 2, iirc.

btw, ZSTD_dfast is an enum of ZSTD_strategy, not for compression level?
(no need to update for now, I will review later)

Thanks,
Kazu

> 
>     For zstd2/zlib/lzo/snappy, zstd2 has the smallest vmcore size, also
>     the best time consumption and vmcore dump size balance.
> 
> Tao Liu (11):
>   Add dump header for zstd.
>   Add command-line processing for zstd
>   Add zstd build support
>   Notify zstd unsupporting when disabled
>   Add single thread zstd compression processing
>   Add parallel threads zstd compression processing
>   Add single thread zstd uncompression processing
>   Add parallel threads zstd uncompression processing
>   Add zstd help message
>   Add zstd manual description
>   Add zstd README description
> 
>  Makefile       |   5 +++
>  README         |   5 ++-
>  diskdump_mod.h |   1 +
>  makedumpfile.8 |   7 ++--
>  makedumpfile.c | 101 +++++++++++++++++++++++++++++++++++++++++++++----
>  makedumpfile.h |  10 +++++
>  print_info.c   |  30 ++++++++++-----
>  7 files changed, 138 insertions(+), 21 deletions(-)
> 
> --
> 2.29.2



More information about the kexec mailing list