注册 登录
自由的生活_软路由 返回首页

心想事成的个人空间 https://bbs.routerclub.com/?681 [收藏] [复制] [分享] [RSS]

日志

gettimeofday 和 linux vDSO

已有 1279 次阅读2013-2-14 00:14 | linux

到微-博里面说道gettimeofday的优化问题,如果程序需要调用 gettimeofday 太频繁的话,都是设置定时器,比如一毫秒的,获取到时间保存下来作为cache提供,这样可以减少 gettimeofday的数量。这个之前就了解了。

      还提到 Linux  vDSO 的,其实我之前也一直以为是个  系统调用的,但其实由于 Linux  vDSO (Virtual Dynamically-lined Shared Object),其实这个内核函数已经映射到用户空间了,虚拟了一个so共享模块,调用起来应该和直接调用用户空间 的c函数一样的了,没有系统调用的开销了。  在Linux系统上面 自己查看程序的so文件映射应该卡伊看到这个vdso的的。所以gettimeofday的代价应该比较小的了,之前有同事说他测试过确实还是很快的。

          比较有意思的还有,这个vdso虚拟模块地址,为了安全起见,那个映射地址应该是随机的,避免hook


内核中vdso的简单文档和导出的函数,可以看到主要是几个时间函数。

http://lxr.linux.no/linux+v3.7/Documentation/ABI/stable/vdso

http://lxr.linux.no/linux+v3.7/arch/x86/vdso/vdso.lds.S


 其实类似的优化机制还有vsyscall,都是把内核空间的东西直接映射给用户空间使用,避免系统调用的开销。

On vsyscalls and the vDSO  

http://lwn.net/Articles/446528/


涉及vdso优化gettimeofday的原理和如何自己添加vdso函数,很不错的文章

Creating a vDSO: the Colonel 's Other Chicken

http://www

.linuxjournal

.com

/content/creating-vdso-colonels-other-chicken



csdn博客里面一篇文章

http://blog.csdn.net/wlp600/article/details/6886162


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-5-10 17:03 , Processed in 0.040846 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

返回顶部