Jsou prezentovány výsledky testování nejnovějších verzí systémů pro správu databází Redis 8.0 a Valkey 8.1, ve kterých byly deklarovány významné optimalizace výkonu. Ve všech provedených testech překonal fork vyvinutý komunitou původní projekt, a to především díky implementaci nového mechanismu pro vícevláknové zpracování vstupu/výstupu v asynchronním režimu ve Valkey, který do projektu převedla společnost Amazon.
V testovacím prostředí AWS Graviton4 c8g.2xlarge s 8 VCPU dosáhl Valkey 8.1.1 propustnosti 999.8 tisíce požadavků SET za sekundu, zatímco Redis 8.0 dosáhl úrovně 729.4 tisíce požadavků za sekundu. Celkově byla propustnost Valkey o 37 % vyšší než u Redisu pro operace SET a o 16 % vyšší pro GET. Zároveň ve srovnání s Redisem Valkey prokázal 30% snížení latence SET a 60% snížení latence GET.

Samostatná analýza byla provedena zaměřující se na změnu propustnosti a zpoždění v závislosti na počtu paralelních procesorů v režimu vícevláknového zpracování I/O. Do 3 vláken vykazují Valkey a Redis přibližně stejné výsledky, ale poté se do vedení ujímá Valkey. S 6 vlákny na systému s 8 VCPU byl výkon Valkey 678 tisíc požadavků SET za sekundu a Redis 563 tisíc požadavků za sekundu s limitem 256 simultánních připojení. Když se počet připojení zvýšil na 400, výkon Valkey se zvýšil na 832 tisíc požadavků SET za sekundu.

Po optimalizaci zpracování přerušení v systému za účelem snížení počtu přepínání kontextu ve Valkey se nám podařilo zvýšit výkon na 999.8 tisíce požadavků SET za sekundu. Podstata optimalizace spočívala v alokaci 2 VCPU pro zpracování přerušení a navázání zbývajících 6 VCPU na vlákna zpracování I/O Valkey a Redis, aby se eliminovala migrace obslužných rutin mezi CPU. sudo ethtool -L ens34 combined 2 # omezení počtu obslužných rutin IRQ na 2 grep ens34 /proc/interrupts # zobrazení, které obslužné rutiny jsou zapojeny (99 a 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # navázání obslužné rutiny 99 na jádro 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # navázání obslužné rutiny 100 na jádro 2 # Spuštění DBMS (pro Redis změňte valkey/valkey:8.1.1 na redis:8.0) s vazbou kontejneru na jádra 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
Pro testování výkonu byl použit následující příkaz: 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
Zdroj: opennet.ru
