Valkey • 解锁 100 万 RPS:通过 Valkey 体验三倍速度

主要观点:通过将大部分 I/O 操作转移到 I/O 线程,释放主线程的 CPU 周期来执行命令,但主线程仍有大量时间等待外部内存,介绍了用于增加并行内存访问次数以减少外部内存延迟对性能影响的技术。
关键信息

  • 现代处理器的推测执行技术可提前猜测条件操作结果并并行执行后续指令,动态数据结构虽有优势但会阻碍处理器推测未来内存加载指令。
  • 以获取链表数组中所有值之和的函数为例,交错执行链表扫描可实现 10 倍速提升,添加预取指令可进一步减少执行时间。
  • 在 Valkey 中,通过在执行命令前预取未来查找所需的内存地址,减少查找时间超过 80%,将内存访问分摊对性能的影响提高到每秒 119 万请求。
    重要细节
  • 在 AWS EC2 c7g.4xlarge 实例上进行测试,ARM 架构 16 核,为网络接口分配中断亲和性,如 eth0 的 48 到 55 行中断分配到不同核心。
  • 启动 Valkey 服务器时设置 --io-threads 9 --save --protected-mode no,主线程固定到特定核心 #3 以避免与 IRQ 处理核心冲突。
  • 运行基准测试时设置值大小为 512 字节、300 万个键、650 个客户端、50 个线程等参数,并注意数据库填充和性能稳定所需时间。Valkey 8.0 RC2 已可用于评估 I/O 线程和内存访问分摊功能。
阅读 23
0 条评论