OS X上的OCaml时间分析

时间:2014-08-03 15:39:40

标签: profiling ocaml

在没有工作gprof的情况下,我可以使用哪些其他工具在OS X上进行分析?

(我知道这个穷人的方法,但更喜欢不需要手动代码检测的东西)

到目前为止,我没有安装完整的Xcode并尝试使用Activity Monitor,但我不确定我做得对吗?

详细说明: 我已经设法使用ocamlbuild和" .p.native"编译我的项目进行时间分析。建立目标。然后,我在Mac OS X 10.9上使用Activity Monitor来对正在运行的进程进行采样。这提供了关于OCaml内部的大量输出,例如垃圾收集,但是我没有看到来自我的模块的正确注释的函数名称。

输出的一个片段:

Call graph:
    2109 Thread_55861   DispatchQueue_1: com.apple.main-thread  (serial)
      542 .L1099  (in atest.p.native) + 18  [0x101a89956]
      + 210 caml_weak_get  (in atest.p.native) + 278  [0x101ac79e6]
      + ! 87 caml_alloc_small  (in atest.p.native) + 22  [0x101ab75e6]
      + ! : 70 mcount  (in libsystem_c.dylib) + 32,37,...  [0x7fff87545620,0x7fff87545625,...]
      + ! : 10 mcount  (in libsystem_c.dylib) + 59  [0x7fff8754563b]
      + ! : | 10 moncount  (in libsystem_c.dylib) + 0,1,...  [0x7fff8754d3a5,0x7fff8754d3a6,...]
      + ! : 7 DYLD-STUB$$moncount  (in libsystem_c.dylib) + 0  [0x7fff875c549e]
      + ! 68 caml_alloc_small  (in atest.p.native) + 1,128,...  [0x101ab75d1,0x101ab7650,...]
      + ! 46 caml_alloc_small  (in atest.p.native) + 87  [0x101ab7627]
      + ! : 40 caml_minor_collection  (in atest.p.native) + 90  [0x101ab624a]

我看到很多类似于.L1099的符号,但几乎没有符号类型Module-name_function-name_unique-number的正确名称,这是我对阅读OCaml手册所期望的。令人困惑的是,一些符号看起来确实是人类可读的 - 但不足以使它们有用。

另一个片段,其中最后一行是来自我自己的模块的函数

Sort by top of stack, same collapsed (when >= 5):
        mcount  (in libsystem_c.dylib)        617
        caml_weak_get  (in atest.p.native)        256
        caml_alloc_small  (in atest.p.native)        97
        caml_modify  (in atest.p.native)        94
        moncount  (in libsystem_c.dylib)        93
        caml_c_call  (in atest.p.native)        67
        mark_slice  (in atest.p.native)        42
        caml_weak_set  (in atest.p.native)        36
        caml_page_table_lookup  (in atest.p.native)        34
        camlRandom__bits_1038  (in atest.p.native)        30
        sweep_slice  (in atest.p.native)        24
        DYLD-STUB$$mcount  (in atest.p.native)        23
        DYLD-STUB$$moncount  (in libsystem_c.dylib)        18
        compare_val  (in atest.p.native)        16
        .L327  (in atest.p.native)        15
        .L621  (in atest.p.native)        15
        .L1202  (in atest.p.native)        14
        .L1205  (in atest.p.native)        14
        .L1173  (in atest.p.native)        12
        .L1113  (in atest.p.native)        11
        .L1281  (in atest.p.native)        11
        .L1310  (in atest.p.native)        11
        caml_fl_allocate  (in atest.p.native)        11
        caml_oldify_one  (in atest.p.native)        11
        caml_weak_blit  (in atest.p.native)        11
        .L1099  (in atest.p.native)        10
        .L1150  (in atest.p.native)        10
        .L135  (in atest.p.native)        10
        .L149  (in atest.p.native)        10
        .L295  (in atest.p.native)        10
        caml_alloc_shr  (in atest.p.native)        10
        .L148  (in atest.p.native)        9
        .L268  (in atest.p.native)        9
        invert_pointer_at  (in atest.p.native)        9
        .L1135  (in atest.p.native)        8
        .L1154  (in atest.p.native)        8
        .L1278  (in atest.p.native)        8
        allocate_block  (in atest.p.native)        8
        .L1114  (in atest.p.native)        7
        .L1118  (in atest.p.native)        7
        .L1172  (in atest.p.native)        7
        .L131  (in atest.p.native)        7
        camlReact__occurs_1470  (in atest.p.native)        7
        camlReactor__compare_1235  (in atest.p.native)        7

3 个答案:

答案 0 :(得分:1)

Poor man's profiler根本不需要任何代码检测。看到这个example of usage,虽然对于分配探查器,但想法是一样的。

<shameless plug>您还可以使用现成的pmp脚本。</shameless plug>

答案 1 :(得分:1)

由于没有人提出肯定的答案,似乎目前没有工具可用于在os x上对ocaml程序进行易于使用的时间分析。

答案 2 :(得分:1)

一个可用的解决方案是landmarks库,它允许手动或自动检测代码,并包含CPU周期计数器,来自GC的分配信息和挂钟定时。适用于OS X,可在必要时进行细粒度分析。