This is not exactly an answer to your question but testing zstd against lz4 with a 498545 bytes sample json file with 500 records (sjfw500r.json) on my linux desktop with single thread made me say WHAT!!!.
lz4 Ubuntu Desktop Benchmarks (Levels: 1~9):
omer@redus:~/Downloads$ lz4 -b1e9 ./sjfw500r.json
Benchmarking levels from 1 to 9
1#sjfw500r.json : 498545 -> 144447 (3.451),2026.3 MB/s ,11339.8 MB/s
2#sjfw500r.json : 498545 -> 144447 (3.451),2022.0 MB/s ,11265.8 MB/s
3#sjfw500r.json : 498545 -> 115807 (4.305), 232.8 MB/s ,9314.1 MB/s
4#sjfw500r.json : 498545 -> 114851 (4.341), 199.1 MB/s ,9400.1 MB/s
5#sjfw500r.json : 498545 -> 114365 (4.359), 173.9 MB/s ,9482.2 MB/s
6#sjfw500r.json : 498545 -> 114025 (4.372), 149.3 MB/s ,9404.4 MB/s
7#sjfw500r.json : 498545 -> 113849 (4.379), 129.4 MB/s ,9513.5 MB/s
8#sjfw500r.json : 498545 -> 113759 (4.382), 115.1 MB/s ,9535.0 MB/s
9#sjfw500r.json : 498545 -> 113729 (4.384), 108.5 MB/s ,9485.1 MB/s
zstd Ubuntu Desktop Benchmarks (Levels: 1~22):
omer@redus:~/Downloads$ zstd -b1e22 ./sjfw500r.json
1#sjfw500r.json : 498545 -> 21223 (23.49),2862.9 MB/s ,11509.3 MB/s
2#sjfw500r.json : 498545 -> 20911 (23.84),3185.9 MB/s ,10995.9 MB/s
3#sjfw500r.json : 498545 -> 20330 (24.52),2287.7 MB/s ,10804.9 MB/s
4#sjfw500r.json : 498545 -> 20329 (24.52),2422.0 MB/s ,10788.9 MB/s
5#sjfw500r.json : 498545 -> 19748 (25.25),1113.6 MB/s ,10794.6 MB/s
6#sjfw500r.json : 498545 -> 19660 (25.36),1070.4 MB/s ,10845.0 MB/s
7#sjfw500r.json : 498545 -> 19299 (25.83), 784.1 MB/s ,11194.8 MB/s
8#sjfw500r.json : 498545 -> 19195 (25.97), 697.6 MB/s ,11267.8 MB/s
9#sjfw500r.json : 498545 -> 19126 (26.07), 605.5 MB/s ,11351.0 MB/s
10#sjfw500r.json : 498545 -> 19126 (26.07), 608.6 MB/s ,11370.9 MB/s
11#sjfw500r.json : 498545 -> 19126 (26.07), 609.8 MB/s ,11362.1 MB/s
12#sjfw500r.json : 498545 -> 19082 (26.13), 537.2 MB/s ,11399.8 MB/s
13#sjfw500r.json : 498545 -> 19049 (26.17), 297.9 MB/s ,11441.6 MB/s
14#sjfw500r.json : 498545 -> 19049 (26.17), 297.3 MB/s ,11401.5 MB/s
15#sjfw500r.json : 498545 -> 19050 (26.17), 272.5 MB/s ,11435.6 MB/s
16#sjfw500r.json : 498545 -> 18933 (26.33), 73.5 MB/s ,11578.4 MB/s
17#sjfw500r.json : 498545 -> 18723 (26.63), 65.8 MB/s ,10990.3 MB/s
18#sjfw500r.json : 498545 -> 18663 (26.71), 49.7 MB/s ,10308.6 MB/s
19#sjfw500r.json : 498545 -> 18424 (27.06), 10.13 MB/s ,10155.1 MB/s
20#sjfw500r.json : 498545 -> 18424 (27.06), 10.13 MB/s ,10153.4 MB/s
21#sjfw500r.json : 498545 -> 18423 (27.06), 8.64 MB/s ,10163.2 MB/s
22#sjfw500r.json : 498545 -> 18423 (27.06), 8.34 MB/s ,10164.5 MB/s
So unlike the chart in your question zstd seems to outshine lz4 by a huge margin.
psadbw
can accelerate motion-search for similar blocks, giving sum-of-absolute-differences for 2x 8-byte chunks at a time, i.e. rows of two 8x8 blocks. But lossless compression only wants exact matches;pcmpeqb
is a[i] == b[i] for 16 bytes may be useful to find a candidate start point) $\endgroup$