Die Testergebnisse der neuesten Versionen der Datenbankmanagementsysteme Redis 8.0 und Valkey 8.1 wurden prĂ€sentiert, in denen signifikante Leistungsoptimierungen angekĂŒndigt wurden. In allen durchgefĂŒhrten Tests ĂŒbertraf der von der Community entwickelte Fork das Originalprojekt hauptsĂ€chlich dank der Implementierung eines neuen Mechanismus in Valkey zur mehrjĂ€hrigen Verarbeitung von I/O in asynchronem Modus, bereitgestellt an das Projekt von Amazon.
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 729.4 Tausend Anfragen pro Sekunde erreichte. Insgesamt wies die Durchsatzrate von Valkey eine Steigerung von 37 % im Vergleich zu Redis fĂŒr SET-Operationen und von 16 % fĂŒr GET-Operationen auf. Gleichzeitig zeigte das Projekt Valkey im Vergleich zu Redis eine Reduzierung der Latenzen bei der Bearbeitung von Anfragen um 30 % fĂŒr SET-Operationen und um 60 % fĂŒr GET-Operationen.

ZusĂ€tzlich wurde eine Analyse der VerĂ€nderung des Durchsatzes und der Latenzen in AbhĂ€ngigkeit von der Anzahl der parallel ausgefĂŒhrten Handler im Modus der mehrjĂ€hrigen I/O-Verarbeitung durchgefĂŒhrt. Bis zu 3 Threads zeigen Valkey und Redis ungefĂ€hr gleiche Ergebnisse, aber dann setzt sich Valkey an die Spitze. Bei 6 Threads auf einem System mit 8 VCPU betrug die Leistung von Valkey 678 Tausend SET-Anfragen pro Sekunde, wĂ€hrend Redis 563 Tausend 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 Tausend SET-Anfragen pro Sekunde.

Nach der Optimierung der Interruptverarbeitung im System zur Reduzierung der Anzahl der Kontextwechsel konnte die Leistung von Valkey auf 999.8 Tausend SET-Anfragen pro Sekunde gesteigert werden. Der Kern der Optimierung bestand darin, 2 VCPU fĂŒr die Interruptverarbeitung zuzuteilen und die verbleibenden 6 VCPU an die I/O-Bearbeitungsthreads von Valkey und Redis zu binden, um die Migration von Handlern zwischen den CPU zu vermeiden. sudo ethtool -L ens34 combined 2 # BeschrĂ€nken Sie die Anzahl der IRQ-Handler auf 2 grep ens34 /proc/interrupts # ĂberprĂŒfen Sie, welche Handler aktiv sind (99 und 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # Binden Sie Handler 99 an Kern 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # Binden Sie Handler 100 an Kern 2 # Starten Sie das DBMS (fĂŒr Redis ersetzen Sie valkey/valkey:8.1.1 durch redis:8.0) mit der 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
Zum Testen der Leistung 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
