- PVSM.RU - https://www.pvsm.ru -

Бенчмарки сделаны в программе SMHasher [1] на Core 2 Duo 3,0 ГГц
На Хабре неоднократно рассказывали про некриптографические хеш-функции [2], которые на порядок быстрее криптографических. Они применяются там, где важна скорость и нет смысла применять медленные MD5 или SHA1. Например, для построения хеш-таблиц с хранением пар ключ-значение или для быстрой проверки контрольной суммы при передаче больших файлов.
Одно из самых популярных — семейство хеш-функций xxHash [3], которое появилось около пяти лет назад. Хотя изначально эти хеши задумывались для проверки контрольной суммы при сжатии LZ4, но их стали применять на самых разных задачах. Оно и понятно: достаточно посмотреть на таблицу вверху со сравнением производительности xxHash и некоторых других хеш-функций. В этом тесте xxHash обходит ближайшего конкурента по производительности в два раза. Новая версия XXH3 [4] поднимает планку ещё выше.
[5]
Здесь и далее диаграммы кликабельны
Автор программы Ян Колле (Yann Collet) пишет [6], что идея усовершенствовать алгоритм появилась в процессе реализации фильтра Блума, который требовал быстрой генерации 64 псевдослучайных бит на основе небольших входных данных переменной длины. В принципе, с этим могла бы справиться стандартная XXH64, но обработка малых входных данных никогда не являлась приоритетом при её разработке. Другими словами, возможна оптимизация. В результате этой оптимизации и появилась новая хэш-функция XXH3, в которой реализованы идеи из некоторых других хэш-алгоритмов. Что самое интересное, XXH3 значительно быстрее всех существующих вариантов xxHash не только на малых входных данных, но практически по всем вариантам использования.
XXH3 устраняет главный недостаток XXH64 — ограничение хеша длиной в 64 бита. Автор говорит, что по этой причине его часто просили выпустить хотя бы 128-битную версию. Так вот, хеш-функция XXH3 теоретически способна генерировать хеши до 256 бит.
В XXH3 внутренний цикл, который оптимально обрабатывается векторизацией. Благодаря этому функция использует аппаратную поддержку на наборах инструкций SSE2, AVX2 и NEON. Производительность зависит от комилятора. Неожиданно оказалось, что версия, скомпилированная clang, намного превосходит остальные. Ян Колле даже подумал, что производительность хеш-функции здесь превысит пропускную способность памяти. Этой версии на графике соответствует пунктирная линия.
В итоге оказалось, что у хеш-функции с поддержкой AVX2 пропускная способность гораздо выше, чем у оперативной памяти, так что важным фактором становится объём кэша. Впрочем, во многих задачах приходится обрабатывать данные, которые уже находятся в кэше, так что работа со скоростью быстрее памяти вполне имеет смысл.
Поддержка инструкций SSE2 позволяет новой хеш-функции значительно обойти XXH32 на 32-битных приложениях, которые по-прежнему часто встречаются в реальном мире (например, байткод WASM).
На маленьких входных данных (20-30 байт) хеш-функция XXH3 ненамного, но всё-таки превосходит CityHash [9] от Google, а также FarmHash, которые раньше были явными лидерами.
На следующем графике приведены результаты самого реалистичного теста с входными данными переменной длины (случайная величина от 1 до N).
В ещё одном тесте учитывается задержка: здесь хеширование начинается по сигналу. Идея в том, чтобы симулировать реальную рабочую нагрузку, где хеш-функция не работает непрерывно, а вызывается в другими процессами в определённый момент.
Автор пишет, что данный тест с умножением 64×64=>128 бит отдаёт предпочтение алгоритмам mumv2 [13] от Владимира Макарова и t1ha2 [14] от Лео Юрьева.
Наконец, вот итоговый и самый важный график, который показывает скорость хеширования на входных данных переменной длины с учётом задержки. Он отражает реальное применение хеш-функции, например, в базах данных.
XXH3 вышла в составе пакета xxHash v0.7.0 [17]. У неё стоит пометка «экспериментальная», а для разлочки нужно применить макрос XXH_STATIC_LINKING_ONLY. Автор поясняет, что хеш-функцию пока можно использовать только на тестовых эфемерных данных, но не для реального сохранения хешей. По итогам экспериментального периода и сбора отзывов пользователей функция XXH3 получит стабильный статус в следующей версии xxHash.
Сертификаты подписи документов [18] Microsoft Office, Adobe PDF, LibreOffice и др.
GlobalSign представляет широкие возможности по внедрению доверенной цифровой подписи. От настольных, серверных до облачных вариантов реализации. Подробнее [18]
Автор: GlobalSign_admin
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/algoritmy/311909
Ссылки в тексте:
[1] SMHasher: http://code.google.com/p/smhasher/wiki/SMHasher
[2] некриптографические хеш-функции: https://habr.com/ru/post/178955/
[3] xxHash: http://www.xxhash.com/
[4] XXH3: https://github.com/Cyan4973/xxHash/blob/dev/xxh3.h
[5] Image: https://habrastorage.org/webt/p_/we/gx/p_wegxj3siry851kiu6bd6qsqog.png
[6] пишет: https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html
[7] Image: https://habrastorage.org/webt/tq/9x/80/tq9x80gkeyybxgr6ui4gpga1e50.png
[8] Image: https://habrastorage.org/webt/1s/mu/bk/1smubkchlywttvoz3funjxgu9po.png
[9] CityHash: https://github.com/google/cityhash
[10] Image: https://habrastorage.org/webt/ug/ca/he/ugcahetdr0kfsm5bkydlwgezaow.png
[11] Image: https://habrastorage.org/webt/pu/ry/cb/purycbxasjuqmaz1vmgk9b5sqr8.png
[12] Image: https://habrastorage.org/webt/a5/vd/sj/a5vdsjlkavxgcsxmchixqe_igfs.png
[13] mumv2: https://github.com/vnmakarov/mum-hash
[14] t1ha2: https://github.com/leo-yuriev/t1ha
[15] Image: https://habrastorage.org/webt/rp/8c/vs/rp8cvsrlhdkdvemb6dbvculzzgq.png
[16] Image: https://habrastorage.org/webt/cy/ut/ec/cyutecynmtdmcvtzskuwntmbah4.png
[17] xxHash v0.7.0: https://github.com/Cyan4973/xxHash/releases/tag/v0.7.0
[18] подписи документов: https://clck.ru/F5DuF
[19] Источник: https://habr.com/ru/post/444144/?utm_source=habrahabr&utm_medium=rss&utm_campaign=444144
Нажмите здесь для печати.