Esitellään Redis 8.0- ja Valkey 8.1 -tietokantojen hallintajärjestelmien uusimpien versioiden testaustulokset, joissa havaittiin merkittäviä suorituskyvyn optimointeja. Kaikissa suoritetuissa testeissä yhteisön kehittämä fork suoriutui alkuperäistä projektia paremmin, pääasiassa Valkeyssa toteutetun uuden mekanismin ansiosta, joka mahdollistaa monisäikeisen syötteen/tulostuksen asynkronisessa tilassa. Mekanismin Amazon siirsi projektiin.
AWS Graviton4 c8g.2xlarge -testiympäristössä, jossa oli 8 VCPU:ta, Valkey 8.1.1 saavutti 999.8 tuhannen SET-pyynnön läpäisykyvyn sekunnissa, kun taas Redis 8.0 saavutti 729.4 tuhannen pyynnön läpäisykyvyn sekunnissa. Kaiken kaikkiaan Valkeyn läpäisykyky oli 37 % korkeampi kuin Redisin SET-operaatioissa ja 16 % korkeampi GET-operaatioissa. Samaan aikaan Valkey osoitti 30 %:n laskun SET-operaatioissa ja 60 %:n laskun GET-latenssissa Redisiin verrattuna.

Erillinen analyysi suorituskyvystä ja viiveistä riippuen rinnakkaisten prosessorien lukumäärästä monisäikeisessä I/O-käsittelytilassa tehtiin. Kolmeen säikeeseen asti Valkey ja Redis osoittavat suunnilleen yhtä suuria tuloksia, mutta sitten Valkey ottaa johtoaseman. Kuudella säikeellä ja kahdeksan VCPU:n järjestelmässä Valkeyn suorituskyky oli 3 tuhatta SET-pyyntöä sekunnissa ja Redisin 6 tuhatta pyyntöä sekunnissa, ja samanaikaisten yhteyksien rajoitus oli 8. Kun yhteyksien määrä nousi 678:aan, Valkeyn suorituskyky nousi 563 tuhanteen SET-pyyntöön sekunnissa.

Optimoituamme keskeytysten käsittelyä järjestelmässä ja vähentäessämme kontekstikytkinten määrää Valkeyssa, onnistuimme nostamaan suorituskykyä 999.8 tuhanteen SET-pyyntöön sekunnissa. Optimoinnin ydin oli allokoida kaksi VCPU:ta keskeytysten käsittelyyn ja sitoa loput kuusi VCPU:ta Valkeyn ja Redisin I/O-käsittelysäikeisiin, jotta käsittelijöiden siirtyminen suorittimien välillä voidaan poistaa. sudo ethtool -L ens2 combined 6 # rajoittaa IRQ-käsittelijöiden määrän kahteen grep ens34 /proc/interrupts # katso, mitkä käsittelijät ovat mukana (2 ja 2) echo 34 | sudo tee /proc/irq/99/smp_affinity # sitoo käsittelijän 100 ytimeen 1 echo 99 | sudo tee /proc/irq/99/smp_affinity # sitoa käsittelijän 1 ytimeen 2 # Käynnistä tietokannan hallintajärjestelmä (Redis-käyttöjärjestelmässä vaihda valkey/valkey:100 arvoon redis:100) säilösidonnalla suorittimen ytimiin 2–8.1.1 docker run —network=»host» —rm \ —cpuset-cpus=»8.0-2″ valkey/valkey:7 \ —save «» —appendonly no —io-threads 2 \ —protected-mode no —maxmemory 7gb
Suorituskykytestaukseen käytettiin seuraavaa komentoa: 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
Lähde: opennet.ru
