Resultaterne af test af de seneste udgivelser af Redis 8.0 og Valkey 8.1 DBMS præsenteres, hvori der blev erklæret betydelige ydeevneoptimeringer. I alle udførte tests overgik den fork, der blev udviklet af fællesskabet, det oprindelige projekt, primært på grund af implementeringen i Valkey af en ny mekanisme til multi-threaded input/output-behandling i asynkron tilstand, overført til projektet af Amazon.
I AWS Graviton4 c8g.2xlarge testmiljøet med 8 VCPU'er opnåede Valkey 8.1.1 en gennemløbshastighed på 999.8 tusinde SET-anmodninger pr. sekund, mens Redis 8.0 opnåede et niveau på 729.4 tusinde anmodninger pr. sekund. Samlet set var Valkeys gennemløbshastighed 37 % højere end Redis' for SET-operationer og 16 % højere for GET. Samtidig viste Valkey en reduktion på 30 % i SET-latens og en reduktion på 60 % i GET-latens sammenlignet med Redis.

En separat analyse blev udført af ændringen i gennemløb og forsinkelser afhængigt af antallet af parallelle processorer i multi-threaded I/O-behandlingstilstanden. Op til 3 tråde viser Valkey og Redis omtrent lige store resultater, men derefter tager Valkey føringen. Med 6 tråde på et system med 8 VCPU'er var Valkeys ydeevne 678 tusind SET-anmodninger pr. sekund, og Redis var 563 tusind anmodninger pr. sekund med en grænse på 256 samtidige forbindelser. Da antallet af forbindelser steg til 400, steg Valkeys ydeevne til 832 tusind SET-anmodninger pr. sekund.

Efter at have optimeret afbrydelseshåndteringen i systemet for at reducere antallet af kontekstskift i Valkey, lykkedes det os at øge ydeevnen til 999.8 tusinde SET-anmodninger pr. sekund. Essensen af optimeringen kom ned til at allokere 2 VCPU'er til afbrydelseshåndtering og binde de resterende 6 VCPU'er til Valkey- og Redis I/O-behandlingstrådene for at eliminere migreringen af handlere mellem CPU'er. sudo ethtool -L ens34 combined 2 # begræns antallet af IRQ-handlere til 2 grep ens34 /proc/interrupts # se hvilke handlere der er involveret (99 og 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # bind handler 99 til kerne 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # bind handler 100 til kerne 2 # Start DBMS'en (for Redis, ændr valkey/valkey:8.1.1 til redis:8.0) med containerbinding til CPU-kerner 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
Til ydeevnetest blev følgende kommando brugt: 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
