缓存行与内存页之间的关系


9
  1. 如果我是对的,则主存储器中的页面是在主存储器与外部存储设备(例如硬盘)之间传输数据的最小单位。主存储器的缓存行是在主存储器和cpu缓存之间传输数据的最小单位。

  2. 我想知道页面大小是否总是或最好是缓存行大小的自然数?如果缓存行大小为64字节,而内存页面大小为4KB,则每个页面中有4KB / 64字节== 64个缓存行。

  3. 页面和缓存行都是内存中的固定对象吗?还是它们只是某个大小的连续内存块,可以在内存中的任何位置启动和浮动?

  4. 高速缓存行是否总是不能跨越一个以上的页面,也就是说,高速缓存行的一部分在一个页面中,而另一部分在另一个页面中?

谢谢。


2
您问题的答案在很大程度上取决于CPU体系结构。
TMN 2015年

Answers:


8
  1. 高速缓存行是可以用来接触物理内存的最小单位。含义是,当您读/写1个字节时,包含该字节的完整缓存行将被读入cpu缓存并写回。请注意,即使绕过高速缓存写入的指令(临时流式指令)也将写入高速缓存行大小。取决于CPU,缓存行大小通常为32/64/128字节。将“内存”页面写入磁盘时,它们将全部写入。当内存压力过高或处于休眠状态时(可能用于其他用途),会发生这种情况。再次需要它们时,也将完整阅读它们。这主要是因为内核无法知道页面是部分使用还是全部使用。其他外部存储的读/写操作可以具有任意粒度(例如:fwrite(..))。

  2. 页面大小取决于CPU / GPU。对于大多数CPU,页面大小至少为4KB,并且通常支持4KB / 64KB / 2MB / 4MB / 16MB / 1GB的混合(不一定同时支持所有大小)。大小将始终是2的幂。

  3. 页面和高速缓存行都是连续的,并且需要与它们各自的大小对齐。64字节的高速缓存行始终对齐64字节,而2MB的页面始终对齐2MB。

  4. 由于#3,高速缓存行永远不能跨越2页,因为页面大小将始终大于高速缓存行,并且始终是高速缓存行大小的倍数。

有关大量有关内存的信息,请参见此出色的资源:http : //lwn.net/Articles/250967/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.