Как использовать SBCL для профилирования распределения SB-SPROF? - PullRequest
4 голосов
/ 12 января 2009

Обновление: обновление до SBCL 1.0.24 решило мою проблему. (Хотя мне также нужно было обновить SLIME до версии 11-23-2008. Стабильная версия 2006-04-20, а также глава CVS, похоже, не работают с SBCL 1.0.24.)

Документация для статистического профилировщика SBCL указывает, что вы можете профилировать распределение памяти в дополнение к использованию ЦП. Однако, за всю мою жизнь, я не смог получить его в профиле больше, чем тривиальная форма 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 Ответ

1 голос
/ 12 января 2009

Работает для меня (то есть без зависания), за исключением того, что ваш пример очень мало работает и требует 1 мс для запуска, так что вы, вероятно, хотите взять больше семплов и передать: LOOP T вместо.

...