Vergelijking van de prestaties van Valkey en Redis DBMS

De resultaten van de tests met de nieuwste releases van Redis 8.0 en Valkey 8.1 DBMS worden gepresenteerd, waarin significante prestatieverbeteringen werden aangekondigd. In alle uitgevoerde tests presteerde de door de community ontwikkelde fork beter dan het oorspronkelijke project, voornamelijk dankzij de implementatie in Valkey van een nieuw mechanisme voor multithreaded input/output-verwerking in asynchrone modus, dat door Amazon aan het project is overgedragen.

In de AWS Graviton4 c8g.2xlarge testomgeving met 8 VCPU's behaalde Valkey 8.1.1 een doorvoer van 999.8 duizend SET-verzoeken per seconde, terwijl Redis 8.0 een doorvoer van 729.4 duizend verzoeken per seconde behaalde. Over het geheel genomen was de doorvoer van Valkey 37% hoger dan die van Redis voor SET-bewerkingen en 16% hoger voor GET. Tegelijkertijd liet Valkey, vergeleken met Redis, een verlaging van 30% in SET en een verlaging van 60% in GET-latentie zien.

 Vergelijking van de prestaties van Valkey en Redis DBMS

Er werd een aparte analyse uitgevoerd van de verandering in doorvoer en vertragingen afhankelijk van het aantal parallelle processors in de multithreaded I/O-verwerkingsmodus. Tot 3 threads laten Valkey en Redis ongeveer gelijke resultaten zien, maar daarna neemt Valkey de leiding. Met 6 threads op een systeem met 8 VCPU's bedroeg de prestatie van Valkey 678 SET-verzoeken per seconde, en die van Redis 563 verzoeken per seconde met een limiet van 256 gelijktijdige verbindingen. Toen het aantal verbindingen steeg tot 400, steeg de prestatie van Valkey tot 832 SET-verzoeken per seconde.

 Vergelijking van de prestaties van Valkey en Redis DBMS

Na het optimaliseren van de interruptafhandeling in het systeem om het aantal contextwisselingen in Valkey te verminderen, zijn we erin geslaagd de prestaties te verhogen tot 999.8 duizend SET-verzoeken per seconde. De essentie van de optimalisatie kwam neer op het toewijzen van 2 VCPU's voor interruptafhandeling en het binden van de resterende 6 VCPU's aan de Valkey- en Redis-I/O-verwerkingsthreads om de migratie van handlers tussen CPU's te elimineren. sudo ethtool -L ens34 combined 2 # beperk het aantal IRQ-handlers tot 2 grep ens34 /proc/interrupts # bekijk welke handlers betrokken zijn (99 en 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # bind handler 99 aan core 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # bind handler 100 aan core 2 # Start het DBMS (voor Redis, wijzig valkey/valkey:8.1.1 naar redis:8.0) met containerbinding aan CPU-cores 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

Voor prestatietests werd de volgende opdracht gebruikt: 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

Bron: opennet.ru

Voeg een reactie