ZSTD 1.4.9でLong Modeが速くなったらしいので少し試す

ZSTD 1.4.9がリリースされていました.

今回 --long 利用時に最大2倍の高速化が売りのようです.それはすごいってことで少し試してみました.

>2x Faster Long Distance Mode
Long Distance Mode (LDM) --long just got a whole lot faster thanks to optimizations by @mpu in #2483! These optimizations preserve the compression ratio but drastically speed up compression. It is especially noticeable in multithreaded mode, because the long distance match finder is not parallelized.

現在のzstdのバージョンは1つ前の1.4.8でした.

$ zstd -V
*** zstd command line interface 64-bits v1.4.8, by Yann Collet ***

1.4.9をsourceからbuildします.

$ sudo apt build-dep zstd (1)
$ git clone https://github.com/facebook/zstd (2)
$ cd zstd
$ git checkout v1.4.9 (3)
$ make (4)
$ ./zstd -V (5)
*** zstd command line interface 64-bits v1.4.9, by Yann Collet ***
  1. zstdビルドに必要なパッケージの導入
  2. sourceのclone
  3. 1.4.9に切り替え
  4. make
  5. バージョン確認
ZSTD(1)
       •   --long[=#]:  enables long distance matching with # windowLog, if not # is not present it defaults to 27. This increases the window
           size (windowLog) and memory usage for both the compressor and decompressor. This setting is designed to  improve  the  compression
           ratio for files with long matches at a large distance.

           Note: If windowLog is set to larger than 27, --long=windowLog or --memory=windowSize needs to be passed to the decompressor.

--long は 31までのようです.32を指定するとこういうエラーになります.

zstd: error 11 : Parameter is out of bound

ちょうど大きめのtarがあったのでこれで試します.

$ ls -l ../linux-5.11.tar
-rw-r--r-- 1 matoken matoken 1064212480 Feb 15 18:18 ../linux-5.11.tar
$ grep -m1 ^"model name" /proc/cpuinfo (1)
model name      : Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
$ nproc (2)
4
$ /bin/time -f"\treal\t%e" zstd -q -T`nproc` -1 --long=31 ../linux-5.11.tar -o /dev/null (3)
        real    8.10
$ /bin/time -f"\treal\t%e" ./zstd -q -T`nproc` -1 --long=31 ../linux-5.11.tar -o /dev/null (4)
        real    5.27
$ /bin/time -f"\treal\t%e" zstd -q -T`nproc` --long=31 ../linux-5.11.tar -o /dev/null (5)
        real    8.36
$ /bin/time -f"\treal\t%e" ./zstd -q -T`nproc` --long=31 ../linux-5.11.tar -o /dev/null (6)
        real    5.76
$ /bin/time -f"\treal\t%e" zstd -q -T`nproc` -19 --long=31 ../linux-5.11.tar -o /dev/null (7)
        real    388.15
$ /bin/time -f"\treal\t%e" ./zstd -q -T`nproc` -19 --long=31 ../linux-5.11.tar -o /dev/null (8)
        real    318.08
$ /bin/time -f"\treal\t%e" zstd -q -T1 --long=31 ../linux-5.11.tar -o /dev/null (9)
        real    11.81
$ /bin/time -f"\treal\t%e" ./zstd -q -T1 --long=31 ../linux-5.11.tar -o /dev/null (10)
        real    7.89
  1. CPUは Intel® Core™ i5-3320M CPU @ 2.60GHz
  2. プロセッサ数
  3. 圧縮レベル1(最低)の1.4.8で8.10s
  4. 圧縮レベル1(最低)の1.4.9で5.27s
  5. 圧縮レベル3(デフォルト)の1.4.8で8.36s
  6. 圧縮レベル3(デフォルト)の1.4.9で5.76s
  7. 圧縮レベル19(最高)の1.4.8で388.15s
  8. 圧縮レベル19(最高)の1.4.9で318.08s
  9. スレッド数を1にしたときの圧縮レベル3(デフォルト)の1.4.8で11.81s
  10. スレッド数を1にしたときの圧縮レベル3(デフォルト)の1.4.8で7.89s

2倍とまでは行きませんが速くなっているようです :)
マルチスレッドで聞きそうなことが書かれていますが,スレッド数を1にしてもあまり割合変わらない?

この環境はよくサーマルスロットリングしているので参考程度に…….

環境
$ ./zstd -V
*** zstd command line interface 64-bits v1.4.9, by Yann Collet ***
$ zstd -V
*** zstd command line interface 64-bits v1.4.8, by Yann Collet ***
$ dpkg-query -W zstd
zstd    1.4.8+dfsg-2.1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です