"clean data cache miss" 和 "dirty data cache miss" 之间的区别

difference between "clean data cache miss" and "dirty data cache miss"

脏数据缓存未命中干净数据缓存未命中有什么区别?

我在 CPU 的手册中找到了它们的计数器,想知道哪一个是正确的衡量代码中数据访问效率的方法。

在我当前的程序中,干净未命中 = 102271 而脏未命中 = 1323。

根据 the manual,数据缓存脏未命中描述为“需要缓存回写/逐出)”。

这是错误的措辞。我希望更可能的意图是,如果这些缓存未命中事件之一被修改,则它碰巧被驱逐的行被认为是脏的,因此必须写入内存。这与干净的高速缓存未命中之间的区别在于,干净的未命中要么没有逐出一行,要么逐出未修改的行,因此可以通过简单地丢弃它而不将其写入内存来逐出。如果这种解释是正确的,如果只是说“需要缓存回写”,描述会更清楚。

如果从字面上理解注释,“/”的意思是“或”,那么这意味着如果缓存未命中事件必须将数据写入内存或必须逐出一行,则它被认为是脏的。那么一个干净的高速缓存未命中将是一个不必驱逐一行的高速缓存未命中。这是一种不太可能的解释,因为典型设计的高速缓存唯一一次不必在高速缓存已初始化且所选高速缓存集尚未被填充之后驱逐一行以腾出空间来引入新行,或者如果行已被手动从缓存中逐出。通常行会保留在缓存中,直到被强制驱逐,所以缓存的正常状态是每个缓存集都已满。在这种“干净的高速缓存未命中”的意义上,干净的高速缓存未命中将很少见,并且它们的计数器通常不会有用。此外,措辞将是多余的,因为当由于未命中而存在缓存回写时,也会发生驱逐,因此“需要缓存回写/驱逐”在逻辑上等同于“需要驱逐”。 ”