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系统调用开销的主要内容,如果未能解决你的问题,请参考以下文章