Unix系统调用开销

Posted

技术标签:

【中文标题】Unix系统调用开销【英文标题】:Unix system call overhead 【发布时间】:2014-03-29 14:36:53 【问题描述】:

在 Linux 上进行一个简单的非阻塞系统调用大约需要多少个时钟周期?

我会期待与 OS X 有什么不同吗?

我想知道诸如 setsockopt 之类的调用,它可能用于提供可选提示以提高性能,但有其自身的内在成本。

【问题讨论】:

请详细说明您要拨打的确切setsockopt电话 @BasileStarynkevitch 说,SO_SNDLOWAT。它应该只是设置一个内部变量并返回。 【参考方案1】:

这真的取决于系统调用和硬件。

进行系统调用的开销不是很大! this 提供不到一微秒(即一百个处理器时钟周期)。一些系统调用使用vdso(7) 来减少开销。

但是,对于给定的系统调用,内核正在做一些工作。根据实际涉及的系统调用,这可能需要很长时间。

对于setsockopt(2),它应该取决于您设置的选项。

总的来说,Linux 的 socket 实现还是相当不错的,大部分时间都花在了实际的网络上(即以太网等....)。

【讨论】:

实际上,由于其混合内核架构,我希望 Mac OS X 获得(可观的)第二名。当然,假设它确实取决于特定系统调用的性质是正确的。 更新:Spectre / Meltdown 缓解措施使系统调用成本显着增加。和1800 cycles on a Skylake 一样,大部分都在wrmsr 中用于刷新分支预测器。

以上是关于Unix系统调用开销的主要内容,如果未能解决你的问题,请参考以下文章

一次系统调用开销到底有多大?

09 linux011系统调用开销分析

09 linux011系统调用开销分析

Unix 上的递归 mkdir() 系统调用

Unix系统调用

Unix系统编程()close系统调用