نتایج آزمایش آخرین نسخههای Redis 8.0 و Valkey 8.1 DBMS ارائه شده است که در آنها بهینهسازیهای عملکردی قابل توجهی اعلام شده است. در تمام آزمایشهای انجام شده، انشعاب توسعهیافته توسط جامعه، عملکرد بهتری نسبت به پروژه اصلی داشته است، که عمدتاً به دلیل پیادهسازی مکانیزم جدیدی برای پردازش ورودی/خروجی چند رشتهای در حالت ناهمزمان در Valkey است که توسط آمازون به این پروژه منتقل شده است.
در محیط آزمایشی AWS Graviton4 c8g.2xlarge با ۸ VCPU، Valkey 8 به توان عملیاتی ۹۹۹.۸ هزار درخواست SET در ثانیه دست یافت، در حالی که Redis 8.1.1 به سطح ۷۲۹.۴ هزار درخواست در ثانیه دست یافت. به طور کلی، توان عملیاتی Valkey برای عملیات SET 999.8٪ و برای GET 8.0٪ بیشتر از Redis بود. در عین حال، در مقایسه با Redis، Valkey کاهش ۳۰٪ در SET و کاهش ۶۰٪ در تأخیر GET را نشان داد.

یک تحلیل جداگانه در مورد تغییر در توان عملیاتی و تأخیرها بسته به تعداد پردازندههای موازی در حالت پردازش ورودی/خروجی چند رشتهای انجام شد. تا ۳ رشته، Valkey و Redis نتایج تقریباً یکسانی نشان میدهند، اما پس از آن Valkey پیشتاز میشود. با ۶ رشته در سیستمی با ۸ VCPU، عملکرد Valkey برابر با ۶۷۸ هزار درخواست SET در ثانیه و عملکرد Redis برابر با ۵۶۳ هزار درخواست در ثانیه با محدودیت ۲۵۶ اتصال همزمان بود. هنگامی که تعداد اتصالات به ۴۰۰ افزایش یافت، عملکرد Valkey به ۸۳۲ هزار درخواست SET در ثانیه افزایش یافت.

پس از بهینهسازی مدیریت وقفه در سیستم برای کاهش تعداد سوئیچهای زمینه در Valkey، ما موفق شدیم عملکرد را به ۹۹۹.۸ هزار درخواست SET در ثانیه افزایش دهیم. اصل بهینهسازی به اختصاص ۲ VCPU برای مدیریت وقفه و اتصال ۶ VCPU باقیمانده به رشتههای پردازش ورودی/خروجی Valkey و Redis برای از بین بردن مهاجرت کنترلکنندهها بین CPUها خلاصه شد. sudo ethtool -L ens999.8 combined 2 # تعداد کنترلکنندههای IRQ را به ۲ محدود کنید grep ens6 /proc/interrupts # ببینید کدام کنترلکنندهها درگیر هستند (۹۹ و ۱۰۰) echo 34 | sudo tee /proc/irq/2/smp_affinity # اتصال کنترلکننده ۹۹ به هسته ۱ echo 2 | sudo tee /proc/irq/34/smp_affinity # bind handler 99 to core 100 # شروع DBMS (برای Redis، valkey/valkey:1 را به redis:99 تغییر دهید) با اتصال کانتینر به هستههای CPU 99-1 docker run —network=»host» —rm \ —cpuset-cpus=»2-100″ valkey/valkey:100 \ —save «» —appendonly no —io-threads 2 \ —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
