Загадочная регрессия в zstd
Обновлял zstd в Picodata с версии 1.5.1 до 1.5.7 и получил результаты которые не могу объяснить:
ZSTD | level 3 | level 9 | level 18 |
-----------------------------------------------------
1.5.7, API v2 | 240 MB/s | 107 MB/s | 10.4 MB/s |
-----------------------------------------------------
1.5.7, API v1 | 223 MB/s | 125 MB/s | 35 MB/s |
-----------------------------------------------------
1.5.1, API v1 | 169 MB/s | 124 MB/s | 34 MB/s |
-----------------------------------------------------
Тут не так важно, что changelog zstd пишет что значительно улучшена скорость работы на высоких уровнях компрессии, и я этого не наблюдаю. Более интересно регрессия в производительности при переходе с API v1 на API v2. ZSTD_compressBegin/ZSTD_compressEnd объявлены unsafe & deprecated, при этом ZSTD_compress2 работает медленнее. При этом память для компрессии представляем мы, то есть внутренних аллокаций нет, и в целом в среднем на 1 фрейм API вызывается 1 раз. Как видно по таблице, чем выше уровень компрессии, тем выше регрессия от использования нового API.
Месиво ещё в том, что более новая версия в теории может лучше/хуже сжимать. Но в ChangeLog я информации об этом не увидел, да и результаты этого не подтверждают.
На земле так много непонятного…