Kết quả thử nghiệm các phiên bản mới nhất của Redis 8.0 và Valkey 8.1 DBMS được trình bày, trong đó các tối ưu hóa hiệu suất đáng kể đã được công bố. Trong tất cả các thử nghiệm được tiến hành, nhánh do cộng đồng phát triển đã vượt trội hơn dự án gốc, chủ yếu là do việc triển khai trong Valkey một cơ chế mới để xử lý đầu vào/đầu ra đa luồng ở chế độ không đồng bộ, được Amazon chuyển giao cho dự án.
Trong môi trường thử nghiệm AWS Graviton4 c8g.2xlarge với 8 VCPU, Valkey 8.1.1 đạt được thông lượng là 999.8 nghìn yêu cầu SET mỗi giây, trong khi Redis 8.0 đạt được mức 729.4 nghìn yêu cầu mỗi giây. Nhìn chung, thông lượng của Valkey cao hơn 37% so với Redis đối với các hoạt động SET và cao hơn 16% đối với GET. Đồng thời, so với Redis, Valkey đã chứng minh được khả năng giảm 30% độ trễ SET và giảm 60% độ trễ GET.

Một phân tích riêng biệt đã được tiến hành về sự thay đổi trong thông lượng và độ trễ tùy thuộc vào số lượng bộ xử lý song song trong chế độ xử lý I/O đa luồng. Lên đến 3 luồng, Valkey và Redis cho thấy kết quả gần như bằng nhau, nhưng sau đó Valkey dẫn đầu. Với 6 luồng trên hệ thống có 8 VCPU, hiệu suất của Valkey là 678 nghìn yêu cầu SET mỗi giây và của Redis là 563 nghìn yêu cầu mỗi giây với giới hạn 256 kết nối đồng thời. Khi số lượng kết nối tăng lên 400, hiệu suất của Valkey tăng lên 832 nghìn yêu cầu SET mỗi giây.

Sau khi tối ưu hóa việc xử lý ngắt trong hệ thống để giảm số lượng chuyển đổi ngữ cảnh trong Valkey, chúng tôi đã tăng được hiệu suất lên 999.8 nghìn yêu cầu SET mỗi giây. Bản chất của việc tối ưu hóa là phân bổ 2 VCPU để xử lý ngắt và liên kết 6 VCPU còn lại với các luồng xử lý I/O của Valkey và Redis để loại bỏ việc di chuyển trình xử lý giữa các CPU. sudo ethtool -L ens34 combined 2 # giới hạn số lượng trình xử lý IRQ ở mức 2 grep ens34 /proc/interrupts # xem những trình xử lý nào có liên quan (99 và 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # liên kết trình xử lý 99 với core 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # liên kết trình xử lý 100 với lõi 2 # Khởi động DBMS (đối với Redis, thay đổi valkey/valkey:8.1.1 thành redis:8.0) với liên kết container với lõi 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
Để kiểm tra hiệu suất, lệnh sau đã được sử dụng: 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
Nguồn: opennet.ru
