歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> linux內核中的__read_mostly變量

linux內核中的__read_mostly變量

日期:2017/3/1 17:08:31   编辑:Linux內核

linux內核中的__read_mostly變量 內核版本:2.6.14 在閱讀socket源碼的時候,有如下一句(net/socket.c): [plain] static struct vfsmount *sock_mnt __read_mostly; 感覺__read_mostly很奇怪,就深入分析了一下。 __read_mostly原語將定義為存放在.data.read_mostly段中。 www.2cto.com [plain] #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中這個宏沒有意義。
Copyright © Linux教程網 All Rights Reserved