【发布时间】:2011-09-14 03:20:34
【问题描述】:
我需要分析我正在使用 strace 的应用程序的性能。但是,我真的不知道如何解释 strace 发出的各种系统调用。其中一些示例如下:
(A) lseek(3, 1600, SEEK_SET) = 1600
(B) write(3, "G_DATA 300 0 "..., 800) = 800
(C) close(3) = 0
(D) mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b600b179000
(E) munmap(0x2b600b179000, 4096) = 0
(F) fstat(3, {st_mode=S_IFREG|0644, st_size=1600, ...}) = 0
如果有人能用简单的英语简要解释从 (A) 到 (F) 的这些行在 I/O、传输的数据、对性能的重要性等方面的真正含义,我将不胜感激。
我浏览了 strace 的手册页,但仍然不是很自信。如果您有任何其他建议让我阅读,那就太好了。
我有一些操作系统方面的背景知识,并且了解系统调用、内存、虚拟内存、调度等是什么。
【问题讨论】:
-
strace 更像是调试工具而不是分析器。你真的在寻找像 gprof 这样的东西吗?
-
我同意。因为'strace'只会显示系统调用,你能做的最好的就是看到系统调用之间有很大的时间间隔,并试图找出程序在这些调用之间做了什么,这些调用花了这么长时间。这不是一个很好的剖析方式。相反,使用“callgrind”(“valgrind”的一部分)并使用“kcachegrind”分析结果。或者使用 gprof、sysprof、oprofile 等。
-
您应该阅读此处执行的系统调用的联机帮助页。运行
man lseek、man open、man mmap等等。
标签: c linux operating-system system-calls strace