是否可以根据内存测试结果计算缓存延迟?

时间:2019-05-06 15:16:09

标签: memory x86 cpu-architecture cpu-cache microbenchmark

我检查了几个站点,生产者在其中放置了有关L1,L2,L3,主内存访问时间的信息(以纳秒或周期为单位):skylake info

  • 是否可以使用memtest的结果来计算?
  • 如果不是,那么该如何计算?

我可以运行外部工具,但是它们使用C / Assembler代码进行了一些测试-这是唯一的方法吗?

memtest86的示例输出:

Intel i7 @ 3.6GHz

CLK/TEMP      3645 mhz   44C
L1 Cache:     64K        291.81 GB/s
L2 Cache:     256K       125.52 GB/s
L3 Cache:     12288K     56.56 GB/s
Memory:       31.8 GB    20.84 GB/s

RAM Info: PC4-25600 DDR4 XMP 3200MHz /  16-18-18-38 / G-Skill INtl F4-3200C

1 个答案:

答案 0 :(得分:2)

  

是否可以使用memtest的结果进行计算?

否。

  

如果没有,那么该如何计算?

用于产生https://www.7-cpu.com/上显示的结果的工具的源代码是公开可用的,可以在https://www.7-cpu.com/utils.html上找到。特别是,MemLat工具用于测量对内存层次结构每个级别的访问延迟。

衡量延迟的主流方法是使用指针追踪,其中创建了一个64字节元素的链表,并且每个元素都被初始化为基本上指向另一个随机选择的元素(以击败硬件预取器)。如果链接列表的总大小适合L1缓存,则通过对列表进行足够大的迭代,可以通过将总执行时间除以访问的元素数来测量L1延迟。可以通过disabling hardware prefetchers简化此微基准测试,因此无需进行随机化。建议使用1GB页面(或至少2MB页面)而不是4KB页面,以确保整个列表是从连续的物理内存块中分配的。否则,可能会将多个4KB页面映射到同一缓存集,从而导致冲突未命中。

指针追逐有效的原因是当前的Intel和AMD处理器不采用value prediction技术。

还有另一种测量延迟的方法。您可以在单个内存访问指令周围使用RDTSC / RDTSCP,从本质上将单个内存访问视为短暂的经过时间事件。参见:Memory latency measurement with time stamp counter