首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

为什么 Linux 系统调用会消耗较多资源

图 2 - 系统调用与函数调用耗时比较 上图中的 vDSO 全称是虚拟动态链接对象(Virtual Dynamically Shared Object、vDSO),它可以减少系统调用的消耗的时间,我们会在后面详细分析它的实现原理...vDSO 虚拟动态共享对象(virtual dynamic shared object、vDSO)是 Linux 内核对用户空间暴露内核空间部分函数的一种机制[^16],简单来说,我们将 Linux 内核中不涉及安全的系统调用直接映射到用户空间...linux-vdso.so.1 (0x00007fff2709c000)...内核中的 ELF 加载器会负责映射 vDSO 的内存页并设置辅助向量(Auxiliary Vector)中 AT_SYSINFO_EHDR,该标签存储了 vDSO 的基地址; 动态链接器会查询辅助向量中...AT_SYSINFO_EHDR,如果设置了该标签会链接 vDSO; libc 在初始化时会在 vDSO 中查找 __vdso_gettimeofday 符号并将符号链接到全局的函数指针上; 除了 gettimeofday

1.8K40

性能分析案例——虚拟机内存性能不符合预期?

top -p xxx 命令查看热点函数堆栈: 物理机的perf输出: [物理机perf] 虚拟机的perf输出: [虚拟机perf] 从top输出可以很清晰地看到,虚拟机上的clock_gettime和vdso_clock_gettime...那么,是什么原因导致了__vdso_clock_gettime的性能差异呢?...首先弄清楚什么是 vdso, vDSO(virtual dynamic shared object),是内核提供的一种加速机制,可以让用户态程序不通过系统调用而能执行内核里的函数,在进程加载时,自动加入进程的地址空间...我们来看看centos 7.4的3.10.0-693.el7内核版本中的__vdso_clock_gettime函数的实现: [image.png] sysbench调用clock_gettime的方式为...于是顺着如下调用链: __vdso_clock_gettime -> do_monotonic -> vgetsns 我们再来看vgetns的实现: [image.png] 从vgetns我们可知

2.2K111
领券