您的当前位置:首页正文

【实践】浪潮信息KeyarchOS实现基于CXL的内存扩展和Redis应用加速

2024-11-28 来源:个人技术集锦

本文在浪潮信息云峦服务器操作系统KeyarchOS环境下,使用CXL和分层内存技术在Redis场景下进行了加速应用验证。

一. 背景

随着云计算、大数据、人工智能等技术的快速发展,数据呈现出爆发式增长趋势,同时驱动着算力持续提升,然而,传统DRAM并未实现同步扩展以满足应用需求,应用对内存容量和带宽不断提高的需求,推动着内存扩展技术不断发展,在此背景下,CXL成为解决内存扩展瓶颈的最有前景的技术;与DRAM内存相比,扩展内存面临高延迟、低带宽的技术挑战,为了解决这些挑战,分层内存技术应运而生。

二. 简介

CXL即Compute Express Link,是一种高速互连技术,将CPU、GPU、FPGA等处理器、内存和存储器等设备连接起来,形成高效的计算平台。CXL技术基于PCIe 5.0/6.0协议进行数据传输,具备高速互连、低延迟、高带宽、可扩展的特点,为主机在内存和存储扩展等方面提供了可行的解决方案。

分层内存将内存分为多个层次,每个层次的内存具有不同的特性和成本,应用程序能够根据需求选择不同层次的内存。通常,分层内存由两个或多个层次组成,其中最接近处理器的层次是最快速、最昂贵的内存,而离处理器最远的层次则是最慢、最便宜的内存。高性能的内存比较昂贵,而容量较大但性能较低的内存,则相对便宜。通过合理地组合不同性能和容量的内存,可以提供性价比更高的内存解决方案。

当前,CXL内存是CXL协议的主要应用方向,但CXL内存在延迟、吞吐量方面比DRAM要差。CXL内存与分层内存技术配合,将频繁访问的数据尽量放置到DRAM中,将访问次数较少的数据放置到CXL内存中,能够在实现内存扩展的同时减小CXL内存带来的性能损耗。

三. DRAM和CXL内存的性能差异

CXL内存在Linux系统中会被挂载到一个单独的、不具备CPU core的NUMA Node节点下,在NF5280M7平台上测试发现,CXL内存的延迟和吞吐量比本地DRAM节点和远端DRAM节点都慢,具体的性能数据(使用MLC测算)如下:

四. Redis场景的性能测试

使用YCSB作为测试工具对关闭了持久化的Redis数据库进行性能测试,验证采用CXL内存和分层内存进行内存扩展时对业务系统的影响。


测试结果:数据样本相同、采样算法相同时,Redis运行在CXL内存节点时延迟更高、耗时更长、吞吐量更低,整体性能比运行在DRAM上时差16%左右。

  1. 混合使用DRAM和CXL内存/分层内存的效果测试
    混合使用DRAM和CXL内存时,Redis数据部分存在于DRAM上,部分存在于CXL内存中,所以理论上Redis性能测试应该弱于单独使用DRAM时的性能,而高于单独使用CXL时的性能。
    如果开启分层内存功能,使频繁访问的热数据尽量迁移/存放到DRAM内存节点中,使访问次数较少的冷数据尽量迁移/存放到CXL内存节点中,会对Redis性能起到加速的效果。
  2. 普通场景
    据统计,对于实际场景而言经常访问的数据大约占全部数据的20%。本场景测试中我们混合使用DRAM和CXL内存并使它们的大小比例保持在1:4。


测试结果:以1:4的比例混合使用DRAM内存和CXL内存时,开启分层内存后的Redis性能比开启分层内存前提升了大约6%(Redis单条样本数据长度 和 采样算法对结果影响较大,本测试中单条样本数据长度为1K,采用算法使用latest)。

  1. 最优场景

经过分析发现,YCSB的latest采样算法会使数据ID越大的记录访问概率越大,且基本上所有的数据都会被访问,而不是仅访问部分数据,所以开启分层内存前后的性能差异不大。

为了尽量体现出分层内存的效果,设计了一个特殊的测试场景:首先使用一个额外程序提前占据大部分DRAM,并且不进行数据读写,使其所占内存在后续测试中都成为冷页内存;其次使用YCSB为Redis加载样本数据,使Redis-server占用DRAM剩余部分内存,以及对应4倍大小的CXL内存(例如额外程序占8G DRAM,Redis-server占用2G DRAM和8G CXL内存)。

测试结果:在DRAM中的冷数据区域容量大于测试中Redis待访问数据容量,保证Redis待访问数据都可以promote到DRAM上时,开启分层内存后的Redis性能比开启分层内存前能提升12%以上,基本接近DRAM的性能水平,与之前的基准测试值相符。

五. 总结

使用CXL扩充系统内存容量时,虽然CXL内存性能比DRAM内存略差,但如果配合分层内存,CXL可以提供足够的带宽和延迟,以满足对于内存性能要求不苛刻的场景下数据传输的需求。

显示全文