前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >MemVerge:CXL 与 Fabric 内存

MemVerge:CXL 与 Fabric 内存

作者头像
数据存储前沿技术
发布2025-02-11 19:22:28
发布2025-02-11 19:22:28
1210
举报
文章被收录于专栏:存储公众号:王知鱼

要点概览

  • 区分CXL内存扩展和基于Fabric网络互联内存(Fig-1 JBOMs)
  • 内存扩展的基准测试方法 (Fig-4 )
  • 内存扩展对于AL/ML、大数据计算场景负载的价值(Fig-9/12)

如何理解两种内存扩展的区别?

  1. 核心功能区别
    • Server Memory Expansion(服务器内存扩展): 主要用于扩展和分层内存,将内存资源分为不同的层次以优化内存使用效率。关键在于服务质量(QoS),关注延迟和带宽管理。
    • Fabric-Attached Memory(基于互联结构的内存): 侧重于共享内存资源,通过互联结构将内存分配给多个服务器或系统,强调全局共享与数据传输优化。
  2. 技术侧重点
    • 服务器内存扩展通过分层和 QoS 管理内存资源,适用于单服务器内的扩展需求。
    • 基于互联结构的内存支持全局共享内存(如 GISMO),适用于分布式系统或多节点协同使用内存的场景。
  3. 应用场景
    • Server Memory Expansion优化服务器内部的内存访问性能,提升单节点计算效率。
    • Fabric-Attached Memory通过共享内存,增强多服务器之间的协同性能,适合大规模分布式计算。

总结来说,服务器内存扩展更适合单一服务器的内存优化,而基于互联结构的内存更适合分布式系统内的共享内存需求。


图展示了两种不同的内存分层策略,分别是延迟分层带宽分层,用于优化内存资源管理:

  1. 延迟分层(Latency Tiering):
    • 重点在于根据数据的“温度”(访问频率)来管理内存。
    • 热数据(频繁访问)存放在低延迟的DRAM中。
    • 冷数据(不频繁访问)存放在较高延迟的CXL设备中。
  2. 带宽分层(Bandwidth Tiering):
    • 重点在于根据内存层的带宽能力进行数据放置。
    • 带宽较高的DRAM优先处理大带宽需求的数据。
    • 较低带宽的CXL用于存放其他数据,以平衡整体性能。

不同场景的冷热数据分级方案

  • 简单方案使用LRU 或统计访问频率来识别热数据。
  • 中等复杂度引入时间窗口分析和数据生命周期管理。
  • 高级方案结合工作负载特征、内存页监测或机器学习模型动态优化冷热数据的分类。

CXL 内存性能标准测试集,硬件、场景创新可以使用测试集,对标产品。


为什么 CXL 内存扩展要关注QEMU虚拟化工具?这些组件在CXL内存扩展中发挥什么作用?

  1. QEMU 的核心作用
    • QEMU 是一种开源虚拟化工具,广泛用于硬件模拟与虚拟化环境中。
    • 在 CXL(Compute Express Link)内存扩展中,QEMU 可以模拟虚拟机与 CXL 设备的交互,帮助开发者进行功能验证和性能测试。
  2. 虚拟化环境中的 CXL 支持
    • CXL 允许动态内存扩展在虚拟化场景下,QEMU 可以支持对 CXL 内存的模拟,帮助实现内存扩展共享功能。
    • 内存分层与管理CXL 通过支持分层内存(如 DRAM 和 CXL 内存)的动态管理,QEMU 提供实验平台用于评估性能瓶颈和优化策略。

    ===

QEMU 组件在 CXL 内存扩展中的作用:
  1. Expansion(扩展)
    • 模拟 CXL 内存的扩展机制,动态增加虚拟机的内存容量。
    • 允许虚拟机在运行时访问额外的 CXL 设备内存,提供更大的灵活性。
  2. Sharing(共享)
    • 模拟 CXL内存共享功能,使多个虚拟机可以共享同一块物理内存(CXL 设备)。
    • 在大规模分布式环境下,帮助评估共享内存资源的效率。
  3. DCD(Device-Centric DCD)
    • 支持对 CXL 设备进行设备中心化管理
    • 在虚拟环境中,提供更灵活的设备分配与访问控制。
  4. Multi-Head DCD(多头 DCD)
    • 模拟多个虚拟机或主机对同一个 CXL 设备的并发访问场景。
    • 评估和优化 CXL 内存在复杂分布式系统中的性能表现。

Note

前几天和一个做QEMU的大佬聊天,当时还天真的以为虚拟化在计算场景将逐渐被容器替代,QEMU风光不再。现在来看,如果说CXL将成为新数据中心内存扩展的关键技术,那么CXL在QEMU中的软件实现和优化将是非常核心的工作!

MemVerge 在Linux 6.9及以上内核贡献加权 NUMA 调度算法

  • Weighted NUMA Interleaving(加权 NUMA 内存)
    • 贡献者MemVerge 和 SK hynix
    • 支持版本Linux Kernel 6.9 及更新版本 链接:https://github.com/torvalds/linux/blob/master/mm/mempolicy
  • Weighted Interleave 的作用
    • 带宽压力增加时,延迟会随之增加(见图 1:吞吐量与延迟的关系)。
    • 更好地利用总带宽资源,在异构硬件环境中平衡内存分布(见图 2)。
    • 权重 = 每轮分配的内存页数量。
    • 一种新策略,用于支持 CXL 环境下的异构内存系统
    • 按照分配的“权重”将内存分布到不同节点上。
    • 关键特性
      • 带宽压力增加时,延迟会随之增加(见图 1:吞吐量与延迟的关系)。
      • 更好地利用总带宽资源,在异构硬件环境中平衡内存分布(见图 2)。
加权 NUMA 内存的实际意义
  1. 异构内存管理: 在支持 CXL 的环境中,DRAM 和 CXL 内存共存,具有不同的带宽和延迟特性。Weighted Interleave 通过设置权重将内存均衡分布,优化资源利用。
  2. 带宽优化: 允许用户根据节点性能(如带宽与延迟)灵活调整权重,最大化整个系统的内存带宽使用率
  3. 延迟管理: 当带宽受限时,能够在一定程度上控制延迟的增加,提供更稳定的性能表现。

应用程序如何使用 CXL 处理大规模数据集

  • Memory Expansion用于单一主机内存扩展,支持未修改的应用程序。
  • Memory Pooling实现内存资源池化,多主机共享内存设备,提高资源利用率。
  • Memory Sharing实现多主机之间的内存共享,支持高效的分布式计算与数据协同处理。

如何理解内存共享和内存扩展/池化场景下的应用程序状态?

1. “未修改的应用程序” 在内存扩展和池化中的特点:
  • 定义
    • 未修改的应用程序是指无需进行代码或架构改动的应用程序。
    • CXL 在内存扩展内存池化场景中,应用程序可以透明地使用 CXL 提供的内存资源,无需感知底层硬件的变化
  • 运行机制
    • CXL 内存被系统和操作系统视为标准的内存资源(NUMA 节点)。
    • 应用程序通过标准内存分配调用(如malloc()new)即可使用这些资源。
  • 优势
    • 无需修改代码,对传统应用程序友好。
    • 适用于需要简单扩展内存容量均衡内存资源的场景。

    ===

2. “共享内存应用程序” 在内存共享中的特点:

  • 定义
    • 共享内存应用程序(ShMem Application)是指需要显式支持和管理共享内存的应用程序。
    • 应用程序必须调用特定的接口(如 POSIX 共享内存或MemVerge GISMO 提供的接口)来实现跨主机或跨进程的数据共享。
  • 运行机制
    • CXL 内存被用作跨主机共享的资源。
    • 应用程序通过特殊的共享内存设备接口(例如/dev/dax0.0)访问共享内存,显式地处理共享内存的读写操作
  • 优势
    • 支持多主机协同计算,实现跨节点共享内存。
    • 提供了数据一致性与高性能的共享内存解决方案。
    • 适合需要显式管理共享内存的分布式应用场景,如大规模数据协同处理、机器学习训练等。

    ===

核心区别总结

特点

未修改的应用程序(内存扩展/池化)

共享内存应用程序(内存共享)

代码修改

无需修改,应用程序透明使用内存资源

需要修改,显式调用共享内存接口

内存访问机制

通过标准内存分配机制(NUMA 节点)

通过共享内存设备接口 (/dev/dax0.0)

应用场景

扩展单主机内存,池化多主机内存资源

跨主机共享内存,支持协同计算和分布式任务

复杂性

较低,操作系统和硬件透明处理

较高,应用程序负责管理共享内存的使用

Note

对于扩展和池化两个场景的内存资源,应用层是无感知的,因为是基于系统内核NUMA来调度的;而内存共享,需要改写应用层的数据读写方式(如FUSE等),通过特定路径挂载来实现。

有限内存(DRAM)场景下的 AI/ML应用与基于CXL内存扩展的差异

性能对比分析(图表:GPU Utilization)
  • 绿色线条(Native FlexGen)
    • FlexGen 使用传统 DRAM 和 NVMe 存储,GPU 利用率在前期较高,但随后逐渐下降。
    • 出现性能瓶颈,导致 GPU 未被充分利用。
  • 蓝色线条(FlexGen with MemVerge Memory Machine)
    • 使用CXL 内存分层技术,保持高 GPU 利用率。
    • GPU 资源使用更高效,持续时间更长,性能更稳定。
CXL for AI/ML Workloads
  • FlexGen[1] 是一种高吞吐量生成引擎,用于运行大语言模型,解决 GPU 内存受限的问题。
  • FlexGen 提供高效的推理性能,通过将数据分层存储卸载到主内存(CXL 内存)

===

关键优势

  1. MemVerge 和 Micron 通过 CXL 内存充分利用 NVIDIA GPU:
    • GPU 利用率提升77%
    • 提供超过2 倍 的推理速度
    • 每秒解码 Token 数量提升3 倍
    • 零 NVMe I/O,降低存储瓶颈

原生DRAM(64 GB x 8 x 2)+CXL DRAM (256 GB x 4)硬件系统


增强的RAG工作流,基于扩展的CXL大内存

左侧:传统 RAG Pipeline
  • 结构
    • 输入 Query → 检索(Retrieval) → 向量数据库(Vector DB)
    • 嵌入(Embedding) → 提示(Prompt) → 大语言模型(LLM Model)
    • 输出答案(Answer)
    • 企业知识(Enterprise Knowledge)作为嵌入来源。
  • 常见瓶颈
    • CPU嵌入生成(Embedding generation)
    • GPU大语言模型(LLM)推理
    • 内存存储大规模数据集和嵌入,导致数据溢出到磁盘
    • 存储 I/O读写向量数据效率低

    ===

右侧:改进的 RAG Pipeline
  • 结构
    • 输入 Query → 检索(Retrieval)
    • 支持多向量数据库(Vector DB #1 → Vector DB #n)
    • 聊天历史(Chat History)与嵌入数据结合
    • 使用LlamaIndex 可组合内存(Composable Memory) 提供高效的内存访问
    • 提示(Prompt) → 大语言模型(LLM Model) → 输出答案(Answer)
    • 企业知识(Enterprise Knowledge)依然作为嵌入数据来源。

    ===

CXL 内存在 RAG Pipeline 中的优势
  1. 高效检索
    • 支持大规模和多向量数据库的高效数据检索。
  2. 提高用户答案质量
    • 丰富检索上下文,提供更准确的答案。
  3. 内存资源共享与池化
    • 大容量内存可以在多个节点间共享和动态分配。
  4. 改善 RAG 性能
    • 提高 GPU 利用率,减少 I/O 瓶颈。

多轮对话历史在实际应用中的价值

a. 提供上下文记忆
  • 作用聊天历史可以帮助模型理解当前查询背后的上下文,包括之前的用户问题和模型回答。
  • 优势
    • 避免生成孤立答案,保持上下文一致性。
    • 支持跨多轮对话,提供连贯和符合逻辑的回答。
b. 改进检索质量
  • 作用聊天历史可以作为额外的输入特征,帮助检索引擎在向量数据库中找到更相关的文档或嵌入数据。
  • 优势
    • 更精准的检索根据上下文筛选高相关性内容。
    • 减少无关内容,避免检索结果偏离用户意图。
c. 增强模型生成质量
  • 作用聊天历史作为额外输入被注入到大语言模型(LLM),形成连续的提示(Prompt)。
  • 优势
    • 改善长对话生成质量,避免重复回答或误解用户需求。
    • 提供更自然、丰富的输出。

大数据应用场景的内存共享案例

TPC-DS + Spark 工作负载通过 MemVerge GISMO、X-Conn 交换机和 Montage CXL 内存共享模式加速。

解决方案的优势

  1. 减少 DRAM 需求
    • Alluxio 使用共享 CXL 缓存(GISMO) 而非本地缓存,显著减少 DRAM 依赖。
  2. 降低磁盘与网络 I/O 开销
    • 数据通过CXL 内存总线 访问,减少对 HDFS 磁盘和网络的负载。
  3. 性能提升
    • TPC-DS 查询延迟更低相较于 1G 以太网,显著缩短查询时间。
    • 更高的 QPS(每秒查询/请求)提升整体系统的并发处理能力。
    • 结果产出时间缩短通过 CXL 内存优化数据访问速度,缩短任务完成时间。

Alluxio 分布式数据加速层

1. 什么是 Alluxio?

Alluxio 是一个开源的分布式数据编排系统,充当计算框架与存储系统之间的数据访问层,提供高效的数据管理和加速。

  • 前身最初由加州大学伯克利分校 AMPLab 开发,项目名称为Tachyon
  • 主要作用
    • 为上层计算框架(如 Spark、Presto、Flink)提供统一的数据访问接口。
    • 提高存储数据的访问速度,通过内存缓存机制显著减少 I/O 瓶颈。
2. Alluxio 的核心功能
a. 数据缓存与加速
  • 内存优先Alluxio 将数据缓存到内存中,优先访问高速缓存数据。
  • 自动数据管理通过分层存储机制,结合内存、SSD 和 HDD,提高数据访问效率。
  • 减少延迟避免每次访问都依赖远程存储系统(如 HDFS、S3),显著降低 I/O 延迟。
b. 统一的数据访问接口
  • 多种存储支持
    • 支持与多种存储系统集成,包括 HDFS、Amazon S3、Google Cloud Storage、Azure Blob Storage 等。
  • 上层兼容性
    • 计算框架如Apache Spark、Presto、Flink、MapReduce 可以通过 Alluxio 直接访问底层存储数据。
  • 统一命名空间
    • 提供抽象的文件系统视图,使不同计算框架共享数据变得更加简单。
c. 数据管理与优化
  • 分层存储自动管理数据在内存、SSD 和磁盘之间的分布,提高存储资源利用率。
  • 数据本地化将热点数据迁移到计算节点附近,减少数据传输开销。
  • 透明的数据迁移将冷数据从高性能存储自动迁移到低成本存储。
3. Alluxio 在共享 CXL 内存模式中的角色

在当前架构中,Alluxio 使用共享 CXL 内存(GISMO),其优势主要体现在以下几个方面:

  1. 数据高速缓存
    • Alluxio 通过共享 CXL 内存 作为缓存层,替代本地 DRAM,实现更高效的数据存储和访问。
  2. 减少 I/O 瓶颈
    • 传统架构中,Alluxio 需要依赖本地节点缓存,缓存未命中时会回退到网络存储(如 HDFS),导致高延迟。
    • 在 CXL 内存模式下,数据通过CXL 内存总线 访问,避免磁盘和网络 I/O 限制。
  3. 提高分布式查询性能
    • 在 Spark 和 TPC-DS 工作负载中,Alluxio 利用共享 CXL 内存加速数据传输,缩短查询延迟、提高查询吞吐量。
  4. 共享内存资源
    • Alluxio 跨多个服务器共享 CXL 缓存,打破单节点 DRAM 的限制,适合大规模数据计算任务。
4. 应用场景
  • 大数据分析与 Spark、Presto 结合,优化大规模数据查询和分析任务。
  • 机器学习与 AI 训练加速数据加载和预处理,支持高效模型训练。
  • 多云与混合云在多云环境中,Alluxio 提供统一的数据访问,简化数据管理。
  • 数据湖优化为数据湖提供加速缓存,提升整体访问性能。
5. 优势总结
  • 高性能数据缓存将数据加载到 CXL 内存中,提供接近 DRAM 的性能。
  • 统一数据访问整合多存储系统,降低数据孤岛问题。
  • 分布式加速通过共享内存加速数据访问,优化分布式查询和计算性能。
  • 易集成与流行的计算框架(如 Spark、Flink)无缝集成。

更多关于Alluxio的理解,可结合 JuiceFS 比较来理解:

  • JuiceFS 对比 Alluxio[2]

MemVerge CXL 内存控制台

  1. https://github.com/FMInference/FlexGen ↩
  2. https://juicefs.com/docs/zh/community/comparison/juicefs_vs_alluxio/ ↩
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 王知鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 要点概览
    • 2. “共享内存应用程序” 在内存共享中的特点:
    • 核心区别总结
    • 关键优势
    • 解决方案的优势
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档