如何解释strace输出?

mkc*_*mkc 26 c linux operating-system system-calls strace

我需要分析我正在使用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
Run Code Online (Sandbox Code Playgroud)

如果有人能用简单的英语简单解释一下(A)到(F)中的这些行在I/O,数据传输,性能重要性等方面的含义,我将不胜感激.

我浏览了strace的手册,但仍然不是很自信.如果你有任何其他指示供我阅读,那就太好了.

我有一些关于操作系统的背景知识,并了解系统调用,内存,虚拟内存,调度等.

Bla*_*iev 24

为了理解这些,您必须熟悉POSIX系统调用.它们是用户空间程序用于与内核交互的接口.

lseek,write,close,mmap,munmapfstat都是系统调用和在linux手册的第2部分被记录.

简而言之,lseek将提供的文件描述符的内部指针移动到第二个参数指向的位置的字节,从SEEK_SET(开头),SEEK_CUR(当前位置)或SEEK_END(结束)开始.对同一描述符的任何连续readwrite调用都将从此位置开始执行操作.请注意,lseek没有为所有类型的描述符实现 - 它对磁盘上的文件有意义,但对套接字或管道没有意义.

write将提供的缓冲区复制到kernelspace并返回实际写入的字节数.根据描述符的类型,内核可以将数据写入磁盘或通过网络发送.这通常是一项代价高昂的操作,因为它涉及将此缓冲区传输到内核.

close关闭提供的描述符,释放内核中与之相关的任何资源.请注意,每个进程都有对同时打开的描述符数量的限制,因此有时需要关闭描述符以达不到此限制.

mmap是一个复杂的系统调用,用于许多目的,包括共享内存.然而,一般用法是为进程分配更多内存.在malloccalloc库函数通常在内部使用它.

munmap释放mmap'内存.

fstat 返回文件系统保存的有关文件大小,最后修改,权限等的各种信息.

  • @ketan:将`-r`选项传递给`strace` (2认同)