繁体   English   中英

如何解释 strace output?

[英]How to interpret strace output?

我需要分析我正在使用 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 的手册页,但仍然不是很自信。 如果您有任何其他建议让我阅读,那就太好了。

我有一些操作系统的背景知识,并且了解系统调用、memory、虚拟 memory、调度等是什么。

为了理解这些,你必须熟悉 POSIX 系统调用。 它们是用户空间程序用来与 kernel 交互的接口。

lseekwriteclosemmapmunmapfstat都是系统调用,并记录在 linux 手册的第 2 节中。

简而言之, lseek将提供的文件描述符的内部指针移动到第二个参数指向的 position 字节,从SEEK_SET (开始)、 SEEK_CUR (当前位置)或SEEK_END (结束)开始。 对同一描述符的任何连续readwrite调用都将从该 position 开始其操作。 请注意, lseek并非针对所有类型的描述符都实现 - 它对磁盘上的文件有意义,但不适用于套接字或 pipe。

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

close关闭提供的描述符,并释放 kernel 中与其相关的任何资源。 请注意,每个进程对同时打开的描述符的数量都有限制,因此有时需要关闭描述符才能达到此限制。

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

munmap释放mmap 'ped memory。

fstat返回文件系统保存的有关文件的各种信息 - 大小、上次修改时间、权限等。

对于每个命令,都有一个手册页,您可以通过键入man和 C function 的名称来阅读它,例如man lseek (也检查apropos )。 他们也有传递参数的描述。

以下是简短的摘要:

  • lseek - 重新定位文件描述符的读/写文件偏移量
  • write - 从缓冲区写入文件描述符
  • close - 从每个进程 object 参考表中删除一个描述符
  • mmap - 将 memory 或 map 文件或设备分配到 memory
  • munmap - 删除指定地址范围的映射
  • fstat - 获取路径指向的文件状态

请注意,解释单个/随机系统对性能而言没有意义。 要测试这些系统调用的性能重要性,您应该使用-c参数,该参数可以计算每个系统调用的时间、调用和错误并报告摘要。 然后你可以阅读更多关于这些花费时间最长的内容。

要了解有关 output 和strace参数的更多信息,请查看man strace

另请参阅:如何将 shell 中的 strace 解析为纯文本?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM