紧密访问OCaml次要GC信息

时间:2019-04-25 22:26:09

标签: performance garbage-collection ocaml ffi

如何快速获取 少量收藏?我试过了...

let get_minor_collection_count () =
  let stat = Gc.quick_stat ()
  in stat.minor_collections

...,但是ocamlopt版本4.07.1发出的X64汇编代码看起来像这样:

_camlDemouser2__get_minor_collection_count_2666:
    subq    $8, %rsp
    movq    $1, %rdi
    movq    _caml_gc_quick_stat@GOTPCREL(%rip), %rax
    call    _caml_c_call
    movq    _caml_young_ptr@GOTPCREL(%rip), %r11
    movq    (%r11), %r15
    movq    24(%rax), %rax
    addq    $8, %rsp
    ret

如果我使用C代码访问caml_stat_minor_collections,则访问本身的速度很快 1 ,但是必须使用_caml_c_call会产生较高的费用像这样的小型C函数。

我可以采取什么措施来纠正这种情况?

  1. 希望将来的ocaml版本添加类似Gc.get_minor_free(添加4.03.0)的功能,对于像我这样的GC黑客来说,这是一个类似的小功能:)

  2. 还是应该深入研究ocamlopt使用的内部IL?

  3. 或者flambda可以帮助我吗? RTFM的答案是可以的:)

提前感谢您的想法/建议/代码段!


1: clang发出movq _caml_stat_minor_collections@GOTPCREL(%rip), %rax

0 个答案:

没有答案