【发布时间】:2011-08-27 19:54:50
【问题描述】:
在 i386 linux 上。如果可能的话,最好在 c/(c/posix std libs)/proc 中。如果没有,是否有任何组件或第三方库可以做到这一点?
编辑:我正在尝试开发测试内核模块是否清除缓存行或整个处理器(使用 wbinvd())。程序以 root 身份运行,但如果可能,我更愿意留在用户空间。
【问题讨论】:
-
你的意思是处理器缓存吗?最近到底是多少时间?
-
不到一秒(我知道那不是很准确)。基本上我想测试一个相当快的函数是否刷新了缓存。
-
问题没有意义:(a)通常有多个缓存,(b)缓存行一直被驱逐,(c)“刷新”缓存(即驱逐所有缓存行)是不是通常会发生的事情,(d) 一般来说,CPU 不知道任何缓存中发生了什么
-
这可能不常见,但在某些地方会进行冲洗,不是吗?
-
@Roman: 是的,
WBINVD刷新了所有的数据缓存(不清楚它是否也刷新了 L1 指令缓存,并且它的实现是依赖于 CPU 的),但是使用它非常不寻常指令(自我修改代码是唯一想到的例子),即便如此,缓存将立即开始再次填充,并且 CPU 无法直接了解任何缓存的当前状态。您应该解释您真正想要达到的目标是什么,即您提出问题的动机。
标签: linux cpu flush hardware-interface cpu-cache