Сравнение производительности СУБД Valkey и Redis

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 4242
Зарегистрирован: 20.08.2022

#

Сравнение производительности СУБД Valkey и Redis
Дата публикации:Wed, 04 Jun 2025 08:59:20 +0300




Представлены результаты тестирования свежих выпусков СУБД Redis 8.0 и Valkey 8.1, в которых были заявлены значительные оптимизации производительности. Во всех проведённых тестах развиваемый сообществом форк обогнал оригинальный проект, в основном благодаря внедрению в Valkey нового механизма для многопоточной обработки ввода/вывода в асинхронном режиме, переданного проекту компанией Amazon.



В тестовом окружении AWS Graviton4 c8g.2xlarge с 8 VCPU в Valkey 8.1.1 удалось добиться производительности в 999.8 тысяч SET-запросов в секунду, в то время как в Redis 8.0 был достигнут уровень в 729.4 тысяч запросов в секунду. В общем виде пропускная способность Valkey оказалась выше Redis на 37% для операций SET и на 16% для GET. При этом по сравнению с Redis проект Valkey продемонстрировал снижение задержек при обработке запросов на 30% для операций SET и на 60% для операций GET.
Изображение


Отдельно проведён анализ изменения пропускной способности и задержек в зависимости от числа параллельно выполняемых обработчиков в режиме многопоточной обработки ввода/вывода. До 3 потоков
Valkey и Redis показывают примерно равные результаты, но затем вперёд вырывается Valkey. При 6 потоках на системе с 8 VCPU производительность Valkey составила 678 тысяч SET-запросов в секунду, а Redis - 563 тысячи запросов в секунду при лимите в 256 одновременных соединений. При увеличении соединений до 400 производительность Valkey выросла до 832 тысяч SET-запросов в секунду.
Изображение


После оптимизации обработки прерываний в системе для снижения числа переключения контекста в Valkey удалось поднять производительность до 999.8 тысяч SET-запросов в секунду. Суть оптимизации свелась к выделению 2 VCPU для обработки прерываний и привязки 6 оставшихся VCPU к потокам обработки ввода/вывода Valkey и Redis, чтобы исключить миграцию обработчиков между CPU.

sudo ethtool -L ens34 combined 2 # ограничиваем до 2 число обработчиков IRQ
grep ens34 /proc/interrupts # смотрим какие обработчики задействованы (99 и 100)
echo 1 | sudo tee /proc/irq/99/smp_affinity # привязываем обработчик 99 к ядру 1
echo 2 | sudo tee /proc/irq/100/smp_affinity # привязываем обработчик 100 к ядру 2

# Запускаем СУБД (для Redis поменять valkey/valkey:8.1.1 на redis:8.0) c привязкой контейнера к ядрам CPU 2-7
docker run --network="host" --rm \
--cpuset-cpus="2-7" valkey/valkey:8.1.1 \
--save "" --appendonly no --io-threads 6 \
--protected-mode no --maxmemory 10gb





Для тестирования производительности использовалась команда:

docker run --network="host" --rm --cpuset-cpus="2-7" \
valkey/valkey:8.0.1 valkey-benchmark \
-h 172.31.4.92 -p 6379 -t SET,GET -n 100000000 -c 256 \
-r 3000000 --threads 6 -d 1024



Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=63335

Жизнь за Нер'зула!

Ответить