PrĂ€sentiert werden die Testergebnisse der aktuellen Versionen der Datenbanksysteme Redis 8.0 und Valkey 8.1, in denen signifikante Leistungsoptimierungen verkĂŒndet wurden. In allen durchgefĂŒhrten Tests ĂŒbertraf der von der Community entwickelte Fork das Originalprojekt, hauptsĂ€chlich dank der Implementierung eines neuen Mechanismus fĂŒr die mehrfĂ€dige asynchrone E/A-Verarbeitung, der von Amazon zur VerfĂŒgung gestellt wurde.
In der Testumgebung AWS Graviton4 c8g.2xlarge mit 8 VCPU erreichte Valkey 8.1.1 eine Leistung von 999,8 Tausend SET-Anfragen pro Sekunde, wĂ€hrend Redis 8.0 einen Wert von 729,4 Tausend Anfragen pro Sekunde erzielte. Insgesamt war die Durchsatzrate von Valkey um 37 % höher als die von Redis fĂŒr SET-Operationen und um 16 % fĂŒr GET-Operationen. Zudem zeigte das Projekt Valkey im Vergleich zu Redis eine Verringerung der Latenzzeiten bei der Verarbeitung von Anfragen um 30 % fĂŒr SET-Operationen und um 60 % fĂŒr GET-Operationen.

Separat wurde eine Analyse der Ănderung von Durchsatz und Latenz in AbhĂ€ngigkeit von der Anzahl der parallel ausgefĂŒhrten Handler im Modus der mehrfĂ€digen Eingabe/Ausgabe-Behandlung durchgefĂŒhrt. Bis zu 3 Threads zeigen Valkey und Redis ungefĂ€hr gleiche Ergebnisse, doch dann setzt sich Valkey durch. Bei 6 Threads auf einem System mit 8 VCPU betrug die Leistung von Valkey 678.000 SET-Anfragen pro Sekunde, wĂ€hrend Redis 563.000 Anfragen pro Sekunde bei einer Grenze von 256 gleichzeitigen Verbindungen erreichte. Bei einer Erhöhung der Verbindungen auf 400 stieg die Leistung von Valkey auf 832.000 SET-Anfragen pro Sekunde.

Durch die Optimierung der Interrupt-Verarbeitung im System, um die Anzahl der Kontextwechsel zu reduzieren, konnte Valkey die Leistung auf 999,8 Tausend SET-Anfragen pro Sekunde steigern. Die Optimierung bestand darin, 2 VCPUs fĂŒr die Interrupt-Verarbeitung zu reservieren und die verbleibenden 6 VCPUs den Verarbeitungsströmen von Valkey und Redis zuzuordnen, um Migrationen der Handler zwischen den CPUs zu vermeiden. sudo ethtool -L ens34 combined 2 # beschrĂ€nken wir die Anzahl der IRQ-Handler auf 2 grep ens34 /proc/interrupts # prĂŒfen, welche Handler aktiv sind (99 und 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # binden wir Handler 99 an Kern 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # binden wir Handler 100 an Kern 2 # Starten Sie die Datenbank (fĂŒr Redis Ă€ndern Sie valkey/valkey:8.1.1 in redis:8.0) mit einer Bindung des Containers an die CPU-Kerne 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ĂŒr die Leistungstests wurde der Befehl verwendet: 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
Quelle: opennet.ru
