【问题标题】:Manually flushing a write-through cache手动刷新直写缓存
【发布时间】:2013-04-08 09:55:27
【问题描述】:

如果将 CPU 缓存实现为直写缓存,手动刷新 CPU 缓存是否有意义?

【问题讨论】:

    标签: cpu-cache


    【解决方案1】:

    当一个字通过存储指令写入直写 (WT) 高速缓存时,它也会被发送到内存层次结构的下一层 (see cache entry at wikipedia)。因此,WT 缓存中的缓存块是干净的,也就是说,与它们在下一级的副本保持一致,并且不需要回写。

    在导致缓存内容陈旧的直接内存访问 (DMA) 的情况下,可能需要 WT 失效,但据我所知,这些不是手动操作,而是操作系统或硬件驱动的。

    与手动刷新有关,例如根据英特尔架构软件开发人员手册(第 2 卷,指令集参考):

    WBINVD — 写回并使缓存无效 该指令将处理器内部缓存中所有已修改的缓存行写回主内存,并使内部缓存无效(刷新)。

    所以我认为,在 WT 缓存的情况下,这条指令只会使所有缓存行无效。

    【讨论】:

    • 谢谢chus。如果高速缓存行的后备存储是易失性 (DMA),那么不是使高速缓存失效而不是刷新它吗?
    • 你是对的。我已编辑我的答案以使其更准确。
    • 是的。现在由于 WT 缓存行条目总是干净的,缓存行的显式刷新不应该导致写入实际内存,不是吗? CPU 应该丢弃刷新指令。
    • 我想是的。顺便说一句,请注意缓存刷新指令是特权指令。看到这个questionthis one
    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2019-07-05
    • 2016-12-31
    相关资源
    最近更新 更多