什么是GGFS?
GGFS 是一款专为大规模 GPU 集群设计的下一代分布式并行文件系统,以 “让 GPU 不再等待数据” 为核心目标,面向 AI 大模型训练、AIGC、自动驾驶、科学计算、超算等场景,提供高吞吐、低延迟、强一致、全局统一命名空间的存储服务,彻底解决传统存储在多 GPU 并行访问下的 IO 瓶颈、GPU 利用率低、数据拷贝冗余等问题。
主要代码组成
主要有以下模块:
ggfs-commercial(商用核心能力)
↓
ggfs(文件系统核心逻辑 + BAM 块管理)
↓
gpu / gpu_data_structures / gpu_initiated(GPU 原生 I/O 体系)
↓
gpu_nvme(GPU 直连 NVMe 高速通道)
↓
storage(通用块存储管理层)
ggfs-commercial
- 持续更新中
ggfs
- 持续更新中
gpu
gpu_cache_manager
主要是给 GPU 用的高速缓存管理器,专门用来加速 GPU 读写数据,用的是最经典的 LRU 淘汰策略(当下不算流行),属于高性能计算 / 深度学习框架里非常核心的底层组件。
提供整个缓存系统的大脑,包含:
- 哈希表:快速查数据在不在
- LRU 链:决定谁该被踢出去
- 空闲链表:快速拿空块
- 统计命中 / 未命中
提供底层API:
- 初始化缓存
- 销毁缓存
- 查找数据(核心!)
- 插入数据
- 移除数据
- 刷新脏数据
- 预存数据
- 统计信息
- 清空缓存
基于 C 语言 + CUDA 写的、基于 LRU 策略的 GPU 显存缓存管理器,可大幅加速 GPU 数据访问,减少重复从内存 / 磁盘读取,提升系统速度。
gpu_crc
给 GPU 用的CRC 数据校验工具,这次在显卡上快速计算数据的校验码,用来检查数据有没有损坏、传输出错、被篡改。
主要提供四个核心能力:
- 计算 CRC32:给一段 GPU 上的数据,算一个 32 位校验码。
- 计算 CRC64:也是提供校验码但生成更长、更安全的 64 位校验码。
- 批量计算 CRC32:一次给100 个、1000 个数据块全部计算 CRC。
- 验证数据是否正确:拿数据和期望的指纹对比,若两者一致,则说明数据是完好的。
gpu_direct_dma
提供 GPU Direct DMA 高速数据搬运引擎,让 GPU 能超快、直接、异步地搬数据,不用麻烦 CPU 插手。
定义多种传输类型:
- 内存 → GPU
- GPU → 内存
- GPU → GPU
- 内存 → 内存
定义多种传输状态和传输请求参数,并且支持多路同时传输。
DMA 传输带来的好处是:
✅ CPU 完全不参与
✅ GPU 直接访问内存
✅ 多流并行传输
✅ 异步非阻塞
✅ 速度接近物理极限
这就是GPU Direct的核心!
gpu_filesystem
提供GGFS的能力,让 GPU 像电脑读写本地一样,直接读写文件,满足超级高带宽的需求。
核心功能:
- 初始化文件系统(格式化)
- 打开文件
- 关闭文件
- 读取文件
- 写入文件
- 创建目录
- 删除文件
- 查看文件信息
GGFS 文件系统:
✅ 数据直接在 GPU 里读写
✅ 自带高速缓存(你前面看的代码)
✅ 自带 DMA 高速搬运
✅ 自带 CRC 数据校验
✅ 速度比普通文件快 10~100 倍
gpu_io_completion
gpu_io_scheduler
gpu_metadata_io
gpu_metadata_manager
gpu_nvme_bam
gpu_prefetcher
gpu_rdma_network
gpu_data_structures / gpu_initiated
这部分内容提供了丰富的数据类型接口:
- 在 GPU 上运行的 B 树索引接口,用于GGFS 文件系统生产版本,让 GPU 能高速做 key-value 查找、插入、删除。
- 在 GPU 上运行的高性能哈希表(HashMap)索引接口,用于GPU 端高速 key-value 查找、插入、删除,专门为高并发、低延迟场景优化。
- 在 GPU 上运行的双向链表接口,专门用来做 LRU 缓存淘汰管理,是你整套 GPU 存储系统的缓存调度层。
B树引擎接口
- gpu_btree_init:初始化 GPU B 树(绑定节点池)
- gpu_btree_lookup:查找 key → 返回 value
- gpu_btree_insert:插入 key-value
- gpu_btree_split_node:节点分裂(v3.0 GPU kernel 专用)
- gpu_btree_delete:删除 key
- gpu_btree_update:更新 key 对应的 value
- gpu_btree_contains:判断 key 是否存在
哈希表索引接口
- gpu_hashmap_init:初始化 GPU 哈希表
- gpu_hashmap_lookup:查找 key → 返回 value
- gpu_hashmap_insert:插入 key-value
- gpu_hashmap_delete:删除 key
- gpu_hashmap_stats:获取占用数、负载因子
- gpu_hashmap_launch_params:自动计算 CUDA 启动参数(grid/block),v3.0 动态优化
双向链接口
- gpu_list_node_t(链表节点)
- key:键(用来索引)
- data:数据指针(指向 GPU 内存 / NVMe 地址)
- prev / next:双向链表指针
- gpu_list_t(链表总控)
- head:链表头(最常访问)
- tail:链表尾(最久未访问,LRU 淘汰)
- node_pool:GPU 上预分配的节点内存池
- max_nodes:最大节点数(缓存上限)
gpu_nvme
这是一个 GPU 直接访问 NVMe 固态硬盘的统一读写引擎,其核心作用是让 GPU 不经过 CPU、不经过系统内存,直接对 NVMe 硬盘进行异步读写。
核心能力包括:
- 初始化一套 GPU 直连 SSD 的底层环境
- 管理多种读写模式(CUDA 文件 / 专用 NVMe 驱动 / GPU 内核)
- 提供 异步读、写、刷新、批量提交 接口
- 内部维护请求队列、完成队列、命令缓冲区
- 支持请求合并、轮询完成、等待、取消、统计
从功能模块来说,主要是有以下能力:
- 辅助函数
- 把工作模式转成字符串(AUTO/CUFILE/SNVME/GPU_KERNEL/HYBRID)
把状态转成字符串(空闲 / 初始化中 / 就绪 / 错误 / 不可用)
- 初始化与销毁
- 申请 GPU 内存:命令缓冲区、完成队列、PRP 地址列表、门铃缓冲区
- 申请 pinned 内存用于请求池
- 创建 CUDA 流(IO 流 + 轮询流)和事件
- 自动选择最优 IO 模式
- 销毁时统一释放所有 GPU/CPU 资源
- 模式管理
- 获取当前工作模式
- 动态切换模式(GDS / SNVME / GPU Kernel)
- 检查模式是否可用
- 命名空间(NS)管理
- 管理 NVMe 命名空间(类似硬盘分区)
- 查询空间大小、扇区大小
- 请求提交(核心功能)
- 提交 读请求:从 NVMe 读到 GPU 内存
- 提交 写请求:从 GPU 内存写到 NVMe
- 提交 Flush:数据落盘
- 提交 批量请求
- 每个请求生成唯一 request_id,内部构建 NVMe 原生命令
- GPU Kernel 实现
- 设备端轮询完成队列
- 设备端查询请求状态
- 完全在 GPU 内部执行,不占 CPU
- 请求管理
- 取消请求
- 等待单个请求完成
- 同步等待所有请求完成
- 查询请求状态(pending/completed/failed/cancelled)
- 批量优化
- 合并相邻读请求(按 LBA 排序 + 连续块合并)
- 合并相邻写请求
- 减少 IO 次数,提升吞吐量
- 统计
- 总读写次数、总流量
- 平均延迟
- 模式切换次数、批量合并次数
- 打印统计信息
本阶段提供一个一个工业级、支持多模式、GPU 直接访问 NVMe SSD 的零拷贝异步 I/O 引擎接口,面向超高吞吐 AI 训练、GPU 直存场景设计。
storage
这是 GGFS 实现 “GPU 优先、零拷贝、分布式高速 I/O” 的核心引擎代码。
核心架构为:
┌─────────────────────────────────────────────────────┐
│ zero_copy_dma引擎核心 │
├─────────────┬─────────────┬─────────────────────────┤
│ 初始化模块 │ 内存管理层 │ 传输调度层 │
├─────────────┼─────────────┼─────────────────────────┤
│ • 绑定GPU │ • 内存注册 │ • 异步传输队列 │
│ • P2P 检测 │ • 内存池管理 │ • 5 种传输类型封装 │
│ • RDMA 检测 │ • 分配/释放 │ • 完成事件 + 超时等待 │
│ • CUDA 流创建│ • 碎片合并 │ • 状态查询 │
└─────────────┴─────────────┴─────────────────────────┘
│ │
▼ ▼
┌────────────────────┐ ┌─────────────────────┐
│ 多GPU P2P 模块 │ │ RDMA 分布式模块 │
│ • 设备间互访检测 │ │ • 内存注册(lkey/rkey)│
│ • 启用/禁用P2P │ │ • RDMA Read/Write │
└────────────────────┘ └─────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 统计监控层 │
│ • 传输次数 / 总流量 / 带宽计算 │
│ • P2P / RDMA / 零拷贝 分类统计 │
│ • 状态打印 + 统计重置 │
└────────────────────────
提供一个完整、成熟、可直接集成的 GPU 异步零拷贝数据传输库,实现了:
- GPU / 主机内存高效管理(内存池)
- 异步 H2D/D2H/D2D/P2P/RDMA 传输
- 多 GPU P2P 支持
- RDMA 分布式传输框架
- 完整统计与状态查询
同时提供了一个完整、正式、可直接对外使用的 GPU 零拷贝异步传输库接口,实现:
GPU 内存管理 + 多 GPU P2P + RDMA 分布式传输 + 异步 DMA + 带宽统计
可作为高性能计算 / AI 分布式系统 / GPU 存储加速的底层核心组件。