gpt4 book ai didi

architecture - vDSO:为什么 linux 只将它们用于与时间相关的功能?

转载 作者:行者123 更新时间:2023-12-04 18:07:36 27 4
gpt4 key购买 nike

刚刚在 Linux 内核中搜索了 vdso Hook (例如在 kernel.org 上找到了 this),它目前似乎主要用于与时间相关的系统调用。这让我想到了两个问题:

  • 是否有计划很快使用 vDSO 接口(interface)的任何其他系统调用?
  • clock_gettime() 真的成为一个足够大的瓶颈来激发 vDSO 的设计吗?是否有任何特定类型的应用程序对此有所帮助?如果是,是哪种应用程序,应用程序的数量是多少?

为即时查找设计一个新的内核系统调用接口(interface)似乎很奇怪。我猜它有助于高性能服务器处理诸如时间戳请求-响应和日志之类的事情。但我想知道这里是否有人有比猜测更具体的细节。

最佳答案

vDSO 背后的原因

vDSO手册页是这样说的关于创建这个特殊库的原因:

Why does the vDSO exist at all? There are some system calls thekernel provides that user-space code ends up using frequently, tothe point that such calls can dominate overall performance. Thisis due both to the frequency of the call as well as the context-switch overhead that results from exiting user space and enteringthe kernel.

进一步阅读会告诉您用于在内核空间和用户空间之间共享数据的各种策略。特别是:

This information is also not secret—any applicationin any privilege mode (root or any unprivileged user) will getthe same answer.

注意:强调我的。

这告诉我们,通过 vDSO 接口(interface)提供的数据必须是公开的,系统上运行的任何进程无论如何都可以访问这些数据。这显然非常重要。

总而言之,我们有两个原因/限制将功能添加到 vDSO:

  1. 职能部门必须提供非 secret 信息
  2. 必须使用的功能非常多,因此非常值得转到 vDSO

可用函数

如果您进一步查看 vDSO 手册页,您会注意到各种实现支持的函数列表(参见 *ARCHITECTURE-SPECIFIC NOTES 部分)。这为我们提供了另一条信息:实现/可访问某某时的 Linux 版本。第一个可用的实现是在 Linux 2.5 中(late 2001,另请注意这是一个开发版本,因此第一个用户可用的版本是 2003 年的 2.6.1)。

我们在vDSO中发现了以下函数:

sigreturn
rt_sigreturn
sigtramp
sigtramp32
sigtramp_rt32
sigtramp_rt64

syscall_via_break
syscall_via_epc
vsyscall
get_syscall_map
lws_entry
linux_gateway_entry

gettimeofday
clock_gettime
clock_gettime64
clock_getres
time

getcpu
get_tbfreq
sync_dicache
sync_dicache_p5
flush_icache

getpid
getppid
set_tid_address
set_thread_pointer
datapage_offset

总的来说,我们看到了以下需求:

  • 信号
  • 系统/内核
  • 时间
  • CPU/缓存
  • 流程

对于 x86 处理器,它主要限于时间和 CPU。在i386中,也有信号相关的函数。

关于architecture - vDSO:为什么 linux 只将它们用于与时间相关的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22925406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com