Au fost prezentate rezultatele testării versiunilor recente ale SGBD-ului Redis 8.0 și Valkey 8.1, în care au fost anunțate optimizări semnificative ale performanței. Î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 pentru procesarea multiplă a inputului / outputului în mod asincron, transmis proiectului de compania Amazon.
În mediul de testare AWS Graviton4 c8g.2xlarge cu 8 VCPU, Valkey 8.1.1 a reușit să atingă o performanță de 999.8 mii cereri SET pe secundă, în timp ce în Redis 8.0 s-a atins un nivel de 729.4 mii cereri pe secundă. În general, lățimea de bandă a Valkey a fost cu 37% mai mare decât cea a Redis pentru operațiile SET și cu 16% pentru GET. În același timp, comparativ cu Redis, proiectul Valkey a demonstrat o reducere a latențelor în procesarea cererilor cu 30% pentru operațiile SET și cu 60% pentru operațiile GET.

Separat, a fost realizată o analiză a modificării lățimii de bandă și a latențelor în funcție de numărul de procesatori care rulează în paralel în modul de procesare multiplă a inputului / outputului. Până la 3 fire de execuție, Valkey și Redis prezintă rezultate aproximativ egale, dar apoi Valkey ia avans. La 6 fire de execuție pe un sistem cu 8 VCPU, performanța Valkey a fost de 678 mii cereri SET pe secundă, iar Redis — 563 mii cereri pe secundă la limita de 256 de conexiuni simultane. Când numărul de conexiuni a crescut la 400, performanța Valkey a crescut la 832 mii cereri SET pe secundă.

După optimizarea procesării întreruperilor în sistem pentru a reduce numărul de comutări de context, Valkey a reușit să își crească performanța până la 999.8 mii cereri SET pe secundă. Esența optimizării a fost dedicarea a 2 VCPU pentru procesarea întreruperilor și atribuirea celor 6 VCPU rămase firelor de procesare a inputului / outputului Valkey și Redis, pentru a evita migrarea procesatorilor între CPU. sudo ethtool -L ens34 combined 2 # limităm la 2 numărul de procesatori IRQ grep ens34 /proc/interrupts # vedem ce procesoare sunt implicate (99 și 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # atribuim procesorul 99 nucleului 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # atribuim procesorul 100 nucleului 2 # Pornim SGBD-ul (pentru Redis schimbați valkey/valkey:8.1.1 în redis:8.0) cu atașarea containerului la nucleele de 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 folosită comanda: 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.ro
