Skylake Server Microarchitecture Cache Recommendations

下表是Skylake与Broadwell微架构上缓存指标的比较。

表:Skylake与Broadwell微架构缓存比较

Cache Level

Category

Broadwell

Skylake Server

L1 Data Cache

(DCU)

Size (KB)

32

32

Latency (cycles)

4-6

4-6

Max bandwidth (bytes/cycle)

96

192 (doubled)

Sustaned bandwidth (bytes/cycle)

93

133 (improved)

Associativity (ways)

8

8

L2 Mid-Level Cache

(MLC)

Size (KB)

256

1014 (1MB – 4 times)

Latency (cycles)

12

14 (slower)

Max bandwidth (bytes/cycle)

32

64 (doubled)

Sustained bandwidth(bytes/cycle)

25

52 (doubled)

Associativity (ways)

8

16

L3 Last-level Cache (LLC)

Size (MB)

Up to 2.5MB per core

Up to 1.375[1] per core

Latency (cycles)

50-60

50-70

Max bandwidth (bytes/cycle)

16

16

Sustanined bandwidth (bytes/cycle)

14

15 (slower)

注1:如果禁用了某些处理器核,则平均每核L3容量可以超过1.375M字节。

下面的这张图演示了Skylake微架构对访存平衡性的转换:高延迟的共享分布式,切换为低延迟的本地私有式。换句话说,前几代处理器对L3的访问转换成了Skylake对L2的访问。

SkyWalking 架构 skylake架构_体系结构

高速缓存的这种变化具有非常高的提升程序性能的潜力,但是软件还是要对内存的使用方式做出一些调整,这样可以针对新的缓存容量做充分的优化。

推荐1:重新平衡程序的共享数据与私有数据的大小,匹配较小的,非包含式的L3缓存和更大容量的L2缓存。

选择合适的缓存块(即放置于缓冲中的数据/代码)应该基于程序访存带宽的需求,各程序之间未必一样。相比起Broadwell微架构,具有4倍的L2缓存容量和2倍的L2访问带宽的Skylake Server微架构有可能让某些程序只需要访问L2即可运行,因此获得性能提升。

推荐2:在Skylake微架构上,如果L2可以满足程序的带宽需求,考虑将数据容纳在L2缓存中。

将LLC从包含式缓存转换为非包含式意味着L2缓存的容量可以和LLC缓存的容量叠加在一起。对于在运行时侦测缓存容量的应用程序,现在应该将L2的容量与每核平均LLC的容量相加在一起来估测每个处理器核可以使用的有效缓存容量。仅仅使用每核平均LLC的容量可能导致无法以最优化地方式使用片上高速缓存。参看下节。

推荐3:对于没有数据共享的情况,程序估测每处理器核可用缓存时应该同时考虑L2和L3(即LLC)缓存容量,不要仅仅使用L3的容量。