Operating system 缓存位置-TLB、缓存线和…的权重。。。?

Operating system 缓存位置-TLB、缓存线和…的权重。。。?,operating-system,cpu-architecture,cpu-cache,tlb,cache-locality,Operating System,Cpu Architecture,Cpu Cache,Tlb,Cache Locality,据我所知,产生“缓存局部性”高级概念的结构如下: 用于虚拟内存转换的转换查找缓冲区(TLB)。在4096字节对齐(页面大小)中访问相同的虚拟内存将防止操作系统需要降低分层页面表以进行转换 缓存线意味着在64字节对齐(缓存线大小)内访问相同的虚拟内存将防止操作系统需要从RAM获取指令 我有几个问题: 我从未见过对典型页表下降的定量估计。以时钟周期衡量,这是否真的很重要 我相信64字节缓存线指的是一级缓存线——二级/三级缓存线的大小是否不同?内存在什么情况下加载到L2/L3 除了缓存线和TL

据我所知,产生“缓存局部性”高级概念的结构如下:

  • 用于虚拟内存转换的转换查找缓冲区(TLB)。在4096字节对齐(页面大小)中访问相同的虚拟内存将防止操作系统需要降低分层页面表以进行转换

  • 缓存线意味着在64字节对齐(缓存线大小)内访问相同的虚拟内存将防止操作系统需要从RAM获取指令

  • 我有几个问题:

  • 我从未见过对典型页表下降的定量估计。以时钟周期衡量,这是否真的很重要

  • 我相信64字节缓存线指的是一级缓存线——二级/三级缓存线的大小是否不同?内存在什么情况下加载到L2/L3

  • 除了缓存线和TLB之外,是否还有其他结构会导致“缓存局部性”


  • 1.在大多数ISA(包括我怀疑您正在考虑的x86)上,硬件在TLB未命中的情况下遍历页表,而不是操作系统。操作系统只是将数据结构放入内存,并为CPU提供顶级页面目录的物理地址。因此,页面漫游可以在实际需要TLB条目之前进行推测,理想情况下隐藏大部分延迟

    在您正在测量的任何微阵列上,发生TLB未命中(但数据的L1d命中)的负载的实际延迟将告诉您一些关于页面漫游延迟的信息。我脑子里没有Skylake或其他什么的号码;实际成本还取决于在页面漫游硬件中对更高级别的页面表进行了多少缓存。(这是本地性的另一个来源;即使不使用1G或2M的大/大页面,一个TLB条目可以覆盖更多的地址空间,在同一1GB内的页面漫游与最近的另一个页面漫游也可能更快。)

    2.一些微体系结构对L2或L3使用较大的线,但大多数都不使用。所有现代x86 CPU在任何地方都使用64B线路。(但Intel上的L2空间预取器至少尝试完成一对128字节对齐的行。)

    内存在什么情况下加载到L2/L3

    另见

    取决于,例如,独占外部缓存不会有刚加载到L1d中的内容的副本,受害者缓存也不会(尽管大型L3受害者缓存不是完全关联的)。在x86世界中,Intel没有使用正常的受害者缓存(),但AMD在一些微体系结构中使用了它(例如推土机系列)。POWER还使用了L3受害者缓存

    除了缓存线和TLB之外,是否还有其他结构会导致“缓存局部性”

    是的,DRAM“pages”(行大小)意味着一个页面中的多个缓存未命中可以让DRAM控制器避免选择不同的行,而只是从已经打开的行中读取另一列。更改行会增加超出正常成本的DRAM延迟

    涵盖了DRAM,以及许多关于缓存和缓存局部性优化的内容,并且仍然非常相关

    此外,如上所述,附近页面的页面漫游可能会更快一些

    大型/大型页面(例如x86-64上的2MiB)允许一个TLB入口覆盖整个2M


    连续缓存线的顺序读取(或写入)会触发HW预取器,在请求访问之前将这些缓存线拉入L2(甚至L1d),从而减少未命中延迟。(或者,如果循环在ALU工作上花费足够长的时间,HW预取可以跟上其访问速度,则可以完全避免未命中。)

    缓存内存层次结构中有许多与性能相关的附加功能,这些功能与“缓存局部性”的一般主题有关。在2007年的一次演示中,我提出了25种不同的位置,这些位置可能需要考虑才能理解内存访问绑定应用程序的性能!有两种版本的演示文稿,一种是有讲稿,另一种是没有讲稿。幻灯片7提供了“内存层次结构局部域”的(不完整)列表。这包括与地址转换机制相关的局部性、与缓存访问相关的局部性、与DRAM访问相关的局部性,以及其他一些主题。

    这是一个充满信息和链接的惊人响应,非常感谢!这是一个非常高层次的跟进,但我只学了一门操作系统的浅层次本科课程,通过谷歌搜索了解了大部分其他内容。学习操作系统或计算机体系结构课程会更好地涵盖这些概念吗?@Noah:因为页面漫游硬件可以(我认为确实如此)缓存更高级别的PDE,因此同一子树中的未命中可能会缩短一些步骤,否则这些步骤将不得不等待获取顶级条目并查看其指向何处的加载使用延迟,等等。清除这些是
    invlpg
    必须做的一部分。e、 g.另一个相关问题是,页表的内部节点可能缓存在更像TLB的数据结构中,例如PDE缓存。@Noah自核心微体系结构以来,页结构缓存就存在。SDM V3第4.10.2节讨论了其架构影响。NHM引入了EPT,并且还有一个EPT条目缓存。英特尔通常不会在SDM V3之外讨论这些缓存,但可以通过测量页面漫游延迟来检测这些缓存的存在,因为页面漫游是在最后一级TLB中的查找未命中时触发的。@Noah:我从未声称任何缓存的大小都是可变的,除了CPU在单页漫游期间可能选择缓存的数据量之外。不知道你在说什么,当然,从架构上来说,页面表中的所有内容都有固定的大小和固定的含义。当我们谈论缓存相邻读取时,应该使用