我在Linux上使用C,而我的程序具有高CPU密度和I / O密度。使用time命令显示我的程序有很多开销:
real 1m4.639s
user 0m53.929s
sys 0m9.747s
可以找出'sys 0m9.747s'的成本并减少它吗?
=============================================== ==
对不起,如果没有代码这个问题不容易回答,但是我的代码太长了,无法在这里发布。所以任何提示或线索也会这样做。谢谢
答案 0 :(得分:7)
系统CPU时间是内核为进程执行系统调用所花费的时间。您可以使用strace
找出您的流程正在执行的系统调用。
也许您有许多小型read系统调用(或write个)。您可以通过增加缓冲区大小来降低其数量(因此每个read
和write
将传输更多字节)。请参阅this和that相关问题的答案。
您还可以使用mmap将文件投影到(虚拟)内存中;对于某种磁盘I / O,这可能是更好的方法。
但我不会专注于系统时间。它似乎只占CPU时间的15%,这是一个合理的比例。
我建议对您的计划进行概要分析(使用gprof
或oprofile
)并找出瓶颈所在。
答案 1 :(得分:3)
这是一个非常开放的问题,如果没有更多信息,问题的范围有多广,没有具体的正确答案。也就是说,我建议您使用类似valgrind
的内容来分析您的应用程序,找出代码中哪些特定功能花费最多时间,然后进行优化。
除此之外,您应该专注于用户土地上的时间。在53秒和9秒的系统时间内,您可能能够在那里优化更多。您可以更好地使用优化时间。