Sammenligning av Valkey og Redis DBMS-ytelse

Resultatene fra testing av de nyeste utgivelsene av Redis 8.0 og Valkey 8.1 DBMS presenteres, der det ble rapportert betydelige ytelsesoptimaliseringer. I alle utførte tester overgikk forken utviklet av fellesskapet det opprinnelige prosjektet, hovedsakelig på grunn av implementeringen i Valkey av en ny mekanisme for flertrådet input/output-behandling i asynkron modus, overført til prosjektet av Amazon.

I testmiljøet AWS Graviton4 c8g.2xlarge med 8 VCPU-er oppnådde Valkey 8.1.1 en gjennomstrømning på 999.8 tusen SET-forespørsler per sekund, mens Redis 8.0 oppnådde et nivå på 729.4 tusen forespørsler per sekund. Totalt sett var Valkeys gjennomstrømning 37 % høyere enn Redis sin for SET-operasjoner og 16 % høyere for GET. Samtidig viste Valkey en reduksjon på 30 % i SET-forsinkelse og 60 % reduksjon i GET-forsinkelse sammenlignet med Redis.

 Sammenligning av Valkey og Redis DBMS-ytelse

En separat analyse ble utført av endringen i gjennomstrømning og forsinkelser avhengig av antall parallelle prosessorer i flertrådet I/O-behandlingsmodus. Opptil 3 tråder viser Valkey og Redis omtrent like resultater, men deretter tar Valkey ledelsen. Med 6 tråder på et system med 8 VCPU-er var Valkeys ytelse 678 tusen SET-forespørsler per sekund, og Redis sin var 563 tusen forespørsler per sekund med en grense på 256 samtidige tilkoblinger. Da antallet tilkoblinger økte til 400, økte Valkeys ytelse til 832 tusen SET-forespørsler per sekund.

 Sammenligning av Valkey og Redis DBMS-ytelse

Etter å ha optimalisert avbruddshåndteringen i systemet for å redusere antall kontekstbrytere i Valkey, klarte vi å øke ytelsen til 999.8 tusen SET-forespørsler per sekund. Essensen av optimaliseringen kom ned til å allokere 2 VCPU-er for avbruddshåndtering og binde de resterende 6 VCPU-ene til Valkey- og Redis I/O-behandlingstrådene for å eliminere migreringen av behandlere mellom CPU-er. sudo ethtool -L ens34 combined 2 # begrense antallet IRQ-behandlere til 2 grep ens34 /proc/interrupts # se hvilke behandlere som er involvert (99 og 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # bind behandler 99 til kjerne 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # bind handler 100 til kjerne 2 # Start DBMS-en (for Redis, endre valkey/valkey:8.1.1 til redis:8.0) med containerbinding til CPU-kjerner 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

Følgende kommando ble brukt for ytelsestesting: 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

Kilde: opennet.ru

Legg til en kommentar