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

Tao Liu ltao at redhat.com
Fri Sep 10 03:33:07 PDT 2021


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. 
    
    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