1. 论文信息
所有作者及单位
- Yan Sun, Zeduo Yu, Reese Kuper, Chihun Song, Jinghan Huang, Houxiang Ji, Siddharth Agarwal, Jiaqi Lou, Ipoom Jeong, Tianyin Xu, Nam Sung Kim. University of Illinois伊利诺伊大学.
- Yifan Yuan, Ren Wang. Intel Labs.
- Jung Ho Ahn. Seoul National University首尔大学.
2. 评估
这部分主要介绍真实CXL内存和模拟的之间的区别,以及和CPU之间的相互作用。
这里使用了不同制造商的3种CXL设备,对应的内存设备也不同。
2.1 设备延迟
- MLC: Pointer-chasing (Latency of Serialized Memory Accesses) 顺序访问的延迟指不停的获得指针跳转到对应地址,最后才拿到数据。
- Temporal Load (ld). 指CPU有规律的从内存读数据。
- Non-Temporal Load (nt-ld). 指随机从内存读数据。
- Temporal Store (st).
store
指令表示将寄存器或缓存中的数据写入内存,可能会在高速缓存中保留一份拷贝,以提高未来的读取性能。 - Non-Temporal Store (nt-st). 写入没有规律。
- 对比两种测试程序:MLC的串行内存访问没法使用UPI和CXL全双工的功能,使得MLC测得的延迟要大于MEMO测的。
- 对比四种设备:CXL-A 的 ld 延迟仅比 DDR5- R 多 35%,而 CXL-B 和 CXL-C 的 ld 延迟则分别长近 2 倍和 3 倍。即使采用相同的 DDR4 DRAM 技术,基于 DDR4-3200 的 CXL-C 比基于 DDR4-2400 的 CXLB 的延迟时间长 67%. 说明真实CXL设备的延迟和CXL控制器的设置是高度相关的。
- 模拟 CXL 内存延迟开销:在发出内存请求时,①本地 CPU 必须首先与远程 CPU 通信检查高速缓存一致性 。②内存请求还必须通过远程 CPU 内部较长的片内互连(芯片间 UPI 接口连接)才能到达其内存控制器。CPU 内核越多,即缓存越多,互连路径越长,这些开销就越大。这些造成延迟的问题在CXL上是如何解决的?CPU 实现了一种片上硬件结构,以促进对真正 CXL 内存访问的快速缓存一致性检查。此外,真正的 CXL 内存在 CXL 控制器内有一个较短的片内互连,以连接其内存控制器。
2.2 设备带宽
- 从读写来看:将结果标准化为理想带宽。DDR5-4800、DDR4-3200 和 DDR4-2400 DRAM 技术可提供的最大顺序带宽值分别为每通道 38.4 GB/s、25.6 GB/s 和 19.2 GB/s. 全读操作时占DDR技术理想带宽百分比差异很大,CXL-A的内存控制器设计可以更高效处理交错的内存访问。在只读或只写内存访问方面的效率可能不如 CXL-B. CXL-C 非常差劲的带宽是 due to the FPGA-based implementation of the CXL controller. 从这些结果可以看到,CXL设备的带宽表现也和CXL控制器的设计紧密相关。
- 模拟 CXL 内存带宽利用率在写操作中低于真实CXL设备。对于st操作,仿真 CXL 内存的带宽效率下降幅度明显大于真实 CXL 内存,部分原因是仿真 CXL 内存承受了更多的高速缓存一致性检查开销。在store操作中真实CXL设备的带宽是有很大机会好于模拟的。
2.3 与CPU缓存间的相互作用
目前因特尔架构是所谓的非包容性架构Non-inclusive cache architecture (starting Intel Skylake CPU). LLC错误时,加载去L2而不是共享的LLC,这个时候就会从L2再驱逐一些到LLC。
Each chiplet (or two chiplets) as a NUMA node in the SNC mode. 如上图所示,按理说这是一个socket,也应该是一个NUMA node,但是现在被切成4个了。当在SNC模式下LLC资源强制隔离之后,被驱逐只能驱逐到同一个SNC的LLC。但是CXL会打破这个隔离,core获得的LLC容量变多了,明显弥补了 CXL 内存较慢的访问延迟。
2.4 应用程序的延迟
P99延迟就是指99%的操作都会在那个延迟范围内完成,QPS代表“Queries Per Second”,即每秒查询数。
- Redis:随QPS增加,差距增加,几乎两倍。
- DSB:由3种组件组成,将CPU敏感的部分都放在DDR中运行,如表格所示。将内存敏感部分放入CXL和DDR做对比。
图d的黄色突起部分是由于那个阶段CXL解决了带宽瓶颈改善了延迟(作者这么解释的,感觉怪怪的)。之后两条线又重合了是CPU带来的瓶颈。Redis更敏感是微秒级的,但是DSB是毫秒级别的,所以两者对待这两类的延迟会有不同的表现。 - TPP策略:全部分配去CXL,等TPP大概完成了只剩25%在CXL的迁移,再去测P99延迟。另一个是静态分配25%的页面去给TPP,竟然都比TPP要好。①将任何比例的页面分配到 CXL 内存都会相应增加要求 𝜇 级延迟的内存密集型应用的 p99 延迟(对内存访问延迟高度敏感)。②谨慎地将某些页面分配到 CXL 内存,并不会增加 𝑚 级延迟的应用的 p99 延迟。③即使是智能页面迁移策略,也会因为迁移页面的开销而进一步增加这类对延迟敏感的应用的 p99 延迟。作者认为主要是延迟敏感程序,页面迁移会阻碍关键路径上的内存读取请求。
2.5 应用程序的吞吐量
全部放在DDR5中,在20线程后吞吐量开始饱和。在这种情况下,将一定比例的页面分配到 CXL 内存可以进一步提高吞吐量,因为它可以补充 DDR 内存的带宽,增加 DLRM 可用的总带宽。
虽然 Redis 是一个对延迟敏感的应用,但其吞吐量也是一个重要的性能指标。对于内存带宽密集型应用(同时也延迟敏感)而言,可能会导致吞吐量低于将100%的页面分配到DDR内存,即使同时使用DDR内存和CXL内存不会带来更高的总带宽。由于 Redis 没有充分利用内存带宽,其吞吐量受到内存访问延迟的限制。 因此,将更多页面分配到 CXL 内存会降低 Redis 的吞吐量。
3. CXL-MEMORY-AWARE的内存分配
一种动态页面分配策略,可以在运行时根据不同 CXL 内存设备的带宽能力和运行应用程序消耗的带宽,自动配置分配给 CXL 内存的页面比例。
运行了 DLRM,其吞吐量受内存带宽限制。然后,随着分配给 CXL 内存的页面百分比的变化,我们观察 DLRM 吞吐量(DDR的100%)与这些计数器值之间的相关性。
直接在用户层实现就好了,所以作者的代码大多python。
然后放一张性能提升的测试图: