mastodon のバックアップデータで xz と比較してみよう
元の .tar が 8.6 GiB、 xz --best で圧縮した .tar.xz が 1.3 GiB。
zstd --ultra -21 中。
Read: 1024 MiB / 8.57 GiB ==> 27%
なかなか縮むな。期待できそう
暇なので zstd -T0 --ultra -21 もしてみよう。
CPU% が 1601.3 とかなのでたぶん16並列になってる。メモリは今のところ 34% くらい (10.4 GB くらい) でゆっくり増加中
前提として、 Ryzen 9 7950X なので CCD が2つある
zstd -T0 --ultra -21 の結果出ました、 1.5 GiB。ちゃんと計測してないけど結構高速だった気がする割には xz --best の 15.12% に迫る 17.46% の成果。
これは長期間維持するアーカイブでもなければ普通に即決で乗り替えできるレベルだな……
zstd --ultra -21 の結果、 1.5 GiB。 SHA-512 ハッシュが parallel 版と完全に一致した。そうなんだ……
結果発表。
zstd は --ultra -21 (level 21)、 xz は --best (level 9) での圧縮。
parallel-n は -Tn による並列圧縮。
元の tarball は mastodon (この投稿を発射するサーバ) の先月のバックアップで、 mastodon の git リポジトリや postgresql の生 DB (not dump) などを含む。
生 tar: 9199626240 bytes (8.6 GiB)
zstd 直列/16並列 (完全一致): 1606277479 bytes (1.5 GiB)
xz 直列: 1391707412 (1.3 GiB)
xz 8並列: 1395747252 (1.3 GiB)
……というわけで、以下の両方の条件を満たす用途ならまだ zstd よりも xz の方が強そう。
* 2%くらいの差が気になる。
* 圧縮時間はあまり気にしない。
xz を8並列でやっているのは、10並列以上にすると OOM Killer に殺されるからです (当方メモリ 32 GB、ただしアーカイブを tmpfs に置いていたのでたぶん自由に使えたのは 12 GB 〜 16 GB)
Stability of parallel compression · Issue #2238 · facebook/zstd
https://github.com/facebook/zstd/issues/2238#issuecomment-663218291
> Single-threaded output is different than multi-threaded output, but the multi-threaded output is the same for any number of threads.
あれ?そうなのか