Leistungstest der Datenbanksysteme Valkey und Redis.

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.

Leistungstest der Datenbanksysteme Valkey und Redis.

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.

Leistungstest der Datenbanksysteme Valkey und Redis.

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

60GB SSD 8Gb DDR4