Linux内核中的Cache段
来源:互联网 发布:淘宝天刀代购会被骗么 编辑:程序博客网 时间:2024/06/05 22:37
Linux内核中的Cache段 —— NeilWong (neilwong@hotmail.com)
原文地址:http://blogold.chinaunix.net/u2/85263/showart_1743693.html
最近移植LEON3的内核时,了解了一些简单知识,特提出来供大家分享.
我们知道Linux 内核包含很多Section段,例如主要的.text段,.data段等等.但另外还有一种段,其可以在内核加载时自动存放到相应平台的Cache中,以方便被快速读取,该Section的名称为以下两种:
.data.cacheline_aligned
.data.read_mostly
其中.data.read_mostly是在比较新的内核中才出现的,
例如在Linux-2.6.11/fs/bio.c中的bvec_array是这样定义的:
#define BV(x) { .nr_vecs = x, .name = "biovec-"__stringify(x) }
static struct biovec_pool bvec_array[BIOVEC_NR_POOLS] = {
BV(1), BV(4), BV(16), BV(64), BV(128), BV(BIO_MAX_PAGES),
};
#undef BV
而在Linux-2.6.21或更高版本中,该定义已经增加了 __read_mostly短语
#define BV(x) { .nr_vecs = x, .name = "biovec-"__stringify(x) }
static struct biovec_slab bvec_slabs[BIOVEC_NR_POOLS] __read_mostly = {
BV(1), BV(4), BV(16), BV(64), BV(128), BV(BIO_MAX_PAGES),
};
#undef BV
__read_mostly原语将定义为存放在.data.read_mostly段中
include/asm/cache.h
#define __read_mostly __attribute__((__section__(".data.read_mostly")))
由此可见,我们可以将经常需要被读取的数据定义为 __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段之后等等
- Linux内核中的Cache段
- (转)Linux内核中的Cache段 —— __read_mostly
- Linux内核中的Cache段 —— __read_mostly
- Linux内核的文件Cache
- linux中的段错误
- Linux中的内存段
- Linux内核之page cache和buffer cache
- Linux 内核的文件 Cache 管理机制介绍
- Linux系统内核文件Cache管理机制
- Linux内核中cache的实现
- Linux内核中内存cache的实现
- Linux系统内核文件Cache管理机制
- Linux系统内核文件Cache管理机制简介
- Linux系统内核文件Cache管理机制简介
- Linux内核中内存cache的实现
- Linux系统内核文件Cache管理机制简介
- Linux 内核的文件 Cache 管理机制介绍
- Linux内核中内存cache的实现
- (jQuery)Cookie记住用户名和密码
- TopCoder SRM 144 DIV 2
- 解决:Could not find debuginfo pkg for dependency package glibc-2.12-1.132.el6_5.3.i686
- 清空stringstream缓存
- 基于Selenium2与Python自动化测试环境搭建
- Linux内核中的Cache段
- 使用不同的项目宏决定载入不同资源
- Android有效加载图片 之 有效加载大图片
- Java中的Enum的使用与分析
- Angular.js 指令 & Controller
- php新增Stomp模块
- OpenCV求取轮廓线
- 7种形式的Android Dialog使用举例
- 工作中遇到的异常处理