Paghahambing ng pagganap ng Valkey at Redis DBMS

Ang mga resulta ng pagsubok sa mga pinakabagong release ng Redis 8.0 at Valkey 8.1 DBMS ay ipinakita, kung saan idineklara ang mga makabuluhang pag-optimize ng pagganap. Sa lahat ng mga pagsubok na isinagawa, ang tinidor na binuo ng komunidad ay nalampasan ang orihinal na proyekto, pangunahin dahil sa pagpapatupad sa Valkey ng isang bagong mekanismo para sa multi-threaded input/output processing sa asynchronous mode, na inilipat sa proyekto ng Amazon.

Sa AWS Graviton4 c8g.2xlarge test environment na may 8 VCPU, nakamit ng Valkey 8.1.1 ang throughput na 999.8 thousand SET requests per second, habang ang Redis 8.0 ay nakamit ang level na 729.4 thousand na request kada segundo. Sa pangkalahatan, ang throughput ng Valkey ay 37% na mas mataas kaysa sa Redis para sa mga operasyon ng SET at 16% na mas mataas para sa GET. Kasabay nito, kumpara sa Redis, nagpakita si Valkey ng 30% na pagbawas sa SET at 60% na pagbawas sa GET latency.

 Paghahambing ng pagganap ng Valkey at Redis DBMS

Ang isang hiwalay na pagsusuri ay isinagawa ng pagbabago sa throughput at mga pagkaantala depende sa bilang ng mga parallel na processor sa multi-threaded I/O processing mode. Hanggang sa 3 thread, Valkey at Redis ay nagpapakita ng humigit-kumulang pantay na mga resulta, ngunit pagkatapos ay si Valkey ang nangunguna. Sa 6 na mga thread sa isang system na may 8 VCPU, ang pagganap ng Valkey ay 678 libong SET na kahilingan sa bawat segundo, at ang Redis ay 563 libong kahilingan bawat segundo na may limitasyon na 256 sabay-sabay na koneksyon. Nang tumaas ang bilang ng mga koneksyon sa 400, tumaas ang pagganap ni Valkey sa 832 libong mga kahilingan sa SET bawat segundo.

 Paghahambing ng pagganap ng Valkey at Redis DBMS

Pagkatapos i-optimize ang interrupt handling sa system para bawasan ang bilang ng mga context switch sa Valkey, nagawa naming taasan ang performance sa 999.8 thousand SET request per second. Ang esensya ng pag-optimize ay bumaba sa paglalaan ng 2 VCPU para sa interrupt na paghawak at pag-uugnay sa natitirang 6 na VCPU sa mga thread ng pagproseso ng Valkey at Redis I/O upang maalis ang paglipat ng mga humahawak sa pagitan ng mga CPU. sudo ethtool -L ens34 combined 2 # limitahan ang bilang ng mga IRQ handler sa 2 grep ens34 /proc/interrupts # tingnan kung aling mga handler ang kasali (99 at 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # bind handler 99 sa core 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # bind handler 100 to core 2 # Simulan ang DBMS (para sa Redis, palitan ang valkey/valkey:8.1.1 sa redis:8.0) na may container na nagbubuklod sa mga core ng CPU 2-7 docker run —network=»host» —rm \=2-cpus″ valkey/valkey:7 \ —save «» —kalakip na hindi —io-threads 8.1.1 \ —protected-mode no —maxmemory 6gb

Para sa pagsubok sa pagganap, ginamit ang sumusunod na command: 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 \ —mga thread 256 -d 3000000

Pinagmulan: opennet.ru

Magdagdag ng komento