高度并发工作负载的原子轮询间隔

主要观点:在开发[Balter]时,需确定 poll atomics 的频率以不影响数据准确性,Balter 是分布式负载测试框架,其内部有并发任务和场景协调器任务,通过 atomics 收集数据。介绍了 Rust 中的原子类型AtomicI32及在 Balter 中的使用,探讨了场景协调器循环运行的频率问题及相关实验。
关键信息

  • Balter 是分布式负载测试框架,内部有多种任务。
  • 原子类型AtomicI32可跨线程共享且无锁更新。
  • 在 Balter 中通过.fetch_add()方法更新原子类型。
  • 实验设置 100 个并发任务,测试不同 poll 间隔下的 TPS 及误差。
  • 发现 poll 间隔越小,测量 TPS 的误差越大,类似并发应用中的竞争问题。
  • 解释了使用原子类型避免锁但仍有竞争问题,.fetch_add()不易导致竞争,.swap()有开销易导致竞争但不知具体位置。
    重要细节
  • 实验中任务循环等待 10ms(有噪声)后更新原子类型,主函数以不同间隔 poll 基线原子类型和测试原子类型。
  • 不同 poll 间隔下的 TPS 均值、标准差及误差数据。
  • 重复实验用 10us 延迟时也有类似问题但误差更低。
  • 后续将研究替代控制算法使 Balter 更快,并计划深入研究。
  • 提到延迟数据收集及噪声对实验的影响。
阅读 7
0 条评论