تُعرض نتائج اختبار أحدث إصدارات Redis 8.0 وValkey 8.1 DBMS، والتي أُعلن فيها عن تحسينات كبيرة في الأداء. في جميع الاختبارات التي أُجريت، تفوقت النسخة الفرعية التي طورها المجتمع على المشروع الأصلي، ويعود ذلك أساسًا إلى تطبيق آلية جديدة في Valkey لمعالجة الإدخال/الإخراج متعددة الخيوط في الوضع غير المتزامن، والتي نقلتها أمازون إلى المشروع.
في بيئة اختبار AWS Graviton4 c8g.2xlarge مع 8 وحدات معالجة مركزية افتراضية (VCPU)، حقق Valkey 8.1.1 معدل إنتاجية بلغ 999.8 ألف طلب SET في الثانية، بينما حقق Redis 8.0 معدل إنتاجية بلغ 729.4 ألف طلب في الثانية. بشكل عام، كان معدل إنتاج Valkey أعلى بنسبة 37% من Redis لعمليات SET وأعلى بنسبة 16% لعمليات GET. في الوقت نفسه، وبالمقارنة مع Redis، أظهر Valkey انخفاضًا بنسبة 30% في عمليات SET و60% في زمن وصول GET.

أُجري تحليل منفصل للتغير في الإنتاجية والتأخيرات اعتمادًا على عدد المعالجات المتوازية في وضع معالجة الإدخال/الإخراج متعدد الخيوط. حتى ثلاثة خيوط معالجة، أظهر كلٌ من Valkey وRedis نتائج متقاربة، لكن Valkey كان الأسبق. مع ستة خيوط معالجة على نظام مزود بثمانية وحدات معالجة مركزية افتراضية (VCPU)، بلغ أداء Valkey 3 ألف طلب SET في الثانية، بينما بلغ أداء Redis 6 ألف طلب في الثانية بحد أقصى 8 اتصالاً متزامناً. عند زيادة عدد الاتصالات إلى 678، ارتفع أداء Valkey إلى 563 ألف طلب SET في الثانية.

بعد تحسين معالجة المقاطعات في النظام لتقليل عدد عمليات تبديل السياق في Valkey، تمكنا من زيادة الأداء إلى 999.8 ألف طلب SET في الثانية. تمحور جوهر التحسين حول تخصيص وحدتي معالجة افتراضيتين لمعالجة المقاطعات، وربط وحدات المعالجة الافتراضية الست المتبقية بخيوط معالجة الإدخال/الإخراج في Valkey وRedis، وذلك لتجنب انتقال المعالجات بين وحدات المعالجة المركزية. sudo ethtool -L ens2 combined 6 # تحديد عدد معالجات طلب المقاطعة (IRQ) بـ 34 grep ens2 /proc/interrupts # معرفة المعالجات المعنية (2 و34) echo 99 | sudo tee /proc/irq/100/smp_affinity # ربط المعالج 1 بالنواة 99 echo 99 | sudo tee /proc/irq/1/smp_affinity # ربط المعالج 2 بالنواة 100 # ابدأ تشغيل نظام إدارة قواعد البيانات (بالنسبة لـ Redis، غيّر valkey/valkey:100 إلى redis:2) مع ربط الحاوية بنوى وحدة المعالجة المركزية 8.1.1-8.0 docker run —network=»host» —rm \ —cpuset-cpus=»2-7″ valkey/valkey:2 \ —save «» —appendonly no —io-threads 7 \ —protected-mode no —maxmemory 8.1.1gb
لاختبار الأداء، تم استخدام الأمر التالي: 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
المصدر: opennet.ru
