Les résultats des tests des dernières versions des SGBD Redis 8.0 et Valkey 8.1 sont présentés, avec d'importantes optimisations de performances. Dans tous les tests réalisés, le fork développé par la communauté a surpassé le projet original, principalement grâce à l'implémentation dans Valkey d'un nouveau mécanisme de traitement d'entrées/sorties multithread en mode asynchrone, transféré au projet par Amazon.
Dans l'environnement de test AWS Graviton4 c8g.2xlarge avec 8 VCPU, Valkey 8.1.1 a atteint un débit de 999.8 8.0 requêtes SET par seconde, tandis que Redis 729.4 a atteint 37 16 requêtes par seconde. Globalement, le débit de Valkey était supérieur de 30 % à celui de Redis pour les opérations SET et de 60 % pour les opérations GET. Parallèlement, par rapport à Redis, Valkey a démontré une réduction de XNUMX % de la latence SET et de XNUMX % de la latence GET.

Une analyse distincte a été menée sur l'évolution du débit et des délais en fonction du nombre de processeurs parallèles en mode de traitement d'E/S multithread. Jusqu'à 3 threads, Valkey et Redis affichent des résultats quasiment identiques, mais c'est ensuite Valkey qui prend le dessus. Avec 6 threads sur un système de 8 VCPU, les performances de Valkey atteignaient 678 563 requêtes SET par seconde, et celles de Redis 256 400 requêtes par seconde, avec une limite de 832 connexions simultanées. Lorsque le nombre de connexions atteignait XNUMX, les performances de Valkey atteignaient XNUMX XNUMX requêtes SET par seconde.

Français Après avoir optimisé la gestion des interruptions dans le système pour réduire le nombre de changements de contexte dans Valkey, nous avons réussi à augmenter les performances à 999.8 mille requêtes SET par seconde. L'essentiel de l'optimisation s'est réduit à l'allocation de 2 VCPU pour la gestion des interruptions et à la liaison des 6 VCPU restants aux threads de traitement des E/S Valkey et Redis pour éliminer la migration des gestionnaires entre les processeurs. sudo ethtool -L ens34 combined 2 # limiter le nombre de gestionnaires d'IRQ à 2 grep ens34 /proc/interrupts # voir quels gestionnaires sont impliqués (99 et 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # lier le gestionnaire 99 au cœur 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # lier le gestionnaire 100 au cœur 2 # Démarrer le SGBD (pour Redis, remplacer valkey/valkey:8.1.1 par redis:8.0) avec la liaison du conteneur aux cœurs de processeur 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
Pour les tests de performances, la commande suivante a été utilisée : 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
Source: opennet.ru
