共计 4011 个字符,预计需要花费 11 分钟才能阅读完成。
第四范式深耕于人工智能畛域,在人工智能相干算法、利用、零碎和底层架构设计等有兼具广度和深度的了解。
随着近几年先进存储技术的飞速发展,涌现出了具备颠覆性的存储技术,比方非易失性存储、SSD 等。基于此类技术的异构内存架构,正在颠覆传统应用程序的设计和优化模式。
第四范式在异构内存架构上领先布局,进行了若干创新性摸索研发和落地实际,比方参数服务器[第四范式推出业界首个基于长久内存、反对毫秒级复原的万亿维线上预估零碎:https://www.163.com/tech/arti…]、内存数据库等[英特尔、第四范式联结研究成果入选国内顶会 VLDB 傲腾™ 长久内存加持 优化万亿维特色在线预估零碎:https://newsroom.intel.cn/new…
此篇文章将介绍异构内存架构的技术背景,以及在主动机器学习零碎上的技术实际。
异构内存架构
传统上,咱们所说的内存个别是指动态随机存储,即 DRAM。此外,在 CPU 中还会存在小容量的疾速存储器件,咱们个别会称他们为 CPU 缓存(即 L1/L2 cache)。具备持久性的慢速存储器件则形成了外存,比方磁盘等。因而,外存、内存、和 CPU 缓存,形成了整个存储架构金字塔。然而,随着具备革命性意义的非易失性内存技术的商业化落地,使得这个金字塔中的内存不再由 DRAM 繁多组成,而是由 DRAM 和非易失性内存形成了异构内存架构。
此外,非易失性内存的呈现也含糊了内存和外存之间的性能边界,使得内存数据长久化成为了可能。明天,非易失性内存技术曾经齐全成熟,由英特尔于 2019 年公布的英特尔® 傲腾™ 长久内存(简称长久内存或者 PMem),即是此技术的代表性产品。
图 1. 基于异构内存的存储架构金字塔
图 1 显示了蕴含有异构内存的存储架构金字塔。能够看到,在实质上,长久内存处于金字塔中 DRAM 和外存之间,其在容量、性能、老本都是处于两者之间。甚至在性能上,它亦是一个 DRAM 和外存的混合体。它既能够间接当做内存应用(内存模式),也能够当作一个长久化设施应用(App Direct 模式,简称 AD 模式)。
在内存模式中,长久内存对操作系统通明,其容量间接反馈为整体的可用内存容量;AD 模式则将存储层级裸露,由开发者齐全掌控。因而,因为长久内存的非凡存在,古代内存架构不仅仅是在层级上变得更为简单,在性能上也呈现了革命性的变动,对于如何利用好异构内存架构,开发人员须要思考更多的问题,比方:
- 多级存储的优化。长久内存提供了一个性能靠近于 DRAM,然而老本更低的内存计划,十分有利于对于内存耗费微小的利用。然而,多级存储架构的引入也为性能优化带来了更高的挑战。咱们晓得,高性能缓存在性能调优中有重大意义。一方面事实数据中往往存在热点,缓存能够无效晋升热点数据的拜访性能;另一方面,缓存敏感数据结构(cache
conscious)为了压迫硬件性能,经常有精美的设计。那么,长久内存的呈现使得这个存储层级更为简单,对多级缓存机制、数据结构和算法的设计都提出了更高的要求。 - 长久化机制的利用。长久内存使得外存不再是存储数据的惟一抉择。长久内存提供了远比传统外存器件更高的长久化性能,然而其容量绝对较小。在某些场景中如何无效的施展高性能长久化的特点,成为了利用落地须要思考的新问题。比方,对于须要全天候保障服务质量的在线服务利用,内存数据长久化即能提供离线当前的疾速恢复能力;另外,本来磁盘 IO 为性能瓶颈的场景,也能够利用长久内存来作为存储介质,来晋升整体零碎性能。
为了让大家进一步理解异构内存架构如何在理论场景中施展价值,咱们将抛砖引玉,分享第四范式在异构内存架构上的实践经验。
主动机器学习零碎在异构内存上的优化
图 2 显示了一个第四范式产品中一个典型的主动机器学习(AutoML)全流程。其主体上蕴含了离线摸索以及线上推理局部。离线摸索通过主动特色工程和模型训练,产出能够上线的特色工程脚本以及模型。线上推理服务在承受到用户申请当前,通过实时特色抽取和模型推理,拿到预测后果。同时音讯队列在整个零碎中起到了数据收集和散发的关键作用。
从表格 1 能够看到,在异构内存架构下,长久内存在不同组件中有不同的应用办法,从而达到不同的优化目标。总体来说,内存模式能够用来实现疾速的低成本内存容量扩大,AD 模式则带来了更多的好处,包含疾速恢复能力、晋升数据存储性能等。
第四范式曾经将基于异构内存优化的关键技术组建进行理解耦,并且奉献到了开源社区,目前次要蕴含两个我的项目:高性能音讯队列零碎 Pafka(https://github.com/4paradigm/… PmemStore(https://github.com/4paradigm/…。以下次要开展介绍 Pafka。
Pafka:基于异构内存优化的高性能音讯队列零碎
Kafka 是一个开源的分布式事件流 / 音讯队列零碎,用于高效,牢靠地解决实时数据流,在工业界中有十分宽泛的落地利用场景。然而,因为其长久化逻辑的存在,其性能(吞吐和提早)经常受到外存设施(HDD/SSD)的制约。在理论应用场景中,为了减少 Kafka 集群的总体吞吐量,企业不得不扩充集群规模,减少了企业的总成本。
长久内存具备高速长久化的个性,能达到几倍甚至几十倍于传统硬盘和 SSD 的长久化性能。因而,基于异构内存架构的 Kafka 的优化版本 — Pafka,正是利用了高速长久化的个性,大幅晋升单节点吞吐,从而优化在集群上的总投入老本。总体来说,相比拟于传统的 Kafka 解决方案,Pafka 带来了如下劣势:
- 比拟于目前数据中心常见的 SATA SSD 的配置,基于异构内存的 Pafka 改良节点吞吐和提早均达 20 倍。
- 因为大幅晋升了节点吞吐,因而在集群规模总投资上,相比拟于 Kafka,Pafka 能够缩小硬件投入老本 10 倍以上。
- Pafka 间接基于 Kafka 优化,用户原有的基于 Kafka 的业务代码无需批改,能够零代码革新老本迁徙到 Pafka 零碎。
咱们对于 Kafka 的优化集中于造成性能瓶颈的数据落盘局部。原 Kafka 原有的架构中,数据长久化只产生在外存(磁盘 /SSD)这一层级;通过优化当前的 Pafka 版本,基于异构内存架构,同时把长久内存和外存用来做数据长久化。
具备高性能长久化能力的长久内存作为长久化层级的第一级,而容量更大但性能较差的外存则作为第二级长久化介质,两者通过肯定的缓存机制进行治理。
因为音讯队列的生产者 / 消费者的应用模式,大部分场景下数据的存取都会产生在高性能的长久内存中。
图 3. Pafka 集群架构
如图 3 所示,一个 Kafka 服务器集群由几个至上百上千个的 brokers 组成。Brokers 外部划分为了不同的 partitions,进一步划分为 segments,来进行音讯存储。咱们对于 Kafka 的革新次要集中在 segment 的存储数据结构上的革新。原来的 segment 只能存储在 HDD/SSD 等外存设施上,咱们应用 PMDK 来进行基于异构内存的长久化操作,引入 MixChannel 的概念,来实现 segment 既能存储在 HDD/SSD 的外存设施,也能在长久内存上。
具体来说,MixChannel 将一般的文件接口和长久内存的接口对立治理,其底层存储介质对于下层组件是通明的。为了反对基于长久内存的存储,咱们为 MixChannel 引入了数据结构 PMemChannel,其次要性能是把长久内存的 MemoryBlock 对象封装成满足 FileChannel API 的接口,从而能够让 MixChannel 不便的抉择基于传统文件的 FileChannel 接口,还是基于长久内存的 PMemChannel。这里咱们应用了 pmdk llpl 的 PersistentMemoryBlock,会主动为每次写入的数据进行长久化。同时,为了反对 zero-copy,咱们还为 llpl 的 MemoryBlock,通过间接映射长久内存的地址到 ByteBuffer,实现了 zero-copy 的 ByteBuffer 接口,从而防止了内存的屡次拷贝,晋升性能。
为了保护 segment 和长久内存上数据的对应关系,咱们为每个 segment 调配一个长久内存的 MemoryBlock,映射关系通过 pmdk pcj 的 ObjectDirectory 来保护。
此外,为了防止 MemoryBlock 在 Pafka 失常运行时动态分配的开销,咱们会在初始化的时候事后调配固定肯定比例的内存池空间,用于写数据的时候 MemoryBlock 的疾速调配。
性能比拟
图 4 显示,相比拟于数据中心中罕用的基于 SATA SSD 进行长久化的 Kafka,基于异构内存优化的 Pafka 在吞吐和提早的性能体现上均能够达到 20 倍的改良。
老本比拟
假如咱们的指标是提供 20 GB / 秒的整体吞吐率,咱们将异构长久内存的 Pafka 与基于 SATA SSD 的 Kafka 进行了比拟。图 5 显示,为了实现 20 GB / 秒的总吞吐率,基于 SATA SSD 的服务器和基于异构内存的服务器的数量别离为 45 和 3。此外,就硬件老本而言,传统的 Kafka(SATA SSD)须要破费为 45 万美元,而咱们的 Pafka 解决方案仅需破费 4.05 万美元。Pafka 解决方案将硬件老本大大降低到传统 Kafka 解决方案的 9%。
图 5. 20 GB/sec 吞吐的性能下,Pafka 和 Kafka 计划的老本比拟
更多信息
Pafka 为第四范式的开源我的项目,具体应用形式、技术支持、以及残缺性能报告能够通过以下渠道理解更多:
- 代码 Github repo:https://github.com/4paradigm/pafka
-Slack channel:https://join.slack.com/t/memarkworkspace/shared_invite/zt-o1wa5wqt-euKxFgyrUUrQCqJ4rE0oPw
-MemArk 异构存储技术论坛:https://discuss.memark.io/