Comparație între performanța SGBD-urilor Valkey și Redis

Sunt prezentate rezultatele testării celor mai recente versiuni ale SGBD-urilor Redis 8.0 și Valkey 8.1, în care au fost declarate optimizări semnificative de performanță. În toate testele efectuate, fork-ul dezvoltat de comunitate a depășit proiectul original, în principal datorită implementării în Valkey a unui nou mecanism de procesare a intrărilor/ieșirilor multi-thread în mod asincron, transferat în proiect de către Amazon.

În mediul de testare AWS Graviton4 c8g.2xlarge cu 8 VCPU-uri, Valkey 8.1.1 a atins un randament de 999.8 mii de solicitări SET pe secundă, în timp ce Redis 8.0 a atins un nivel de 729.4 mii de solicitări pe secundă. Per total, randamentul Valkey a fost cu 37% mai mare decât cel al Redis pentru operațiunile SET și cu 16% mai mare pentru GET. În același timp, comparativ cu Redis, Valkey a demonstrat o reducere cu 30% a latenței SET și cu 60% a latenței GET.

 Comparație între performanța SGBD-urilor Valkey și Redis

O analiză separată a fost efectuată asupra modificării debitului și a întârzierilor în funcție de numărul de procesoare paralele în modul de procesare I/O multi-threaded. Până la 3 thread-uri, Valkey și Redis prezintă rezultate aproximativ egale, dar apoi Valkey preia conducerea. Cu 6 thread-uri pe un sistem cu 8 VCPU-uri, performanța Valkey a fost de 678 mii de cereri SET pe secundă, iar cea a Redis a fost de 563 mii de cereri pe secundă, cu o limită de 256 de conexiuni simultane. Când numărul de conexiuni a crescut la 400, performanța Valkey a crescut la 832 mii de cereri SET pe secundă.

 Comparație între performanța SGBD-urilor Valkey și Redis

După optimizarea gestionării întreruperilor în sistem pentru a reduce numărul de schimbări de context în Valkey, am reușit să creștem performanța la 999.8 mii de cereri SET pe secundă. Esența optimizării s-a redus la alocarea a 2 VCPU-uri pentru gestionarea întreruperilor și legarea celor 6 VCPU-uri rămase la firele de execuție I/O Valkey și Redis pentru a elimina migrarea handlerelor între procesoare. sudo ethtool -L ens34 combined 2 # limitează numărul de handlere IRQ la 2 grep ens34 /proc/interrupts # vezi ce handlere sunt implicate (99 și 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # leagă handlerul 99 la nucleul 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # leagă handler-ul 100 la nucleul 2 # Pornește SGBD-ul (pentru Redis, schimbă valkey/valkey:8.1.1 în redis:8.0) cu legarea containerului la nucleele CPU 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

Pentru testarea performanței, a fost utilizată următoarea comandă: 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

Sursa: opennet.ru

Adauga un comentariu