NIXL#
基于 NIXL 的持久存储 — 主要的生产 L2 后端,使用 NIXL(NVIDIA 互连库)进行高性能存储 I/O。两种适配器类型共享此后端:
nixl_store— 在初始化时预分配的固定存储描述符池。nixl_store_dynamic— 每次操作时动态打开并注册文件,支持跨重启的持久化/恢复,并消除打开文件描述符数量的限制。
静态池 — nixl_store#
主要的生产适配器。在初始化时预分配一组存储描述符池。
必填字段:
backend: 存储后端 -- 以下之一:POSIX、GDS、GDS_MT、HF3FS、OBJ、AZURE_BLOB。pool_size: 预分配的存储描述符数量(必须大于 0)。
后端特定参数 (``backend_params``):
基于文件的后端(GDS, GDS_MT, POSIX, HF3FS)需要:
file_path: 存储 L2 数据的目录路径。use_direct_io:"true"或"false"-- 是否使用直接 I/O。
OBJ 和 AZURE_BLOB 后端(对象存储)不需要 file_path。
后端描述:
后端 |
描述 |
|---|---|
|
标准 POSIX 文件 I/O。适用于任何文件系统。无直接 I/O。 |
|
NVIDIA GPU 直接存储。启用直接的 GPU 到存储传输,绕过 CPU。需要支持 GDS 的 NVMe SSD。 |
|
GDS 的多线程变体,以提高吞吐量。 |
|
共享文件系统后端(例如,用于分布式/网络存储)。 |
|
对象存储后端。无需本地文件路径。 |
|
Azure Blob Storage 的对象存储后端。无需本地文件路径。 |
配置示例:
# POSIX backend
--l2-adapter '{"type": "nixl_store", "backend": "POSIX", "backend_params": {"file_path": "/data/lmcache/l2", "use_direct_io": "false"}, "pool_size": 64}'
# GDS backend
--l2-adapter '{"type": "nixl_store", "backend": "GDS", "backend_params": {"file_path": "/data/nvme/lmcache", "use_direct_io": "true"}, "pool_size": 128}'
# GDS_MT backend
--l2-adapter '{"type": "nixl_store", "backend": "GDS_MT", "backend_params": {"file_path": "/data/nvme/lmcache", "use_direct_io": "true"}, "pool_size": 128}'
# HF3FS backend
--l2-adapter '{"type": "nixl_store", "backend": "HF3FS", "backend_params": {"file_path": "/mnt/hf3fs/lmcache", "use_direct_io": "false"}, "pool_size": 64}'
# OBJ backend
--l2-adapter '{"type": "nixl_store", "backend": "OBJ", "backend_params": {}, "pool_size": 32}'
# AZURE_BLOB backend
--l2-adapter '{"type": "nixl_store", "backend": "AZURE_BLOB", "backend_params": {"account_url": "https://<account_name>.blob.core.windows.net", "container_name": "<container_name>"}, "pool_size": 32}'
动态(持久/恢复) — nixl_store_dynamic#
NIXL 适配器的动态变体,按操作打开和注册文件,而不是在初始化时预分配。该变体支持以下功能:
持久化/恢复 -- 缓存的 KV 元数据在重启后仍然存在。
无文件描述符限制 -- 文件在每次传输时打开和关闭,因此缓存可以超出操作系统的打开文件描述符限制。
备注
仅支持基于文件的后端(POSIX, GDS, GDS_MT, HF3FS)。OBJ 和 AZURE_BLOB 后端尚不支持。
必填字段:
backend: 存储后端 -- 以下之一:POSIX、GDS、GDS_MT、HF3FS。
后端特定参数 (``backend_params``):
file_path: 存储 L2 数据文件的目录路径。use_direct_io:"true"或"false"。max_capacity_gb: 最大存储容量(以 GB 为单位)。当达到此限制时,适配器会拒绝存储。此项是逐出控制器计算使用情况所必需的。
可选字段(用于持久化):
persist_enabled(bool, 默认true): 若为true,关闭时数据文件将保留在磁盘上。若为false,关闭时所有数据文件将被删除。
查找时,若未命中则始终回退到二级存储(磁盘)进行检查;找到文件后,惰性填充内存索引。
配置示例:
# Basic dynamic POSIX backend (persist enabled by default)
--l2-adapter '{"type": "nixl_store_dynamic", "backend": "POSIX", "backend_params": {"file_path": "/data/lmcache/l2", "use_direct_io": "false", "max_capacity_gb": "10"}}'
# Explicitly disable persist
--l2-adapter '{"type": "nixl_store_dynamic", "backend": "POSIX", "backend_params": {"file_path": "/data/lmcache/l2", "use_direct_io": "false", "max_capacity_gb": "10"}, "persist_enabled": false}'
# With eviction
--l2-adapter '{"type": "nixl_store_dynamic", "backend": "GDS", "backend_params": {"file_path": "/data/nvme/l2", "use_direct_io": "true", "max_capacity_gb": "50"}, "eviction": {"eviction_policy": "LRU", "trigger_watermark": 0.9, "eviction_ratio": 0.1}}'
持久化 / 二级查找行为:
在 关闭 时,适配器默认将数据文件保留在磁盘上(
persist_enabled默认为true)。如果明确设置为false,则所有数据文件将被删除,以避免孤立存储。在 启动 时,内存索引为空。每次查找未命中都会回退到磁盘上的二级查找:若对应的确定性文件存在,则视为命中,并根据文件大小惰性填充内存索引。