Я работаю над проектом (язык программирования) и начинаю выполнять профилирование. Когда я запускаю время на моем факториальном тесте, я получаю следующее:
burton@smokey:~/repl$ time tests/fact.repl
real 0m4.451s
user 0m1.820s
sys 0m2.620s
Моя проблема со временем системы. Я не делаю никаких системных вызовов, кроме чтения входных файлов (нет вывода). Это должно быть почти полностью привязанное к пользователю приложение. Я попытался запустить strace -c, чтобы увидеть, есть ли какие-то ошибочные системные вызовы, занимающие много времени, но ничего не нашел. Gprof также не дает мне ответов.
Существуют ли какие-либо другие инструменты для определения того, что занимает столько системного времени в моем приложении? Меня просто обманывает команда времени? Когда я запускаю sbcl, выполняя те же вычисления, системное время составляет около 0,03 секунды и то, на что я надеюсь.
Вот полный вывод strace -c:
burton@smokey:~/repl$ strace -c tests/fact.repl
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
-nan 0.000000 0 2 read
-nan 0.000000 0 3 open
-nan 0.000000 0 2 close
-nan 0.000000 0 3 fstat
-nan 0.000000 0 12 mmap
-nan 0.000000 0 4 mprotect
-nan 0.000000 0 1 munmap
-nan 0.000000 0 16 brk
-nan 0.000000 0 2 rt_sigaction
-nan 0.000000 0 4 rt_sigprocmask
-nan 0.000000 0 1 1 ioctl
-nan 0.000000 0 3 3 access
-nan 0.000000 0 1 execve
-nan 0.000000 0 1 arch_prctl
-nan 0.000000 0 2 setrlimit
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 57 4 total