RPython 的垃圾回收器(GC)能多快地进行分配?

主要观点:

  • 作者通过 RPython 基准程序测试 RPython GC 分配对象的速度,比较了不同情况下的性能。
  • 探讨了 RPython GC 的分配快速路径、与 Boehm GC 的对比、perf stats统计、GC 运行频率以及 JIT 生成的机器码等方面。
  • 还将运行在 RPython 和常规 Python 代码上的性能进行了对比。

关键信息和重要细节:

  • 测试代码通过在紧密循环中分配A类实例来测量分配速度,考虑了是否初始化字段等情况。
  • RPython 类型推断会找出A类实例的字段信息,64 位架构下一个A实例需 16 字节。
  • 为避免 RPython 静态优化移除分配,同时保持两个实例存活,通过特定方式修改代码。
  • perf stats可获取执行统计信息,如缓存引用、周期等,该循环能达到 >5 条指令/周期。
  • RPython GC 根据 L2 缓存大小确定托儿所大小为 4MiB,每次小收集很快,约 2%时间花在 GC 上。
  • 反汇编编译后的二进制代码可找到 RPython GC 分配的机器码逻辑,包含相关指针操作等。
  • 作为常规 Python 代码运行时,由于动态类型,用户定义类的实例更大,用int对象测试,JIT 生成的机器码不如 GCC 高效。

总结:通过一系列测试和分析,展示了 RPython GC 的分配性能及与其他情况的对比,体现了计算机硬件和软件设计在性能方面的特点。

阅读 8
0 条评论