Pateikiami naujausių „Redis 8.0“ ir „Valkey 8.1“ DBMS versijų testavimo rezultatai, kuriuose deklaruoti reikšmingi našumo optimizavimai. Visuose atliktuose bandymuose bendruomenės sukurta atšaka pranoko pradinį projektą, daugiausia dėl to, kad „Valkey“ įdiegė naują daugiagijas įvesties / išvesties apdorojimo asinchroniniu režimu mechanizmą, kurį projektui perkėlė „Amazon“.
„AWS Graviton4 c8g.2xlarge“ bandymo aplinkoje su 8 VCPU „Valkey 8.1.1“ pasiekė 999.8 tūkst. SET užklausų per sekundę pralaidumą, o „Redis 8.0“ – 729.4 tūkst. užklausų per sekundę lygį. Apskritai „Valkey“ pralaidumas SET operacijoms buvo 37 % didesnis nei „Redis“, o GET operacijoms – 16 % didesnis. Tuo pačiu metu, palyginti su „Redis“, „Valkey“ pademonstravo 30 % mažesnį SET ir 60 % mažesnį GET delsą.

Atskira analizė buvo atlikta našumo ir vėlavimų pokyčio, priklausančio nuo lygiagrečių procesorių skaičiaus daugiagijame įvesties/išvesties apdorojimo režime, analizė. Iki 3 gijų „Valkey“ ir „Redis“ rodo maždaug vienodus rezultatus, tačiau tada „Valkey“ pirmauja. Esant 6 gijoms sistemoje su 8 VCPU, „Valkey“ našumas buvo 678 tūkst. SET užklausų per sekundę, o „Redis“ – 563 tūkst. užklausų per sekundę, o vienu metu gali būti prisijungta ne daugiau kaip 256 jungčių. Kai jungčių skaičius padidėjo iki 400, „Valkey“ našumas padidėjo iki 832 tūkst. SET užklausų per sekundę.

Optimizavus pertraukimų apdorojimą sistemoje, siekiant sumažinti kontekstinių perjungiklių skaičių „Valkey“, mums pavyko padidinti našumą iki 999.8 tūkstančio SET užklausų per sekundę. Optimizavimo esmė buvo skirti 2 VCPU pertraukimų apdorojimui ir likusius 6 VCPU susiejimas su „Valkey“ ir „Redis“ įvesties/išvesties apdorojimo gijomis, siekiant panaikinti tvarkyklių migraciją tarp procesorių. sudo ethtool -L ens34 combined 2 # apriboti IRQ tvarkyklių skaičių iki 2 grep ens34 /proc/interrupts # pamatyti, kurie tvarkyklės yra įtrauktos (99 ir 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # susieti tvarkyklę 99 su 1 branduoliu echo 2 | sudo tee /proc/irq/100/smp_affinity # susieja tvarkyklę 100 su 2 branduoliu # Paleidžia DBVS (Redis atveju pakeiskite valkey/valkey:8.1.1 į redis:8.0) su konteinerio susiejimu su 2–7 procesoriaus branduoliais 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
Našumo testavimui buvo naudojama ši komanda: 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
Šaltinis: opennet.ru
