用于状态机复制的垃圾收集成本 - Aleksey Charapko

作者有一堆不断被会议拒绝的论文,这些论文因缺乏新颖性被评审专家认为无趣,多为观察性或依赖旧技术。最近有一篇关于在不同语言中构建状态机复制的论文即将发表,作者对比了垃圾回收语言(如 Java、Go)和手动内存管理语言(如 C++、Rust)。

  • 最初以 MultiPaxos 算法设计 SMR 系统并转化为伪代码,选择 Java、C++、Go、Rust 四种语言测试,Java 和 C++为“传统”语言,Go 和 Rust 为“新语言”。
  • 网络方面,原计划在四种语言中都使用 gRPC,但 Rust 的 Tonic 库表现不佳,被迫改用 TCP 实现。
  • 在 3 服务器设置下进行实验,测量每种语言实现的最大“实际”吞吐量,在内存从 32GB 减少到 5GB 和 vCPU 从 8 减少到 2 的两种实验条件下,对比“传统”语言(Java 与 C++)和“新”语言(Go 与 Rust)的性能。

    • “传统”语言中,Java 在内存减少时性能大幅下降,而 C++性能较稳定,且 Java 平均 CPU 利用率降低但方差增大,说明有垃圾回收成本。
    • “新”语言性能与“传统”语言类似,且能更直接地观察到 GC 活动,随着可用内存减少,用于垃圾回收的 CPU 时间增加。
  • 作者强调实验是在最大尾延迟约束下进行的,若不考虑延迟,所有系统都能达到更高的绝对最大吞吐量。

总的来说,通过在不同语言中的实验,展示了不同语言在构建状态机复制时的性能特点和差异。

阅读 12
0 条评论