免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2130 | 回复: 4
打印 上一主题 下一主题

Linux内核中的Cache段(原创) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-26 11:40 |只看该作者 |倒序浏览
最近移植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(12, 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(12, 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段之后等等

[ 本帖最后由 NeilWong 于 2008-12-26 11:51 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-12-26 22:56 |只看该作者
太强了,必须收藏。谢谢lz分享经验

论坛徽章:
8
2015年辞旧岁徽章
日期:2015-03-03 16:54:15午马
日期:2015-02-04 12:00:07羊年新春福章
日期:2015-02-04 11:57:56双子座
日期:2014-12-02 11:44:59金牛座
日期:2014-10-08 16:47:08狮子座
日期:2014-08-29 13:37:46巳蛇
日期:2014-08-26 17:32:29NBA常规赛纪念章
日期:2015-05-04 22:32:03
3 [报告]
发表于 2009-01-07 16:34 |只看该作者

回复 #1 NeilWong 的帖子

支持原创 谢谢楼主

论坛徽章:
0
4 [报告]
发表于 2009-01-07 16:36 |只看该作者
唉,真强,我是看不懂啊!

论坛徽章:
0
5 [报告]
发表于 2009-01-10 20:00 |只看该作者
学习学习,呵呵。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP