Resultaterne af testene af de nyeste versioner af databasesystemerne Redis 8.0 og Valkey 8.1 er præsenteret, hvor der blev rapporteret om betydelige optimeringer af ydeevnen. I alle de gennemførte tests overhalede den community-drevne fork det originale projekt, primært takket være implementeringen af en ny mekanisme i Valkey til multitrådet behandling af input/udgang i asynkront mode, som blev givet til projektet af Amazon.
I testmiljøet AWS Graviton4 c8g.2xlarge med 8 VCPU opnåede Valkey 8.1.1 en ydeevne på 999,8 tusinde SET-forespørgsler pr. sekund, mens Redis 8.0 nåede et niveau på 729,4 tusinde forespørgsler pr. sekund. Generelt viste Valkey en højere throughput end Redis på 37% for SET-operationer og 16% for GET. Samtidig viste Valkey i forhold til Redis en reduktion i latens ved behandling af forespørgsler på 30% for SET-operationer og 60% for GET-operationer.

Der blev også gennemført en analyse af ændringerne i throughput og latens afhængigt af antallet af samtidig kørende håndterere i tilstanden for multitrådet behandling af input/udgang. Op til 3 tråde viser Valkey og Redis omtrent ens resultater, men derefter trækker Valkey fra. Ved 6 tråde på et system med 8 VCPU var ydeevnen for Valkey 678 tusinde SET-forespørgsler pr. sekund, mens Redis var 563 tusinde forespørgsler pr. sekund ved en grænse på 256 samtidige forbindelser. Ved at øge forbindelserne til 400 steg ydeevnen for Valkey til 832 tusinde SET-forespørgsler pr. sekund.

Efter optimering af behandlingen af afbrydelser i systemet for at reducere antallet af kontekstskift, lykkedes det at hæve ydeevnen i Valkey til 999,8 tusinde SET-forespørgsler pr. sekund. Optimeringens essens var at reservere 2 VCPU til behandling af afbrydelser og tilknytte de resterende 6 VCPU til trådene for behandling af input/udgang for Valkey og Redis for at undgå migration af håndterere mellem CPU'er. sudo ethtool -L ens34 combined 2 # begræns antallet af IRQ-håndterere til 2 grep ens34 /proc/interrupts # se hvilke håndterere der er aktiveret (99 og 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # tilknyt håndterer 99 til kerne 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # tilknyt håndterer 100 til kerne 2 # Start databasesystemet (for Redis skift valkey/valkey:8.1.1 til redis:8.0) med tilknytning af containeren til CPU-kernene 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
For performance testing, the command used was: 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
