如何阅读sbcl确定性分析器输出?

时间:2015-03-03 21:21:19

标签: profiling common-lisp profiler sbcl

如何解释deterministic profiler of sbcl的输出?

  seconds  |     gc     |   consed  | calls |  sec/call  |  name
-------------------------------------------------------       

seconds(总执行时间),calls(总呼叫金额),sec/call(每次通话的平均时间)和name(以及功能名称) )很直接。 consedgc的含义是什么?

我猜consed告诉已分配的内存(虽然在哪个单元?)并且我会说gc告诉gc回收的单位数量,但这两个值永远不会匹配甚至使用一个不同的表示方案(gc每3个数字有一个.,并且,一个。{/ p>

E.g。这个示例输出会告诉我什么(如果我猜对了,我会有大量的内存泄漏):

  seconds  |     gc     |   consed  | calls |  sec/call  |  name
-------------------------------------------------------     
     0.011 |      0.000 |   965,488 |     6 |   0.001817 | PACKAGE:NAME
-------------------------------------------------------
     0.011 |      0.000 |   965,488 |     6 |             | Total

1 个答案:

答案 0 :(得分:1)

如果您熟悉SBCL(缩写)下(free …)的输出,则列更易于理解:

Evaluation took:
  0.771 seconds of real time
  [ Run times consist of 0.061 seconds GC time, and 0.639 seconds non-GC time. ]
  166,575,680 bytes consed

在您的示例中,package:name位于调用堆栈的顶部(仅在已分析的函数中),持续0.011秒,并且GC不会影响它,因为它在此期间从未发生过或过快,并且965488字节分配了SBCL管理的内存。

每个GC后使用和未使用的内存量无法按功能细分,因为不会跟踪此信息。您可以通过评估(sb-ext:gc :full t) (room)之前和之后来衡量总体内存消耗,但请注意报告的数量略有波动,并且不包括外部代码分配的内存(C库,如果您的应用程序使用它们),以及最后一个REPL的三个结果和表达式为retained