主要观点:在开发[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 更快,并计划深入研究。
- 提到延迟数据收集及噪声对实验的影响。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。