繁体   English   中英

在Linux内核模块中刷新CPU数据缓存

[英]Flush CPU data caches in Linux kernel module

我有一个Linux内核模块,该模块计算几个CPU之间的网络数据包统计信息(在内核地址空间中)。 我会定期清除相应的内存块,并且强烈需要此操作才能对所有CPU立即生效,否则它将扭曲后续的统计值。 我的目标CPU是Power PC,因此其缓存一致性非常宽松。 因此,我需要在将内存归零后手动刷新所有CPU的数据缓存。

所以我应该在清算程序之后放置什么:

memset(ptr, 0, size);
// what's going here?

经过一番思考后,我意识到这里的问题并不是真正与数据缓存刷新有关。 实际上,我尝试避免出现过分竞赛的情况(第一个cpu清除值,第二个cpu清除值)。 以我为例,通过互斥体保护数据太昂贵了,因此值得使用原子标志来通知拥有CPU自己清除值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM