再引入一个优化点:减少多核锁指令导致的数据迁移
每个CPU core都需要使用锁指令将需要的数据读到私有缓存然后进行写操作,例如CSI过程把自己的函数地址放入链中(lock xchg &spinlock, addr, lock指令其实隐含在xchg指令中,此处为表明存在lock)。但是这个操作过程中其他的CPU core也会做相同的工作, 任何时刻仅仅有一个CPU可以完成,在完成之前可能被其他CPU core先完成,由于其他core导致锁数据的rfo本次操作无效需要再次操作,或者本次完成之前需要无效化其他CPU core由于读取数据导致的多副本也就是RFO,最终锁指令本身操作延时过长,增加冲突概率。为了解决这个问题我们增加一个数据状态,使用排他操作。例如在CPU core 0需要进行lock 指令操作数据的时候, 该数据的缓存行增加了一个排他的状态,此时若其他的CPU core的锁指令再读取该数据的时候,如果发现状态为 排他读就会重试直到CPU core 0完成操作,过程中并不会将数据独到私有缓存,最终避免无效数据迁移。
--
修改:MaLing FROM 47.251.3.*
FROM 47.251.3.*