cacheline_aligned用在程序里是什么意思?

来源:百度知道 编辑:UC知道 时间:2024/09/13 06:15:39

在include/linux/cache.h文件中
$ }5 Z2 s" F) I$ a' v+ p#define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))& a) z1 I$ n* \( N1 ~1 o
#define SMP_CACHE_BYTES L1_CACHE_BYTES0 M- q. U1 P9 m6 R! @: J6 {4 Z
在include/asm-i386/cache.h文件中
! d4 E# I6 i0 b#define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT)1 h0 o& ]% m! r( m6 Z
#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)5 X6 M- N6 c: \6 Y1 j
在arch/i386/config.in文件中if [ "$CONFIG_MPENTIUM4" = "y" ]; then
8 H" L$ D1 v% ldefine_int CONFIG_X86_L1_CACHE_SHIFT 7
4 |- t% C0 h( s: R6 \. t也就是说对p4CPU来说,
/ A" @; z6 l0 I2 t____cacheline_aligned 被define成为__attribute__((__aligned__(128)))# \, Z+ }: P% I
以前在Linux社区里他们讨论过说P4cpu的一级数据Cache是64字节长度(CPU每次向系统总线请求两个长度为64字节的L2 cache),所以似乎这里L1_CACHE_BYTES应该是64而不是128,有人解释说这里没有错,只是命名有点问题,不应该叫L1_CACHE_BYTES,这里是站在所有CPU的角度看问题的,另外如果它的长度小于L2 cache line size会对slab染色机制的效率产生影响.后来linus解释说考虑到SMP....应该是