stat()是一个昂贵的系统调用吗?

时间:2013-06-17 14:11:54

标签: c linux

stat()系统调用真的很贵吗?我在某处读到这是一个昂贵的系统调用。是真的吗?如果有,还有其他选择吗?

4 个答案:

答案 0 :(得分:19)

在典型设置中,stat(2)fstat(2)lstat(2)是获取文件信息的唯一合理技术。如果您发现性能问题,那么分析您的应用程序并查看会发生什么是值得的。

要进行分析,请使用gcc -pg进行编译,然后使用gprof(1)运行可执行文件。

您可能会切换到使用像Qt这样的更大的库,但这不会处理任何性能问题,并且无论如何它们都可能使用stat(2)

因此,无论是否昂贵,都没有合理的选择。

也就是说,就像Jim Mcnamara的评论一样,正是由于这些原因,它并不昂贵。由于没有其他选择,glibc和linux程序员已尽可能提高性能。

答案 1 :(得分:6)

您始终可以将strace用于可执行文件。没有必要重新编译。此功能允许您获取每个系统调用的实际执行时间。

答案 2 :(得分:3)

问题出现为“需要昂贵的v / s”。

Unix上的每个进程都以两种模式运行:“用户空间”和“内核空间”,当系统调用如open(),write(),stat()时,进程从用户空间转换到内核模式很昂贵,但只有当我们没有对这个系统调用做任何有意义的事情时。如果你使用stat()只打印文件的最后访问时间而我们正在做什么,那么可能我应该避免。

首先,应该有一个很好的理由来调用stat()。 其次,如果您想比较不同代码段的相对执行时间,请使用任何分析工具,它将为您提供确切的统计信息,以证明哪个函数调用很昂贵,哪个不是。

答案 3 :(得分:0)

是的,与许多其他内核提供的函数调用和操作相比,stat()使用了很长时间。

但是,没有多少选择。如果你是绝望的,可以修补Linux内核以缓存对stat()的所有调用的结果,然后在每次创建,删除和相关修改时更新stat缓存。这是很多工作要实现,但应该加快统计数据。