操作系统可以确定一页存储器是在DRAM中还是在交换中; 例如,只是尝试访问它,如果发生页面错误,它不是.
但是,CPU缓存可能是同样的事情吗?
是否有任何有效的方法来判断给定的内存位置是否已加载到缓存行中,或者知道它何时这样做?
一般来说,我不认为这是可能的.它适用于DRAM和页面文件,因为它是操作系统管理的资源,缓存由CPU本身管理.
操作系统可以执行内存读取的紧密计时循环,并尝试查看它是否足够快地完成缓存,或者是否必须转到主内存 - 这将非常容易出错.
在多核/多进程系统上,在处理器之间使用缓存一致性协议来确定何时需要使彼此的缓存无效,我想你可能有一个自定义设备可以窥探操作系统将查询的协议.
你想做什么?如果你想强迫某些内存进入内存,当前的x86处理器支持以非阻塞方式将内存预取到缓存中,例如使用Visual C++可以_mm_prefetch
用来获取缓存中的一行.
编辑:我自己没有这样做,所以使用风险自负.要确定用于分析的高速缓存未命中,您可以使用一些特定于体系结构的寄存器. http://download.intel.com/design/processor/manuals/253669.pdf,附录A给出了"性能调优事件".这不能用于确定单个地址是在缓存中还是在缓存中加载,而是可以用于整体统计.我相信这就是vTune(这个级别的现象分析器)所使用的.
如果您尝试自己确定,那么运行程序的行为可能会使相关的缓存行无效,从而导致测量无效.
这是一个反映科学原理的案例之一,即你不能在不影响你所测量的东西的情况下测量某些东西.