当您对大范围内存进行宽间隔的随机访问时,性能上最大的差异将会出现 - 其中“大”意味着远大于可由所有小页面条目映射的范围TLB(通常在现代处理器中具有多个级别)。
为了使事情更加复杂,4kB页面的TLB条目数量通常大于2MB页面的条目数量,但这种差异很大程度上取决于处理器。在Level 2 TLB中有多少“大页面”条目也有很多不同。
例如,在AMD Opteron系列10H修订d( “伊斯坦布尔”)系统,CPUID报告:
- L1 DTLB:4KB页:48个条目; 2MB页面:48个条目; 1GB页面:48个条目
- L2 TLB:4kB页面:512个条目; 2MB页面:128条目; 1GB的网页:16个条目
虽然在Intel Xeon处理器56XX( “Westmere的”)系统,CPUID报告:
- L1 DTLB:4KB页:64个条目; 2MB pages:32 entries
- L2 TLB:4kB pages:512 entries; 2MB的网页:无
两者都可以使用患2 TLB未命中水平之前小网页,而Westmere的系统可以使用其32个2MB TLB条目映射64MB和AMD系统可使用映射352MB映射2MB(512 * 4kB的)其L1和L2 TLB中的176个2MB TLB条目。通过使用大页面进行随机访问,系统将获得显着的加速,这些内存范围远远大于2MB且小于64MB。 AMD系统应该继续使用大页面来显示更好的性能,以获得更大的内存范围。
在所有这些情况下,您试图避免的是最糟糕的情况(注1)遍历x86_64分层地址转换的所有四个级别的情况。
如果没有地址转换缓存机制的(注2)的工作,它要求:
- 5趟内存加载映射4KB的页面上的数据,
- 4趟内存加载映射数据一个2MB的页面和
- 3次访问内存加载映射在1GB页面上的数据。
在每种情况下的最后一趟内存是获得所请求的数据,而需要的其他车次获得的页面转换信息的各个部分。 我见过的最好的描述是在AMD公司的第5.3节“AMD64架构程序员手册第2卷:系统编程”(出版物24593)http://support.amd.com/us/Embedded_TechDocs/24593.pdf
注1:上述数字是不是真的最坏情况。在虚拟机下运行会使这些数字变得更糟。在导致持有不同级别的页表的内存交换到磁盘的环境中运行,使性能更差。注2:不幸的是,即使知道这个级别的细节还不够,因为所有现代处理器都有用于页面转换层次结构上层的额外缓存。据我所知,这些在公共场合记录很差。
硬件预取不会跨越4k页面边界,但是您可能在直线情况下看到的是页面表访问是非常可预测的,所以当您在TLB中错过时发生的页面遍历可能会打到都在L1中(这些页面条目可能确实是通过预取引入的)。 – BeeOnRope 2014-08-26 04:14:10