<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>GIDS on Hellokitty&#39;s Blog</title>
    <link>https://yangyang233333.github.io/tags/gids/</link>
    <description>Recent content in GIDS on Hellokitty&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Thu, 20 Aug 2026 14:05:00 +0800</lastBuildDate>
    <atom:link href="https://yangyang233333.github.io/tags/gids/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>GDS、GIDS 与 uGDS 有什么区别：从数据直达、GPU 发起到用户态 NVMe</title>
      <link>https://yangyang233333.github.io/posts/gds-gids-ugds-comparison/</link>
      <pubDate>Thu, 20 Aug 2026 14:05:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/gds-gids-ugds-comparison/</guid>
      <description>&lt;p&gt;GDS、GIDS 和 uGDS 的名字非常接近，也都在讨论 GPU 与存储之间的数据通路，因此很容易被理解成同一项技术的三个版本。&lt;/p&gt;
&lt;p&gt;实际上，它们解决的是三个不同层面的问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GDS&lt;/strong&gt; 关注数据路径：怎样让存储数据不经 CPU 内存中转，直接进入 GPU 显存；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GIDS&lt;/strong&gt; 关注控制路径：怎样让 GPU Kernel 自己决定并发起存储请求，减少 GPU 与 CPU 往返；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;uGDS&lt;/strong&gt; 关注软件栈：怎样让 CPU 在用户态直接管理 NVMe 队列，绕过内核 NVMe 驱动与文件系统。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以先用一句话概括：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;GDS 是“数据直达 GPU”，GIDS 是“GPU 主动要数据”，uGDS 是“用户态 CPU 直接驱动 NVMe 把数据送到 GPU”。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本文从请求由谁发起、数据经过哪里、NVMe 命令由谁构造、是否保留文件系统语义等维度，分析三者的区别与联系。更深入的原理可以继续阅读本系列的三篇文章：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://yangyang233333.github.io/posts/nvidia-gpudirect-storage-gds/&#34;&gt;NVIDIA GPUDirect Storage（GDS）详解：让存储数据绕过 CPU 直达 GPU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://yangyang233333.github.io/posts/nvidia-gpu-initiated-data-storage-gids/&#34;&gt;NVIDIA GPU-Initiated Data Storage（GIDS）详解：让 GPU Kernel 主动访问存储&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://yangyang233333.github.io/posts/ugds-userspace-gpu-direct-storage/&#34;&gt;uGDS 原理解析：在用户态打通 NVMe SSD 与 GPU 显存&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一先区分数据路径与控制路径&#34;&gt;一、先区分数据路径与控制路径&lt;/h2&gt;
&lt;p&gt;理解这三项技术的关键，是不要把“数据经过哪里”和“谁发起 I/O”混为一谈。&lt;/p&gt;
&lt;h3 id=&#34;数据路径&#34;&gt;数据路径&lt;/h3&gt;
&lt;p&gt;数据路径描述有效载荷如何移动。例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;传统路径：SSD → CPU 内存 → GPU 显存
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;直接路径：SSD ──────────→ GPU 显存
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;GDS、GIDS 和 uGDS 都希望建立 SSD 与 GPU 显存之间的 DMA 路径，减少 CPU bounce buffer。但“数据不经过 CPU 内存”并不代表“CPU 没有参与”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>NVIDIA GPU-Initiated Data Storage（GIDS）详解：让 GPU Kernel 主动访问存储</title>
      <link>https://yangyang233333.github.io/posts/nvidia-gpu-initiated-data-storage-gids/</link>
      <pubDate>Wed, 19 Aug 2026 14:05:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/nvidia-gpu-initiated-data-storage-gids/</guid>
      <description>&lt;p&gt;GPUDirect Storage（GDS）已经能够让存储数据绕过 CPU 内存，直接进入 GPU 显存。但经典 GDS 仍有一个重要特征：I/O 请求由 CPU 侧应用代码提交。&lt;/p&gt;
&lt;p&gt;当 GPU kernel 在执行过程中才知道下一份数据位于哪里时，控制权必须在 GPU 与 CPU 之间往返。对于图计算、向量检索、稀疏模型和超大规模数据分析，这种细粒度同步可能比数据传输本身更昂贵。&lt;/p&gt;
&lt;p&gt;NVIDIA GPU-Initiated Data Storage，简称 &lt;strong&gt;GIDS&lt;/strong&gt;，试图进一步消除这层控制瓶颈：让 GPU kernel 直接发起存储 I/O，使 GPU 不仅是数据的接收者，也是 I/O 请求的生产者。&lt;/p&gt;
&lt;p&gt;本文介绍 GIDS 的动机、架构、工作流程、适用场景，以及它和 GDS 的本质区别。&lt;/p&gt;
&lt;h2 id=&#34;一为什么有了-gds-还需要-gids&#34;&gt;一、为什么有了 GDS 还需要 GIDS&lt;/h2&gt;
&lt;p&gt;GDS 优化了数据路径：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CPU 发起请求
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     │
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     ▼
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;存储 ─────────────► GPU 显存
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       数据不经过 CPU 内存
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这已经消除了大量主机内存中转，但控制路径仍然经过 CPU。经典流程可能是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;GPU 执行 kernel；&lt;/li&gt;
&lt;li&gt;GPU 产生下一批要访问的数据索引；&lt;/li&gt;
&lt;li&gt;kernel 结束或与 CPU 同步；&lt;/li&gt;
&lt;li&gt;CPU 读取结果并构造文件 I/O；&lt;/li&gt;
&lt;li&gt;CPU 调用 cuFile；&lt;/li&gt;
&lt;li&gt;数据进入 GPU；&lt;/li&gt;
&lt;li&gt;CPU 再次启动 kernel。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果每次请求都是大块、批量且可提前预测，这种方式通常没有问题。但如果 GPU 在计算过程中产生数以万计甚至更多的动态访问，频繁的 GPU—CPU 往返会带来：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
