如何使用SBCL的SB-SPROF分配分析?

时间:2009-01-12 09:39:23

标签: lisp common-lisp slime sbcl

更新:升级到SBCL 1.0.24解决了我的问题。 (虽然我也需要将SLIME升级到11-23-2008版本。稳定的2006-04-20版本以及CVS的负责人似乎不适用于SBCL 1.0.24。)

SBCL统计分析器的documentation表示除CPU使用率外,您还可以分析内存分配。然而,对于我的生活,我无法让它描述出一个简单的Lisp形式。以下是发生的事情的一个例子:

CL-USER> (require :sb-sprof)
("SB-SPROF")
CL-USER> (defun ! (n)
           (if (= n 1)
               1
               (* n (! (- n 1)))))
!
CL-USER> (sb-sprof:with-profiling (:mode :alloc :loop nil :show-progress t :max-samples 100 :report :flat)
           (dotimes (n 100)
             (print n)
             (! 10)))
===> 0 of 100 samples taken.

0 
1 
2 
3 
4 
Profiler sample vector full (12 traces / 1000 samples), doubling the size
Profiler sample vector full (17 traces / 2000 samples), doubling the size
Profiler sample vector full (25 traces / 4000 samples), doubling the size
Profiler sample vector full (36 traces / 8000 samples), doubling the size
Profiler sample vector full (52 traces / 16000 samples), doubling the size
Profiler sample vector full (74 traces / 32000 samples), doubling the size

此时,它通常会挂起。

有人有过这方面的成功吗?

1 个答案:

答案 0 :(得分:1)

适用于我(即没有挂起),除了你的例子很少,并且需要1ms才能运行所以你可能想要更多的样本并通过:LOOP T代替。