确定是什么导致Linux上的用户空间绑定可执行文件中的系统时间过多

我正在研究一个项目(编程语言),并且开始做一些分析.当我运行我的阶乘测试时,我得到以下信息:

burton@smokey:~/repl$time tests/fact.repl 

real    0m4.451s
user    0m1.820s
sys     0m2.620s

我的问题是系统时间.除了读取输入文件(没有输出)之外,我没有执行任何系统调用.这应该是一个几乎完全受用户限制的应用程序.我尝试运行strace -c来查看是否有任何错误的系统调用占用了很多时间,但是什么也没发现. Gprof也没有给我任何答案.

是否有其他工具可以找出在我的应用程序中花费了这么多系统时间的原因?我只是被时间命令欺骗了吗?当我运行sbcl进行相同的计算时,sys时间约为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
最佳答案
分配和分页内存所花费的时间算作系统时间.尝试/usr/bin/time tests / fact.repl-它显示页面错误的数量.

顺便说一句,“除了读取输入文件外,我没有进行任何系统调用”和“我正在分配内存”.

转载注明原文:确定是什么导致Linux上的用户空间绑定可执行文件中的系统时间过多 - 代码日志