加载中...

vDSO(virtual Dynamic Shared Object)是 Linux 内核自动映射到每个用户进程地址空间的一小段共享库,把部分只读、高频的系统调用改为纯用户态函数执行,免去陷入内核的开销。
以获取时间为例:内核把当前时间数据维护在一页与用户空间共享的只读内存中,vDSO 中的 clock_gettime 直接读取该页并结合 CPU 时间戳寄存器(如 rdtsc)计算结果,全程不发生用户态与内核态切换。glibc 调用这些函数时自动优先走 vDSO。
x86-64 上典型导出包括 clock_gettime、gettimeofday、time、getcpu 等;不同架构导出集合不同。ldd 输出中的 linux-vdso.so.1 即为它,并无对应磁盘文件。
对每秒调用时间函数数十万次的交易、监控与游戏服务器,vDSO 将纳秒级敏感路径的开销降低一个数量级;它也取代了更早的 vsyscall 机制(后者因固定地址存在安全隐患)。

登录 后参与讨论
暂无讨论,来发表第一条评论吧