英特尔® 傲腾™ 持久内存是Intel在2019年发布的一款革命性的产品,英特尔® 傲腾™ 持久内存是一种全新的内存类型,其架构设计旨在从数据中心中汲取更多价值,重构数据中心内存/存储层次结构。不同于传统的DRAM,英特尔® 傲腾™ 持久内存集大容量、经济性和持久性于一身,能够支持数据中心多个应用场景。浪潮基于英特尔® 傲腾™ 持久内存做了大量的应用场景解决方案,覆盖大数据分析、数据库、云与虚拟化、分布式存储等应用场景。为了帮助用户通过更加灵活的架构来实现创新型的应用,助力企业实现性能突破,浪潮发布了基于英特尔® 傲腾™ 持久内存技术的RocksDB存储方案。
RocksDB是一款利用快速存储器(尤其是闪存)存储数据性能的数据库软件,大量应用于高负载服务,但伴随着数据量爆发式增长,高负载业务对数据存储的性能需求也越来越高,浪潮根据英特尔优化的PMEM-RocksDB进行了性能优化佳实践,其中PMEM-RocksDB通过使用英特尔® 傲腾™ 持久内存对传统RocksDB进行了大量优化,不仅大幅提升了数据吞吐性能、降低了延迟,而且实现了更高的成本效益。
挑战:化解 RocksDB存在的性能瓶颈
在大数据时代,业务存储和访问的数据量是超大规模的,而随之而来的还有业务对IOPS、延迟等存储性能更苛刻的需求,此时传统的关系数据库已经很难存储和管理这些数据,RocksDB也就应运而生。RocksDB 是一种嵌入式、持久化存储、KV型且非常适用于fast storage的存储引擎,并且由于其出色的压缩性能,在充分利用闪存性能的同时节省大量闪存空间。目前,RocksDB应用在大数据量、写密集型的高负载存储场景。
由于 RocksDB应对的是高负载存储场景,因此数据吞吐性能的重要性不言而喻。要提升 RocksDB数据吞吐性能,可以从优化内存规划、存储磁盘扩容和升级、参数调优等多个方面进行。以内存规划为例,其直接涉及读缓存BlockCache、写缓存Memtable,影响系统内存利用率、IO利用率等资源以及读写性能等,是 RocksDB性能一个至关重要的影响因素。
这种方法对读性能有明显提升,但不具备良好的成本效益。虽然存储节点支持的单条内存容量理论上限是128GB,但是这种大容量的内存普遍处于验证阶段,可获得性不足,而且价格的提升远高于其容量的提升,会带来很高的成本压力;另外,受制于RocksDB本身架构,写性能并不能随着内存和存储设备的增加一直提升。
因此,如何打破现有存储架构的限制,显著提升RocksDB性能的同时有效控制成本,也就显得至关重要。
为了解决此问题,英特尔基于傲腾持久内存对RocksDB进行了代码级优化,开发了PMEM-RocksDB(基于RocksDB-6.2.2),在保留原有RocksDB所有功能的基础上,通过使用英特尔® 傲腾™ 持久内存,首先优化了Write Ahead Log写操作以改进写性能,然后实现了键值分离存储,减少写放大,改进了写性能和写延迟,并修改了块缓存的实现,用非易失内存替代DRAM内存作为块缓存。
在方案验证的过程中,浪潮发现,英特尔® 傲腾™ 持久内存有着接近DRAM内存的性能。因此,浪潮决定,对基于英特尔® 傲腾™ 持久内存的PMEM-RocksDB进行性能、成本等方面的验证。
英特尔® 傲腾™ 持久内存是一种全新的内存类型(如图1),不同于传统的DRAM,其集大容量、经济性和持久性于一身,读写带宽比NVME设备高数倍,并大幅降低延时问题。由于写入方式不同,英特尔® 傲腾™ 持久内存也比Flash NAND更耐用,并且单模块容量可高达512GB,实现了远超传统DRAM的系统内存容量。其从根本上改变了数据中心的弹性,将内存数据库重启时间从以前的几天、几小时缩短到现在的几分钟甚至几秒钟,并提供经济实惠的内存空间,将系统内存容量扩展到前所未有的水平。
图1
英特尔® 傲腾™ 持久内存拥有两种特殊的运行模式——App Direct 模式和内存模式。具体来看,采用App Direct 模式,经过专门调试的应用程序可以从产品固有的持久性中充分获取价值,同时获得更大的容量;在内存模式下,在受支持的操作系统或虚拟环境中运行的应用程序可将该产品用于易失性存储,在无需重写软件的情况下,有效利用高达512GB的内存模块带来的附加系统容量,在大型内存池中获得新的洞察。
在实际的方案部署中,浪潮使用了英特尔® 至强® 第二代可扩展处理器与英特尔® 傲腾™ 持久内存组成强强组合,成倍提升了RocksDB性能,满足了高负载业务的需求。
方案验证:英特尔® 傲腾™ 持久内存性能优势显著
本次方案验证,浪潮使用了RocksDB-6.2.2和PMEM-RocksDB进行读写测试,其中读性能测试,浪潮决定在总成本相当的情况下,分别测试两者的性能对比。而写性能方面,由于PMEM-RocksDB改变了写入方式,同时使用了持久内存和DRAM内存,因此两者无法用性价比进行比较。
在实际测试中,浪潮将英特尔® 傲腾™ 持久内存设置为 App Direct运行模式,并依据以下硬件配置来搭建了测试方案(如表1)。
表1
在本次测试中,浪潮分别评测了使用DRAM内存的RocksDB-6.2.2和使用英特尔® 傲腾™ 持久内存的PMEM-RocksDB的随机读写性能。
浪潮分别测试了两种配置随机写的P99尾延迟(测试结果如图2),以及平均吞吐率(测试结果如图3)。可以看出,PMEM-RocksDB的P99尾延迟只有RocksDB-6.2.2的56.9%,吞吐率却达到了DRAM的3.3倍。
图2
图3
浪潮基于同成本分别测试了两种配置随机读的平均吞吐率(测试结果如图4)。可以看出,PMEM-RocksDB的吞吐率比RocksDB-6.2.2提升了接近70%。
图4
可见英特尔® 傲腾™ 持久内存为RocksDB的性能带来了大幅提升,可以满足其高负载下的读写需求。
效果:大幅改善 RocksDB 性能与成本表现
从测试结果可以看出,在随机写方面,基于英特尔® 傲腾™ 持久内存的改进版RocksDB,相较原有版本有3.3倍的性能提升,。而基于同成本的随机读测试,改进版RocksDB,相较原有版本仍有70%的性能提升。
因此,如果企业关注写性能,在付出采用英特尔® 傲腾™ 持久内存的成本后,写性能可以达到成倍的上升,这是即使增加其他硬件成本也无法得到的性能提升。如果企业关注读性能,那么为达到同样的吞吐量,使用英特尔® 傲腾™ 持久内存将带来更多的成本节约,这在当前企业数据爆发式增长、在大数据方面的投入逐渐增大的背景下,显然具有重要意义。