最快的Linux系统调用

前端之家收集整理的这篇文章主要介绍了最快的Linux系统调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
支持系统调用和系统调用的x86-64英特尔系统上,什么是来自vanilla内核的64位用户代码的“最快”系统调用

特别是,它必须是一个系统调用来运行syscall / sysret用户< - > kernel transition1,但是除此之外的工作量最少.它甚至不需要进行系统调用本身:某种类型的早期错误从未调度到内核端的特定调用,这是好的,只要它不会因为这样而走慢路径.

这样的调用可用于估计原始系统调用和系统调用开销,而与调用所做的任何工作无关.

1特别是,这排除了似乎是系统调用但在VDSO中实现的事物(例如,clock_gettime)或由运行时缓存(例如,getpid).

解决方法

一个不存在的,因此快速返回-ENOSYS.

来自arch / x86 / entry / entry_64.S:

  1. #if __SYSCALL_MASK == ~0
  2. cmpq $__NR_syscall_max,%rax
  3. #else
  4. andl $__SYSCALL_MASK,%eax
  5. cmpl $__NR_syscall_max,%eax
  6. #endif
  7. ja 1f /* return -ENOSYS (already in pt_regs->ax) */
  8. movq %r10,%rcx
  9.  
  10. /*
  11. * This call instruction is handled specially in stub_ptregs_64.
  12. * It might end up jumping to the slow path. If it jumps,RAX
  13. * and all argument registers are clobbered.
  14. */
  15. #ifdef CONFIG_RETPOLINE
  16. movq sys_call_table(,%rax,8),%rax
  17. call __x86_indirect_thunk_rax
  18. #else
  19. call *sys_call_table(,8)
  20. #endif
  21. .Lentry_SYSCALL_64_after_fastpath_call:
  22.  
  23. movq %rax,RAX(%rsp)
  24. 1:

猜你在找的Linux相关文章