Прадстаўлены вынікі тэсціравання свежых выпускаў СКБД Redis 8.0 і Valkey 8.1, у якіх былі заяўлены значныя аптымізацыі прадукцыйнасці. Ва ўсіх праведзеных тэстах форк, які развіваецца супольнасцю, абагнаў арыгінальны праект, у асноўным дзякуючы ўкараненню ў Valkey новага механізму для шматструменнай апрацоўкі ўводу/высновы ў асінхронным рэжыме, перададзенага праекту кампаніяй Amazon.
У тэставым асяроддзі AWS Graviton4 c8g.2xlarge з 8 VCPU у Valkey 8.1.1 атрымалася дамагчыся прадукцыйнасці ў 999.8 тысяч SET-запытаў у секунду, у той час як у Redis 8.0 быў дасягнуты ўзровень у 729.4 тысяч запытаў у секунду. У агульным выглядзе прапускная здольнасць Valkey аказаўся вышэй Redis на 37% для аперацый SET і на 16% для GET. Пры гэтым у параўнанні з Redis праект Valkey прадэманстраваў зніжэнне затрымак пры апрацоўцы запытаў на 30% для аперацый SET і на 60% для аперацый GET.

Асобна праведзены аналіз змены прапускной здольнасці і затрымак у залежнасці ад ліку раўналежна выкананых апрацоўшчыкаў у рэжыме шматструменнай апрацоўкі ўводу/высновы. Да 3 патокаў Valkey і Redis паказваюць прыкладна роўныя вынікі, але потым наперад вырываецца Valkey. Пры 6 патоках на сістэме з 8 VCPU прадукцыйнасць Valkey склала 678 тысяч SET-запытаў у секунду, а Redis – 563 тысячы запытаў у секунду пры ліміце ў 256 адначасовых злучэнняў. Пры павелічэнні злучэнняў да 400 прадукцыйнасць Valkey вырасла да 832 SET-запытаў у секунду.

Пасля аптымізацыі апрацоўкі перапыненняў у сістэме для зніжэння колькасці пераключэння кантэксту ў Valkey атрымалася падняць прадукцыйнасць да 999.8 тысяч SET-запытаў у секунду. Сутнасць аптымізацыі звялася да вылучэння 2 VCPU для апрацоўкі перапыненняў і прывязкі 6 пакінутых VCPU да струменяў апрацоўкі ўводу/высновы Valkey і Redis, каб выключыць міграцыю апрацоўшчыкаў паміж CPU. sudo ethtool -L ens34 combined 2 # абмяжоўваем да 2 лік апрацоўшчыкаў IRQ grep ens34 /proc/interrupts # глядзім якія апрацоўшчыкі задзейнічаны (99 і 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # прывязваем апрацоўшчык 99 да ядра 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # прывязваем апрацоўшчык 100 да ядра 2 # Запускаем СКБД (для Redis памяняць valkey/valkey:8.1.1 на redis:8.0) c прывязкай кантэйнера да ядраў CPU 2-7 docker run —net -cpuset-cpus="2-7" valkey/valkey:8.1.1 \ -save "" -appendonly no -io-threads 6 \
Для тэставання прадукцыйнасці выкарыстоўвалася каманда: docker run -network="host" -rm -cpuset-cpus="2-7" \ valkey/valkey:8.0.1 valkey-benchmark \-h 172.31.4.92 -p -threads 6379 -d 100000000
Крыніца: opennet.ru
