您的位置 首页 被动

linux内核中的__read_mostly变量

内核版本:2614在阅读socket源码的时候,有如下一句(netsocketc):[plain]viewplaincopyprint?staticstructvfsmount*sock_mnt__r

内核版别:2.6.14

在阅览socket源码的时分,有如下一句(net/socket.c):

[plain]view plaincopy

print?

  1. staticstructvfsmount*sock_mnt__read_mostly;

感觉__read_mostly很古怪,就深入分析了一下。

__read_mostly原语将界说为寄存在.data.read_mostly段中。

[plain]view plaincopy

print?

  1. #ifdefined(CONFIG_X86)||defined(CONFIG_SPARC64)
  2. #define__read_mostly__attribute__((__section__(“.data.read_mostly”)))
  3. #else
  4. #define__read_mostly
  5. #endif

由此可见,咱们能够将常常需要被读取的数据界说为 __read_mostly类型,这样Linux内核被加载时,该数据将主动被寄存到Cache中,以进步整个体系的履行功率。另一方面,假如地点的渠道没有Cache,或许虽然有Cache,但并不供给寄存数据的接口(也便是并不答应人工放置数据在Cache中),这样界说为 __read_mostly类型的数据将不能寄存在Linux内核中,乃至也不能够被加载到体系内存去履行,将形成Linux 内核发动失利。
处理的办法有两种:

  1. 修正include/asm/cache.h中的__ready_mostly界说为:#define __read_mostly
  2. 修正arch/xxx/kernel/vmlinux.S,将.data.read_mostly段的方位到实践内存空间中去,例如放置在 .data段之后等等。
此外,内核源码经过CONFIG_X86)和(CONFIG_SPARC64)来判别该怎样界说__read_mostly,因此在arm中这个宏没有意义。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/beidong/262395.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部