我想知道在哪些方面,使用缓存缓冲区(例如.TLB)来缓存频繁的页面将是不利的或潜在的灾难性的。 我搜索了一下但无法理解这一点:
“当该页面与在该计算机的不同核心上运行的另一个进程共享时。例如,在英特尔第三代核心架构(Ivybridge)L1
和L2
内核中,核心是私有的并且L3
是共享的。因此,共享页面不得超过L3
缓存,否则显式连贯机制必须由程序员完成“
答案 0 :(得分:0)
我不知道您是在询问x86 CPU缓存还是通常用于任何架构。
据我所知(并且我没有找到任何其他来源),在x86中,CPU硬件始终确保您拥有缓存一致的共享内存。因此,作为应用程序或OS程序员,您不需要关心这一点。此外,没有指令允许您拒绝CPU在L1 / L2或L3缓存中缓存数据。这没有任何意义,因为对于每次写入,CPU必须确保共享高速缓存是连贯的,并且它不会知道您的单个不可高速缓存的页面。虽然似乎有办法在需要时预先将一些数据提取到缓存中。
对于其他(理论和未来)体系结构,可以将缓存(以及整个内存)呈现为不一致 - 然后必须编写OS以便确保内存一致性。例如,this paper写了关于非缓存一致系统(如英特尔实验单芯片云计算机)的操作系统设计。
用于编写应用程序"友好"对于缓存,这里也有许多好的问题和答案,其中很少有人提到RedHat的这个114-pdf:What Every Programmer Should Know About Memory。这里也是Cache Coherence的维基百科页面。