linux内核中的__read_mostly变量
2015-06-05 16:40
127 查看
linux内核中的__read_mostly变量
内核版本:2.6.14
在阅读socket源码的时候,有如下一句(net/socket.c):
static struct vfsmount *sock_mnt __read_mostly;
感觉__read_mostly很奇怪,就深入分析了一下。
__read_mostly原语将定义为存放在.data.read_mostly段中。
#if defined(CONFIG_X86) || defined(CONFIG_SPARC64)
#define __read_mostly __attribute__((__section__(".data.read_mostly")))
#else
#define __read_mostly
#endif
由此可见,我们可以将经常需要被读取的数据定义为 __read_mostly类型,这样Linux内核被加载时,该数据将自动被存放到Cache中,以提高整个系统的执行效率。另一方面,如果所在的平台没有Cache,或者虽然有Cache,但并不提供存放数据的接口(也就是并不允许人工放置数据在Cache中),这样定义为 __read_mostly类型的数据将不能存放在Linux内核中,甚至也不能够被加载到系统内存去执行,将造成Linux 内核启动失败。
解决的方法有两种:
修改include/asm/cache.h中的__ready_mostly定义为:#define __read_mostly
修改arch/xxx/kernel/vmlinux.S,将.data.read_mostly段的位置到实际内存空间中去,例如放置在 .data段之后等等。
此外,内核源码通过CONFIG_X86)和(CONFIG_SPARC64)来判断该怎样定义__read_mostly,因此在arm中这个宏没有意义。
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-12/76855.htm
linux内核中的__read_mostly变量
内核版本:2.6.14
在阅读socket源码的时候,有如下一句(net/socket.c):
static struct vfsmount *sock_mnt __read_mostly;
感觉__read_mostly很奇怪,就深入分析了一下。
__read_mostly原语将定义为存放在.data.read_mostly段中。
#if defined(CONFIG_X86) || defined(CONFIG_SPARC64)
#define __read_mostly __attribute__((__section__(".data.read_mostly")))
#else
#define __read_mostly
#endif
由此可见,我们可以将经常需要被读取的数据定义为 __read_mostly类型,这样Linux内核被加载时,该数据将自动被存放到Cache中,以提高整个系统的执行效率。另一方面,如果所在的平台没有Cache,或者虽然有Cache,但并不提供存放数据的接口(也就是并不允许人工放置数据在Cache中),这样定义为 __read_mostly类型的数据将不能存放在Linux内核中,甚至也不能够被加载到系统内存去执行,将造成Linux 内核启动失败。
解决的方法有两种:
修改include/asm/cache.h中的__ready_mostly定义为:#define __read_mostly
修改arch/xxx/kernel/vmlinux.S,将.data.read_mostly段的位置到实际内存空间中去,例如放置在 .data段之后等等。
此外,内核源码通过CONFIG_X86)和(CONFIG_SPARC64)来判断该怎样定义__read_mostly,因此在arm中这个宏没有意义。
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-12/76855.htm
相关文章推荐
- Linux_Geany使用指南
- Linux权限管理2——setuid、setgid、stricky bit
- Linux权限管理1——ACL权限
- linux简介和window的区别
- linux 文件和目录管理
- linux系统信息命令
- 对linux进程实时进行监控的方法
- linux内存管理源码分析 - 页框分配器
- linux serial构架分析及驱动开发(5)
- linux serial构架分析及驱动开发(6)
- linux serial构架分析及驱动开发(4)
- linux serial构架分析及驱动开发(3)
- linux serial构架分析及驱动开发(2)
- VMWare克隆或复制Linux虚拟机后无法上网的解决
- linux 删除文件夹及其内容,显示文件路径
- Linux iostat监测IO状态
- linux命令行界面下手工设置ip
- linux下数字转成字符串
- linux程序设计——文件操作(第三章)
- linux常用命令之login命令