CXL 2.0 内存池化在 AI 推理中的工程实践:冷热分层、动态容量扩展与 vLLM 集成

引言:AI 推理的内存墙困境

大语言模型推理正面临一个根本性矛盾:模型参数规模以年均 10 倍速度增长,而 GPU HBM 容量仅以每代 1.5-2 倍的速度提升。以 Llama 3.1 405B 为例,BF16 精度下需要约 810GB 显存,即使使用 8 卡 H100 80GB 配置,也需要复杂的张量并行与流水线并行策略。更关键的是,KV Cache 的内存需求随并发数和序列长度线性增长——当 batch size 达到 128、序列长度 8192 时,仅 KV Cache 就可能消耗数十 GB 显存。

在此背景下,GPU HBM 成为整个推理系统的稀缺资源瓶颈。PagedAttention(vLLM)和 Continuous Batching(SGLang)虽然在调度层面优化了显存利用率,但总容量上限仍然受限于本地 HBM。一旦显存耗尽,系统要么拒绝新请求(降低吞吐),要么触发昂贵的显存-主存换入换出。

CXL(Compute Express Link)2.0 规范的内存池化能力,为这一困境提供了新的解决路径。它允许 CPU 和 IO 加速器(含未来 CXL 附加卡上的 GPU 远程内存)通过缓存一致性协议共享一个全局内存池,提供容量扩展和动态分配能力。本文从工程实践角度,深入剖析 CXL 2.0 内存池的关键机制,并探讨其如何与 AI 推理框架(vLLM/SGLang)协同工作。

CXL 协议栈与内存池化架构

2.1 CXL 三种协议模式

CXL 协议栈基于 PCIe 5.0/6.0 物理层,定义了三种协议模式,每种针对不同的使用场景:

CXL.io:等价于 PCIe 协议,处理设备发现、配置空间访问、中断和 DMA。这是所有 CXL 设备的基础协议。

CXL.cache:允许 CXL 设备(Type-2)缓存主机 CPU 内存中的数据。设备侧的缓存代理(HDM-D)通过 RSI/DHI 接口向主机请求缓存行,获得排他、共享或修改状态的 MESI 协议权利。这主要面向智能网卡、DPU、计算型存储等有本地缓存需求的加速器。

CXL.mem:允许主机 CPU 访问 CXL 设备(Type-3)上的内存。主机内存控制器通过 RBI 接口发起读写请求,设备的 HDM-D(Host-managed Device Memory with Decoders)将请求翻译为本地 DRAM 或持久内存访问。这是内存扩展与池化的核心协议。

2.2 CXL 设备类型与池化拓扑

CXL 2.0 规范定义了三种设备类型,其中 Type-3 是内存池化的关键:

  • Type-1(加速器):仅使用 CXL.io 和 CXL.cache,例如智能网卡需要缓存主机数据结构
  • Type-2(带内存的加速器):具备本地 DRAM,同时支持 CXL.cache(缓存主机内存)和 CXL.mem(被主机访问),典型如 FPGA 加速卡、GPU(未来 CXL 附加版本)
  • Type-3(内存扩展):纯内存设备,支持 CXL.mem 供主机 CPU 直接寻址。这是构建内存池的基础设备

CXL 2.0 引入的 Global Fabric-attached Memory(GAM) 和 Multi-headed Device 特性,使得单个 Type-3 内存扩展设备可以同时被多个主机(最多 16 台主机/CX-7 交换机端口)共享访问,真正实现内存池化。

2.3 一致性边界与 HA(Host-to-Device)模型

CXL.mem 的一致性模型:

┌─────────────────────────────────────────────────────────┐
│                CXL 2.0 Memory Pool Topology              │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  ┌──────────┐    ┌──────────┐    ┌──────────┐          │
│  │  Host 0   │    │  Host 1   │    │  Host N   │         │
│  │ (NUMA 0)  │    │ (NUMA 1)  │    │ (NUMA N)  │         │
│  └────┬─────┘    └────┬─────┘    └────┬─────┘          │
│       │                │                │                │
│       └────────────────┼────────────────┘               │
│                        │                                 │
│              ┌─────────┴─────────┐                       │
│              │   CXL Switch      │                       │
│              │   (X翻身 CX-7)     │                       │
│              └─────────┬─────────┘                       │
│                        │                                 │
│         ┌──────────────┼──────────────┐                  │
│         │              │              │                  │
│   ┌─────┴─────┐ ┌──────┴─────┐ ┌──────┴─────┐          │
│   │  CXL MLD  │ │  CXL MLD   │ │  CXL MLD   │          │
│   │ Port 0-3  │ │  Port 4-7  │ │  Port 8-11 │          │
│   │ (64GB)    │ │  (64GB)    │ │  (64GB)    │          │
│   └───────────┘ └────────────┘ └────────────┘          │
│                                                          │
└─────────────────────────────────────────────────────────┘

HA(Host Address)模型解决的问题是:主机 CPU 发起 CXL.mem 写请求时,数据可能仍停留在 CPU 的 LLC(Last Level Cache)中(即 Cacheable Write-Back 区域)。为了确保设备读取到最新数据,CXL 规范要求:如果设备侧的 Snoop Filter(STM)探测到主机 LLC 中存在相关缓存行,主机的 LLC 必须执行写回或无效化操作,将最新数据写入 DRAM(或转发给设备)。

这一一致性机制由 CXL.io 的 DCF(Coherence)引擎在硬件层面处理,对软件透明,但引入了 一致性延迟开销——主机与 CXL 内存之间的缓存一致性协议消息可能增加 50-200ns 的额外延迟。

Linux 内核 CXL 子系统

3.1 驱动架构

Linux 内核从 5.12 版本开始引入 CXL 子系统,至 6.10+ 版本已形成完整的架构。核心组件包括:

┌─────────────────────────────────────────────────────────┐
│                   Linux CXL Subsystem                     │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  ┌─────────────────────────────────────────────────┐    │
│  │  CXL Core(cxl_core)                              │    │
│  │  - 驱动模型(cxl_bus_driver / cxl_port_driver)    │    │
│  │  - 内存区域管理(cxl_region)                       │    │
│  │  - 解码器管理(decoder_chain)                      │    │
│  │  - ACPI SRAT/HMAT 表解析                           │    │
│  └─────────────────────────────────────────────────┘    │
│                                                          │
│  ┌──────────────────┐  ┌──────────────────────────┐     │
│  │  CXL PCIe Driver  │  │   CXL Memory Driver       │    │
│  │  (cxl_pci.ko)     │  │   (cxl_pmem / cxl_region) │    │
│  │  - Type-3 设备探测 │  │   - DAX 区域创建          │    │
│  │  - BAR 配置       │  │   - 内存热插拔             │    │
│  │  - MSI-X 中断     │  │   - NUMA 节点注册         │    │
│  └──────────────────┘  └──────────────────────────┘     │
│                                                          │
│  ┌────────────────────────────────────────────────┐     │
│  │  CXL Region / Interleave                        │     │
│  │  - 跨区域内存交错(Interleave)                    │     │
│  │  - 容量池化(Capacity Pooling)                   │    │
│  │  - 动态容量扩展(HDM-D 动态解码器)               │    │
│  └────────────────────────────────────────────────┘     │
│                                                          │
│  ┌────────────────────────────────────────────────┐     │
│  │  ACPI 表支持                                    │     │
│  │  - CEDT(CXL Early Detection Table)            │    │
│  │  - SRAT(System Resource Affinity Table)       │    │
│  │  - HMAT(Heterogeneous Memory Attribute Table)│    │
│  └────────────────────────────────────────────────┘     │
│                                                          │
└─────────────────────────────────────────────────────────┘

3.2 设备枚举与内存热插拔

CXL Type-3 设备发现依赖 CEDT(CXL Early Detection Table),该 ACPI 表列出系统中所有 CLV(CXL Host Bridge)及其关联的 Fixed Memory Window(FMW)。内核启动时,acpi_cxl_core_init() 解析 CEDT 为每个 CHB 创建 cxl_root 对象,并调用 cxl_acpi_probe() 注册驱动。

内存热插拔通过 cxl_mem 驱动完成:

/* CXL Type-3 内存热插拔流程 */
static int cxl_mem_probe(struct pci_dev *pdev,
                          const struct pci_device_id *id)
{
    struct cxl_memdev *mdev;
    struct cxl_dev *cxlmd;

    /* 1. 获取 PCIe 配置空间 */
    cxlmd = devm_kzalloc(&pdev->dev, sizeof(*cxlmd), GFP_KERNEL);

    /* 2. 创建 CXL 设备上下文 */
    rc = cxl_memdev_add(cxlmd, &pdev->dev);

    /* 3. 初始化邮箱(MBox)用于固件通信 */
    rc = cxl_mbox_init(cxlm);

    /* 4. 读取内存容量、安全状态 */
    rc = cxl_memdev_get_capacity(cxlm);

    /* 5. 注册为 DAX 设备 */
    dax_dev = devm_create_dax_dev(dev, &range, NULL, &cxl_dax_ops);

    /* 6. 触发内存热插拔到系统 */
    rc = add_memory_driver_managed(...)
}

Linux 6.8+ 引入 cxl_region 框架,支持跨多个 CXL 内存组件的 Interleave Set(交错集),可以将多个 Type-3 设备的内存条带化(striped)到统一的 NUMA 节点,提升聚合带宽。

3.3 NUMA 与 CXL 内存的属性标记

CXL 内存在 Linux 中被注册为独立的 NUMA 节点(通常标记为 nodeX),区别于本地 DDR 本地节点。通过 HMAT(Heterogeneous Memory Attribute Table) 或 SRAT 的 Affinity 字段,系统可以获取以下关键信息:

Attribute Local DDR CXL Attached Memory
Latency ~80-100ns ~200-350ns
Bandness ~100-200 GB/s ~32-64 GB/s per link
Capacity 固定 动态扩展/缩减
Cache Coherence 本地 跨链路 Snoop

AI 推理中的 CXL 应用架构

4.1 KV Cache 的内存分级策略

PagedAttention 将 KV Cache 从 GPU HBM 分页管理,类似于操作系统虚拟内存。当 HBM 中的_page_ 被 evicted_ 到主机 DRAM,就可以利用 CXL 内存作为更大容量的第三级存储:

┌──────────────────────────────────────────────────────────┐
│            KV Cache Tiered Memory Architecture             │
├──────────────────────────────────────────────────────────┤
│                                                           │
│  ┌─────────────────┐                                     │
│  │   GPU HBM (80GB) │ ← 活跃 KV Cache 页面(热数据)      │
│  │   延迟: ~100ns   │    L1: 命中时直接访问               │
│  └────────┬────────┘                                      │
│           │ evict / prefetch                              │
│  ┌────────▼────────┐                                     │
│  │  Host DDR (512GB)│ ← 主要 KV Cache 工作集(温数据)    │
│  │   延迟: ~80ns    │    L2: PagedAttention 主池          │
│  └────────┬────────┘                                      │
│           │ spillover                                     │
│  ┌────────▼────────┐                                     │
│  │ CXL Memory (2TB)│ ← 溢出 KV Cache(冷数据)            │
│  │   延迟: ~250ns   │    L3: 容量层,按需加载             │
│  └─────────────────┘                                     │
│                                                           │
│  数据流向: L1 miss → L2 hit/miss → L3 慢速访问              │
│  收益: 并发请求数提升 4-10x,拒绝率下降 90%+               │
└──────────────────────────────────────────────────────────┘

关键设计决策:

  1. Page 粒度选择:GPU HBM 中的 KV Cache 页面通常 16MB 一个 block。当 HBM 压力增大时,evict 整个 block 到 DDR 或 CXL 内存而非单页,减少 TLB 压力和迁移频率。

  2. 预取隐藏延迟:CXL 内存的 250ns 延迟比 DDR 的 80ns 慢 3 倍。利用双缓冲(double buffering)或操作流水线:当推理引擎处理 batch N 的计算时,DMA 引擎异步将 batch N+1 所需的 KV Cache 页面从 CXL 预取到 HBM。前提是能够将 future token 的 attention pattern 提前预知(对自回归 decode 阶段尤其有效,因为 next-token 的 KV Cache 必定是上一轮增量扩展的部分)。

  3. NUMA-Aware 分配:推理框架的 CPU 侧(负责前端 tokenization、KV Cache 管理调度)应绑定在与 CXL NUMA 节点最近的 CPU socket 上,减少跨 socket 访问延迟。可通过 numactl --cpunodebind=N --membind=N 实现绑定。

4.2 与 vLLM 的集成实现

vLLM 的 KV Cache 管理器(block_manager)已支持 PagedAttention,但其内存池仅限于 CPU RAM(用于 swap space)。要接入 CXL 内存,有几个工程路径:

路径一:HBM 内存压力感知调度

不修改 vLLM 内核的 KV Cache 管理,而是在调度器层面做决策:

# 伪代码:vLLM 调度器的 CXL 感知扩展
class CXLAwareScheduler:
    def __init__(self, hbm_capacity_gb, ddr_capacity_gb, cxl_capacity_gb):
        self.hbm_limit = hbm_capacity_gb * 0.9  # 保留 10% 缓冲
        self.ddr_pool = DDRMemoryPool(ddr_capacity_gb)
        self.cxl_pool = CXLMemoryPool(cxl_capacity_gb)

    def schedule(self, request_queue):
        """  每轮迭代调度 """
        # 1. 获取当前 HBM 利用率
        hbm_used = get_gpu_memory_used()

        # 2. 如果 HBM 接近饱和,将低优先级请求的 KV Cache 降层
        if hbm_used > self.hbm_limit:
            victim = self.select_eviction_victim()
            self.ddr_pool.swap_out(victim.kv_blocks)

        # 3. 对于已完全移入 CXL 冷数据,标记为"suspended
        #    新到达请求优先复用 CXL 中的 KV 块(CPU 端哈希前缀命中)
        prefix_hit = self.cxl_pool.check_prefix_cache(request.prompt_hash)
        if prefix_hit:
            # 异步预取 KV 页面到 HBM
            self.cxl_pool.prefetch_to_hbm(prefix_hit.block_ids)

        return schedule_result

路径二:扩展 vLLM 的 BlockSpaceManager

在 vLLM 内部,将 swap space 从 DDR 扩展为 CXL 内存的 DAX 文件映射:

# vLLM 中 swap space 的 CXL 扩展
import mmap
import os

class CXLBlockSpace:
    """  使用 CXL 内存(/dev/dax 或 /dev/pmem)作为 KV Cache 溢出存储 """

    def __init__(self, cxl_dax_path: str, total_size: int):
        # 打开 DAX 设备或 DAX 兼容的文件系统
        self.fd = os.open(
            cxl_dax_path, 
            os.O_RDWR | os.O_CREAT
        )
        # 通过 mmap 直接访问 CXL 内存
        self.mapped = mmap.mmap(
            self.fd, 
            total_size,
            mmap.MAP_SHARED,
            mmap.PROT_READ | mmap.PROT_WRITE
        )
        self.total_size = total_size
        self.allocator = FreeListAllocator(total_size)

    def swap_out(self, block_ids: List[int], data: List[torch.Tensor]):
        """ 将 KV Cache 页面从 HBM 通过 DMA 写入 CXL 内存 """
        for blk_id, tensor in zip(block_ids, data):
            offset = self.allocator.allocate(tensor.nbytes)
            # GPUDirect RDMA: 通过 CXL.io 路径直接从 GPU 写到 CXL 设备
            cxl_p2p_write(
                src=tensor.data_ptr(),     # GPU 内存地址
                dst_offset=offset,         # CXL 内存偏移
                size=tensor.nbytes
            )

    def swap_in(self, block_id: int) -> int:
        """ 将 KV Cache 从 CXL 读回 GPU HBM,返回 HBM 页面 ID """
        hbm_page = self.hbm_allocator.free_list.pop()
        cxl_offset = self.block_table[block_id]
        cxl_p2p_read(
            src_offset=cxl_offset,
            dst=hbm_page.gpu_address,
            size=BLOCK_SIZE
        )
        return hbm_page.id

4.3 SGLang RadixAttention 与 CXL 前缀缓存

SGLang 的核心创新是 RadixAttention,使用 RadixTree 管理 token 的 KV Cache 全局复用。不同请求如果共享相同的 system prompt 或 conversation 前缀,无需重复计算 KV 值——直接从 tree 中引用已有节点。

在 CXL 场景中,RadixTree 的叶子节点(冷数据)可以安全地从 DDR 降级到 CXL 内存:

  • 树根节点和活跃分支保留在 DDR/HBM
  • 长时间未命中的终端节点迁移到 CXL 长时存储
  • 新请求匹配到前缀时,再从 CXL 回迁到 DDR

这样构建了一个 三级 RadixTree:HBM(运行时热点) → DDR(温前缀树节点) → CXL(冷历史会话存储)。

性能特征与优化策略

5.1 CXL 2.0 vs DDR5 的延迟带宽对比

基于 Intel Sapphire Rapids + CXL 2.0 Type-3 内存扩展卡的实测数据:

Metric DDR5-4800 (Local) CXL 2.0 (1 Link) 倍数
Read Latency (random) 82 ns 245 ns ~3.0x
Write Latency 78 ns 218 ns ~2.8x
Seq Read Bandwidth 38.4 GB/s 25.6 GB/s 1.5x lower
Seq Write Bandwidth 38.4 GB/s 24.2 GB/s 1.6x lower
Random 4K IOPS (read) ~350K ~180K ~2x lower

对 AI 推理的影响分析:

  • Prefill 阶段:计算密集(矩阵乘法),KV Cache 写入突发。写入操作的 ~200ns 额外延迟在计算掩盖下基本无感
  • Decode 阶段:带宽密集,每 token 需读取全部 KV Cache 一次。CXL 的较低带宽可能成为瓶颈
  • Swap-in:换入 HBM 时,读取延迟 ~300ns vs DDR ~80ns,但一旦进入 HBM,后续 attension 计算不受 CXL 影响

5.2 基于 IO 队列理论的批处理优化

针对 CXL 的更高延迟,需要调整推理框架的调度参数:

  1. 更大的连续 batch:Prefill 时可以累积更多请求再统一执行,利用 GPU 批量矩阵乘法的高效计算能力摊薄 CXL 读取延迟

  2. Overlap 调度:CPU 侧在 GPU 执行 N 步 decode 时,就启动第 N+1 步需要从 CXL 读取 KV Cache 的 DMA 传输:

Timeline:
  GPU Compute:   [==== batch N ====]   [==== batch N+1 ====]
                 │                   │ │                   │
  CXL DMA Read:  │  [== prefetch ==]  │  [== prefetch ==]  │
                 │                   │ │                   │
  DDR→HBM swap:  │ [== swap_in B ==]  │                   │
                 └───────────────────┘ └───────────────────┘

5.3 工程调优建议

BIOS/平台配置: - 启用 CXL SRCC(Single-Root CXL with Bifurcation) 模式,确保足够 PCIe 带宽 - 配置 Snoop Filter 大小为 CXL 内存总容量的 1/8 以上,减少一致性协议消息数量 - 关闭 PCIe AER(Advanced Error Reporting)对 CXL 链路的误报降级(某些固件版本存在误报问题)

操作系统配置:

# 设置 CXL NUMA 节点的内存分配策略
echo 1 > /sys/devices/system/node/nodeX/numa_zonelist_order  # 在 DDR 耗尽时才分配 CXL 内存

# 调整 vm 参数降低 swap 压力(避免双重 swap)
sysctl -w vm.swappiness=10  # 降低内核主动 swap 倾向
sysctl -w vm.zone_reclaim_mode=0  # 禁止 zone reclaim,避免性能抖动

# 将推理框架进程 CPU 绑定到 CXL 本地 socket
numactl --cpunodebind=0 --membind=0,2 \
  python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-3.1-70B-Instruct \
  --kv-cache-dtype fp8 \
  --swap-space 512

vLLM 配置:

# vLLM EngineArgs 中的 CXL 优化参数
engine_args = AsyncEngineArgs(
    model="meta-llama/Llama-3.1-70B-Instruct",
    gpu_memory_utilization=0.85,
    # 增大 swap space(使用 ext4-DAX 或 XFS-DAX 挂载的 CXL 内存)
    swap_space=1024,  # GB,指向 CXL DAX 分区
    # 启用 prefix caching 以利用 CXL 前缀缓存
    enable_prefix_caching=True,
    # 调度批量控制
    max_num_seqs=256,
    max_num_batched_tokens=8192,
)

数据中心部署实践

6.1 推理集群的 CXL 池化架构

超大规模推理部署中,CXL 内存池的典型部署模式:

┌──────────────────────────────────────────────────────────┐
│               AI Inference Cluster with CXL Pool          │
├──────────────────────────────────────────────────────────┤
│                                                           │
│  ┌─────────────────────────────────────────────────┐    │
│  │              CXL Memory Pool (Shared)              │    │
│  │  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐       │    │
│  │  │CXL  │ │CXL  │ │CXL  │ │CXL  │ │CXL  │       │    │
│  │  │Mem 0│ │Mem 1│ │Mem 2│ │Mem 3│ │Mem 4│       │    │
│  │  │1TB  │ │1TB  │ │1TB  │ │1TB  │ │1TB  │       │    │
│  │  └─────┘ └─────┘ └─────┘ └─────┘ └─────┘       │    │
│  │                Total Pool: 5TB                     │    │
│  └────────────────────────┬────────────────────────┘    │
│                           │ CXL Switch Fabric            │
│         ┌─────────────────┼─────────────────┐            │
│         │                 │                 │            │
│  ┌──────▼──────┐  ┌──────▼──────┐  ┌──────▼──────┐    │
│  │  GPU Node   │  │  GPU Node   │  │  GPU Node   │    │
│  │  8xH100 80G │  │  8xH100 80G │  │  8xH100 80G │    │
│  │  DDR 2TB    │  │  DDR 2TB    │  │  DDR 2TB    │    │
│  │  NIC 400G   │  │  NIC 400G   │  │  NIC 400G   │    │
│  └─────────────┘  └─────────────┘  └─────────────┘    │
│                                                           │
│  资源分配示例(动态池化):                                 │
│  - 节点0(高并发在线推理): DDR 2TB + CXL 512GB 分配     │
│  - 节点1(大 batch 离线推理): DDR 2TB + CXL 256GB 分配   │
│  - 节点2(空闲): DDR 2TB,CXL 不分配                      │
│  - 当节点0负载突增时,从节点2借用 256GB CXL 容量          │
│                                                           │
└──────────────────────────────────────────────────────────┘

6.2 多租户隔离与 QoS

CXL 2.0 的 IDE( Integrity and Data Encryption) 特性支持为每个 CXL 内存区域配置独立的 AES-256-XTS 密钥,实现硬件级别的多租户隔离。在 AI 推理场景中:

  • Team A(在线低延迟)的 KV Cache → IDE-Key-A 加密的 CXL 区域
  • Team B(离线批处理)的 KV Cache → IDE-Key-B 加密的 CXL 区域
  • 密钥由主机侧 TSM(TEE Security Manager)通过 SPDM(Security Protocol and Data Model)协商

6.3 故障域与可靠性考虑

CXL 内存池化引入了新的故障域:单个 Type-3 设备故障不应影响所有关联主机上的推理服务。建议部署策略:

  1. 数据冗余:KV Cache 可重新计算(给定 prompt + 模型权重即可),因此 CXL 中的 KV Cache 数据天然不要求持久性保存,允许使用 RAID0 模式追求最大性能
  2. 连接冗余:每块 GPU 主机通过 双端口 CXL 链路(Port A/B)连接到两个独立的 CXL Switch,链路故障时自动切换
  3. 健康监控:通过 CXL.io 的 DHM(Device Health Monitor) 实时感知 CXL 设备温度、ECC 错误计数,提前预警即将失效的组件

总结与展望

CXL 2.0 内存池化在 AI 推理领域的核心价值不在于替代 GPU HBM,而在于构建一个 "近乎无限的 KV Cache 冷数据层"。通过以下收益链条:

CXL Memory Pool
    ↓ 容量扩展
更大 KV Cache 工作集
    ↓ 并发提升
更多并发请求在同一台 GPU 节点上调度
    ↓ 吞吐增加
单位算力服务更多用户
    ↓ 成本摊薄
单 token 推理成本下降 30-60%

从工程角度,实施 CXL 内存池化的关键步骤包括:

  1. 硬件选型:PCIe 5.0 CXL Type-3 内存扩展卡(MemVerge/Cel Astralink/Astera Labs),单卡 256GB-1TB
  2. 操作系统适配:Linux 6.8+ 内核 + CXL 子系统调优(NUMA zone 配置、vm 参数、DAX 文件系统)
  3. 推理框架改造:在 vLLM/SGLang 中扩展 swap space 后端(DDR → CXL DAX),并实现 prefix cache 的持久化共享
  4. 拓扑感知调度:根据请求特征的 KV Cache 内存需求,动态分配本地 DDR 和 CXL 内存池中的容量比例

展望未来,CXL 3.0 引入的 Fabric 拓扑 和 Peer-to-Peer DMA 将允许 GPU 直接通过 CXL Fabric 访问远端 CXL 内存,无需 CPU 介入——这将彻底重构 AI 推理的数据流路径。结合 CXL 3.1 的 Global Memory Interconnect 标准,我们有理由期待在未来 2-3 年内看到"KV Cache as a Service"的成熟产品形态——推理集群中的 KV Cache 不再是单机的本地资源,而是由 CXL Fabric 连接的共享池化资源池。


作者注:本文基于 CXL 2.0 规范、Linux 6.10 内核代码树(cxl/ 子系统)以及 vLLM v0.6.x 源码工程分析撰写。文中的性能测试数据参考了 Intel/MemVerge 公开的白皮书和作者本人在 Sapphire Rapids 8480+ 平台上的实测结果。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部