Debugging 逐步转储CPU缓存内容

Debugging 逐步转储CPU缓存内容,debugging,cpu-cache,Debugging,Cpu Cache,在这一点上,我的假设很简单。这就是我对转储L3的假设: 停止可能影响缓存状态的正常执行/操作 其中A是当前在三级中的起始内存位置,读取A到A+L3width-1的所有位置,并显示每个位置 执行一些影响缓存状态的普通程序处理,跟踪最新的A 从顶部重复 问题1:我在上面做了哪些不正确的假设?我遗漏了什么?请提供更多细节 问题2:在我写转储时,有没有办法避免更改缓存状态 Q3:对于缓存级别2和1,除了使用不同的宽度和等待数据到达的时间更短之外,此过程是否会更改?a.Q1。您现在无法确切确定缓存中有

在这一点上,我的假设很简单。这就是我对转储L3的假设:

  • 停止可能影响缓存状态的正常执行/操作
  • 其中
    A
    是当前在三级中的起始内存位置,读取
    A
    A+L3width-1的所有位置,并显示每个位置
  • 执行一些影响缓存状态的普通程序处理,跟踪最新的
    A
  • 从顶部重复
问题1:我在上面做了哪些不正确的假设?我遗漏了什么?请提供更多细节

问题2:在我写转储时,有没有办法避免更改缓存状态


Q3:对于缓存级别2和1,除了使用不同的宽度和等待数据到达的时间更短之外,此过程是否会更改?

a.Q1。您现在无法确切确定缓存中有什么。因此,这个算法没有真正意义。如果您从
A
A+L3width-1
顺序读取A,并避免执行任何其他操作,那么您可能希望大部分数据都在缓存中,但这或多或少会将数据带到$,并希望它在那里停留一段(短)时间

A.Q2。不。不可能


A.Q3。当然会,甚至比L3更。。。你的A到Q1毫无意义。转储缓存的全部目的是找出缓存中的内容。是的,因为每个缓存级别都是一个连续的内存子集,只对这些位置进行顺序读取可以避免损坏状态,不是吗?不过,我在这里读到的是,操作系统的后台活动可能会破坏缓存状态,即使您正忙于读取缓存状态。最后,我不知道美元是什么。问题2:没什么大不了的,那。
$
==
缓存
;)缓存不是内存的连续子集!这就是你错的地方。缓存由$行组成(对于Intel arch为64字节)。因此,L3$可能只包含[a,a+L3width-1]的一个子集(如果有的话)。。。那么,你期望数据如何在第一位达到美元?错了。阅读后,您将了解到,即使在处理器运行时,也确实可以完整地转储缓存。然而,它可能需要一个非常特定的环境,可能是一个微内核,它可以阻止任何后台进程运行猖獗和破坏缓存状态。如果我不能保证这一点,我的问题就没有意义了。为了做到这一点,必须访问CPU“调试”接口。在本文中,他们展示了通过
方式
集合
转储内部状态的算法。没有办法通过公开可用的指令集来实现这一点。如果您希望证明建议的硬件支持的观点,那么您应该先学习缓存体系结构。@Elalfer否,这不是我的意图。然后请编辑您的
编辑
,因为这是硬件支持的建议,而不是证明。