<?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>源码阅读 on Hellokitty&#39;s Blog</title>
    <link>https://yangyang233333.github.io/tags/%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB/</link>
    <description>Recent content in 源码阅读 on Hellokitty&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Wed, 26 Aug 2026 13:50:00 +0800</lastBuildDate>
    <atom:link href="https://yangyang233333.github.io/tags/%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>NVIDIA Dynamo 源码阅读（二）：分布式运行时如何组织服务与请求</title>
      <link>https://yangyang233333.github.io/posts/nvidia-dynamo-runtime-source-reading/</link>
      <pubDate>Wed, 26 Aug 2026 13:50:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/nvidia-dynamo-runtime-source-reading/</guid>
      <description>深入 lib/runtime，分析 Namespace、Component、Endpoint、服务发现和网络流水线如何组成 Dynamo 的请求平面。</description>
    </item>
    <item>
      <title>NVIDIA Dynamo 源码阅读（三）：KV-aware Router 如何选择 Worker</title>
      <link>https://yangyang233333.github.io/posts/nvidia-dynamo-kv-aware-router-source-reading/</link>
      <pubDate>Wed, 26 Aug 2026 13:50:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/nvidia-dynamo-kv-aware-router-source-reading/</guid>
      <description>从 token 分块哈希、KV 事件、Radix Tree、负载估计和选择策略出发，拆解 Dynamo KV-aware Router。</description>
    </item>
    <item>
      <title>NVIDIA Dynamo 源码阅读（四）：Prefill/Decode 分离与 KV 传输</title>
      <link>https://yangyang233333.github.io/posts/nvidia-dynamo-disaggregated-serving-source-reading/</link>
      <pubDate>Wed, 26 Aug 2026 13:50:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/nvidia-dynamo-disaggregated-serving-source-reading/</guid>
      <description>分析 Dynamo 如何进行两阶段路由、交换传输元数据，并让 KV Cache 在 Prefill 与 Decode Worker 之间直接移动。</description>
    </item>
    <item>
      <title>NVIDIA Dynamo 源码阅读（一）：数据中心级推理栈的整体架构</title>
      <link>https://yangyang233333.github.io/posts/nvidia-dynamo-architecture-overview/</link>
      <pubDate>Wed, 26 Aug 2026 13:50:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/nvidia-dynamo-architecture-overview/</guid>
      <description>从请求路径、控制面、数据面和后端边界出发，理解 NVIDIA Dynamo 为什么是推理引擎之上的分布式编排层。</description>
    </item>
    <item>
      <title>Mini-SGLang 源码阅读（五）：模型层、Tensor Parallel 与自定义 Kernel</title>
      <link>https://yangyang233333.github.io/posts/mini-sglang-source-reading-tensor-parallel/</link>
      <pubDate>Tue, 25 Aug 2026 21:10:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mini-sglang-source-reading-tensor-parallel/</guid>
      <description>从张量并行的矩阵切分原理出发，分析 Mini-SGLang 的并行 Linear、Embedding、模型注册、权重加载和底层 Kernel。</description>
    </item>
    <item>
      <title>Mini-SGLang 源码阅读（四）：Engine、Attention Backend 与 CUDA Graph</title>
      <link>https://yangyang233333.github.io/posts/mini-sglang-source-reading-engine/</link>
      <pubDate>Tue, 25 Aug 2026 21:00:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mini-sglang-source-reading-engine/</guid>
      <description>从 GPU 推理的 kernel 启动开销和 Prefill/Decode 差异出发，分析 Mini-SGLang Engine 的完整执行路径。</description>
    </item>
    <item>
      <title>Mini-SGLang 源码阅读（三）：Paged KV Cache 与 Radix Prefix Cache</title>
      <link>https://yangyang233333.github.io/posts/mini-sglang-source-reading-kv-cache/</link>
      <pubDate>Tue, 25 Aug 2026 20:50:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mini-sglang-source-reading-kv-cache/</guid>
      <description>从自回归推理的 KV Cache 成本出发，分析 Mini-SGLang 的物理页池、请求页表、前缀匹配与缓存驱逐。</description>
    </item>
    <item>
      <title>Mini-SGLang 源码阅读（二）：Scheduler、Continuous Batching 与 Chunked Prefill</title>
      <link>https://yangyang233333.github.io/posts/mini-sglang-source-reading-scheduler/</link>
      <pubDate>Tue, 25 Aug 2026 20:40:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mini-sglang-source-reading-scheduler/</guid>
      <description>先解释在线推理调度的资源约束，再分析 Mini-SGLang 如何组织 Prefill、Decode 和 CPU/GPU 重叠执行。</description>
    </item>
    <item>
      <title>Mini-SGLang 源码阅读（一）：一次 LLM 请求如何穿过推理引擎</title>
      <link>https://yangyang233333.github.io/posts/mini-sglang-source-reading-request-lifecycle/</link>
      <pubDate>Tue, 25 Aug 2026 20:30:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mini-sglang-source-reading-request-lifecycle/</guid>
      <description>从 Prefill、Decode、Continuous Batching 和多进程流水线出发，梳理 Mini-SGLang 一次请求的完整执行流程。</description>
    </item>
    <item>
      <title>Mooncake Store 源码阅读（四）：Master 持久化、快照与热备恢复</title>
      <link>https://yangyang233333.github.io/posts/mooncake-store-source-reading-master-ha/</link>
      <pubDate>Mon, 24 Aug 2026 10:40:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mooncake-store-source-reading-master-ha/</guid>
      <description>解读 Mooncake Store Master 的 oplog、snapshot、standby 和租约机制，以及它们如何保护控制面状态。</description>
    </item>
    <item>
      <title>Mooncake Store 源码阅读（三）：Get、副本选择与淘汰回收</title>
      <link>https://yangyang233333.github.io/posts/mooncake-store-source-reading-get-eviction/</link>
      <pubDate>Mon, 24 Aug 2026 10:30:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mooncake-store-source-reading-get-eviction/</guid>
      <description>从 GetReplicaList、Replica 状态和批量 Eviction 分析 Mooncake Store 的读取与空间回收。</description>
    </item>
    <item>
      <title>Mooncake Store 源码阅读（二）：Put 写入链路与对象原子性</title>
      <link>https://yangyang233333.github.io/posts/mooncake-store-source-reading-put-path/</link>
      <pubDate>Mon, 24 Aug 2026 10:20:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mooncake-store-source-reading-put-path/</guid>
      <description>沿 RealClient、PutStart、Transfer Engine 和 PutEnd 阅读 Mooncake Store 的完整写入链路。</description>
    </item>
    <item>
      <title>Mooncake Store 源码阅读（一）：从对象存储接口到控制面与数据面</title>
      <link>https://yangyang233333.github.io/posts/mooncake-store-source-reading-architecture/</link>
      <pubDate>Mon, 24 Aug 2026 10:10:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mooncake-store-source-reading-architecture/</guid>
      <description>从源码目录、进程角色和一次请求的路径入手，解释 Mooncake Store 如何把元数据控制与大对象传输分离。</description>
    </item>
    <item>
      <title>Mooncake Transfer Engine 源码阅读（四）：TENT 下一代架构如何重构传输引擎</title>
      <link>https://yangyang233333.github.io/posts/mooncake-transfer-engine-source-reading-tent/</link>
      <pubDate>Fri, 21 Aug 2026 11:18:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mooncake-transfer-engine-source-reading-tent/</guid>
      <description>&lt;p&gt;Mooncake 仓库同时存在经典 Transfer Engine 和 &lt;strong&gt;TENT（Transfer Engine Next）&lt;/strong&gt;。TENT 不是简单增加一种 Transport，而是重构了 Segment 生命周期、运行时调度、拓扑选择、QoS、故障转移和插件体系。&lt;/p&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;Mooncake commit: 777cc7782417b6e554cf7c2d53210d0d8f89f5cc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;一为什么需要下一代引擎&#34;&gt;一、为什么需要下一代引擎&lt;/h2&gt;
&lt;p&gt;经典 TE 已经支持 RDMA、TCP、NVLink 和多种硬件，但随着后端增加，&lt;code&gt;TransferEngineImpl + MultiTransport + 各 Transport&lt;/code&gt; 容易出现几个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Segment 生命周期分散在元数据和后端注册逻辑中；&lt;/li&gt;
&lt;li&gt;传输选择主要依赖静态协议与局部规则；&lt;/li&gt;
&lt;li&gt;多 rail、拥塞、故障和 QoS 难以统一调度；&lt;/li&gt;
&lt;li&gt;不同后端各自维护进度线程和资源模型；&lt;/li&gt;
&lt;li&gt;新硬件接入需要理解大量经典内部约定；&lt;/li&gt;
&lt;li&gt;请求取消、deadline 和 failover 缺少统一运行时。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;TENT 将这些能力上移到 Runtime 层。&lt;/p&gt;
&lt;h2 id=&#34;二目录结构&#34;&gt;二、目录结构&lt;/h2&gt;
&lt;p&gt;TENT 核心位于：&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;tent/src/runtime/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── transfer_engine_impl.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── segment.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── segment_manager.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── segment_registry.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── segment_tracker.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── transport_loader.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── transport_selector.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── progress_worker.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── admission_queue.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── qos_contract.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── receiver_credit.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── topology.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── control_plane.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;└── proxy_manager.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;外围包括：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mooncake Transfer Engine 源码阅读（三）：RDMA、TCP 与请求完成状态机</title>
      <link>https://yangyang233333.github.io/posts/mooncake-transfer-engine-source-reading-rdma-tcp/</link>
      <pubDate>Fri, 21 Aug 2026 11:17:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mooncake-transfer-engine-source-reading-rdma-tcp/</guid>
      <description>&lt;p&gt;Transfer Engine 的公共 API 很统一，但 RDMA 和 TCP 的实现差异很大。RDMA 需要 MR、QP、WR 和 CQ；TCP 需要连接、lane、消息 framing 和接收端主动拷贝。本文沿源码比较两条路径，并分析 Batch 状态如何完成。&lt;/p&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;Mooncake commit: 777cc7782417b6e554cf7c2d53210d0d8f89f5cc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;一transport-抽象&#34;&gt;一、Transport 抽象&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Transport&lt;/code&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;install / uninstall
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;registerLocalMemory / unregisterLocalMemory
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;submitTransfer
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;getTransferStatus
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;allocateBatchID / freeBatchID
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;它还定义 &lt;code&gt;TransferRequest&lt;/code&gt;、&lt;code&gt;TransferStatus&lt;/code&gt; 和内部 &lt;code&gt;BufferEntry&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;公共抽象要求每个后端回答三个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;本地内存如何准备为可传输状态；&lt;/li&gt;
&lt;li&gt;请求怎样排队和执行；&lt;/li&gt;
&lt;li&gt;如何查询每个 task 的最终状态和字节数。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;具体连接模型不属于公共 API。&lt;/p&gt;
&lt;h2 id=&#34;二rdma-初始化&#34;&gt;二、RDMA 初始化&lt;/h2&gt;
&lt;p&gt;RDMA 后端主要位于：&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;rdma_transport.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rdma_context.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rdma_endpoint.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;endpoint_store.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;worker_pool.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;枚举 RDMA devices / ports / GID
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -&amp;gt; 创建每张 HCA 的 context
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -&amp;gt; 建立 PD、CQ 等资源
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -&amp;gt; 启动 worker / poller
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -&amp;gt; 发布 NIC endpoint metadata
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -&amp;gt; 准备 endpoint store
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mooncake 支持多 HCA、多端口和 GPU 内存，因此一个逻辑请求可能被切到多个 rail 上并行发送。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mooncake Transfer Engine 源码阅读（二）：Segment、内存注册与元数据服务</title>
      <link>https://yangyang233333.github.io/posts/mooncake-transfer-engine-source-reading-segment-metadata/</link>
      <pubDate>Fri, 21 Aug 2026 11:16:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mooncake-transfer-engine-source-reading-segment-metadata/</guid>
      <description>&lt;p&gt;Mooncake Transfer Engine 的核心抽象不是“远端指针”，而是 &lt;strong&gt;Segment + BufferDesc + Metadata&lt;/strong&gt;。应用注册本地内存后，TE 将地址范围、设备位置和传输协议发布为 Segment 描述，其他节点才能定位并建立连接。&lt;/p&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;Mooncake commit: 777cc7782417b6e554cf7c2d53210d0d8f89f5cc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;一为什么不能直接发送指针&#34;&gt;一、为什么不能直接发送指针&lt;/h2&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;0x7f12...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在另一个进程中通常没有意义。即使两台机器都使用相同数值，它们也不指向同一块物理内存。&lt;/p&gt;
&lt;p&gt;高性能传输还需要额外信息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这是 CPU DRAM 还是 GPU VRAM；&lt;/li&gt;
&lt;li&gt;对应哪张 GPU；&lt;/li&gt;
&lt;li&gt;是否注册成 RDMA MR；&lt;/li&gt;
&lt;li&gt;rkey 和网卡 endpoint 是什么；&lt;/li&gt;
&lt;li&gt;是否能用 NVLink、GPU IPC 或 CXL；&lt;/li&gt;
&lt;li&gt;节点当前是否存活；&lt;/li&gt;
&lt;li&gt;地址区间是否已经注销。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此 TE 把地址空间包装成 Segment，并通过元数据服务交换描述。&lt;/p&gt;
&lt;h2 id=&#34;二segmentdesc&#34;&gt;二、&lt;code&gt;SegmentDesc&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;TransferMetadata::SegmentDesc&lt;/code&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;Segment ID
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Segment 名称
&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;本机 RPC / endpoint 信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BufferDesc 列表
&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可以把一个 Segment 理解成某个 TE 实例公开的可传输地址空间：&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;Segment: decode-node-7
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── Buffer A: CPU metadata pool, protocol=rdma
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── Buffer B: GPU KV pool, protocol=rdma
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;└── Buffer C: GPU KV pool, protocol=hip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同一块 GPU buffer 可以被多个后端注册，从而同时支持：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mooncake Transfer Engine 源码阅读（一）：统一传输 API 与整体架构</title>
      <link>https://yangyang233333.github.io/posts/mooncake-transfer-engine-source-reading-architecture/</link>
      <pubDate>Fri, 21 Aug 2026 11:15:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/mooncake-transfer-engine-source-reading-architecture/</guid>
      <description>&lt;p&gt;Mooncake Transfer Engine（简称 TE）是 Mooncake 数据平面的基础组件。它不负责决定 KV Cache 应该放在哪里，而是提供统一接口，把一段本地内存搬到远端 Segment，或者从远端 Segment 读取到本地内存。&lt;/p&gt;
&lt;p&gt;本文基于 Mooncake 官方仓库：&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;commit: 777cc7782417b6e554cf7c2d53210d0d8f89f5cc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;commit date: 2026-08-21
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当前仓库同时保留经典 Transfer Engine 和下一代 TENT。前三篇先阅读经典实现，第四篇再分析 TENT 如何重构控制面、调度和传输后端。&lt;/p&gt;
&lt;h2 id=&#34;一源码布局&#34;&gt;一、源码布局&lt;/h2&gt;
&lt;p&gt;核心目录为 &lt;code&gt;mooncake-transfer-engine/&lt;/code&gt;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;路径&lt;/th&gt;
					&lt;th&gt;作用&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;include/transfer_engine.h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;对外 C++ API&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;include/transfer_engine_impl.h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;经典实现内部接口&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;include/transport/transport.h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Transport 抽象、请求和状态&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;include/transfer_metadata.h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Segment、Buffer 与元数据接口&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;src/transfer_engine.cpp&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;公共 API 转发层，同时兼容经典 TE 与 TENT&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;src/transfer_engine_impl.cpp&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;初始化、内存注册、Segment 与批次管理&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;src/multi_transport.cpp&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;安装和选择具体 Transport&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;src/transport/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;RDMA、TCP、NVLink、NVMe-oF、EFA 等后端&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;tent/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Transfer Engine Next 实现&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;TE 的经典架构可以概括为：&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;应用 / Mooncake Store
&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;TransferEngine
&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;TransferEngineImpl
&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;Metadata  MultiTransport  Batch 生命周期
&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;   ▼      ▼       ▼       ▼
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  RDMA   TCP    NVLink   NVMe-oF ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;二公共-api-是一层门面&#34;&gt;二、公共 API 是一层门面&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;TransferEngine&lt;/code&gt; 类本身很薄，大多数函数转发给 &lt;code&gt;TransferEngineImpl&lt;/code&gt;：&lt;/p&gt;</description>
    </item>
    <item>
      <title>nvidia-fs 源码阅读（三）：文件 I/O、批处理、完成路径与诊断</title>
      <link>https://yangyang233333.github.io/posts/nvidia-fs-source-code-reading-io/</link>
      <pubDate>Fri, 21 Aug 2026 10:47:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/nvidia-fs-source-code-reading-io/</guid>
      <description>&lt;p&gt;前两篇分别介绍了 &lt;code&gt;nvidia-fs&lt;/code&gt; 的模块结构，以及 GPU virtual address 到 peer DMA address 的映射。本文沿一次 &lt;code&gt;cuFileRead&lt;/code&gt; 对应的内核路径，分析文件 I/O 如何提交、完成和清理，并介绍 batch、稀疏文件、RDMA 与 &lt;code&gt;/proc&lt;/code&gt; 诊断接口。&lt;/p&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;commit: 328d1d8cce1175c013720985c30e123e9a35242c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GDS_VERSION: 2.29.4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;一io-入口&#34;&gt;一、I/O 入口&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;nvfs_ioctl()&lt;/code&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;NVFS_IOCTL_READ
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NVFS_IOCTL_WRITE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NVFS_IOCTL_BATCH_IO
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;nvfs_io_init(op, ioargs)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -&amp;gt; 验证并构造 nvfs_io
&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;nvfs_io_start_op(nvfsio)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -&amp;gt; 向目标文件提交真正 I/O
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;分成两步的意义在于：参数验证、对象引用和资源分配都应在进入异步 I/O 前完成。一旦请求提交，完成回调可能很快发生，初始化不完整会造成竞态。&lt;/p&gt;
&lt;h2 id=&#34;二nvfs_io_init-做了什么&#34;&gt;二、&lt;code&gt;nvfs_io_init&lt;/code&gt; 做了什么&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;nvfs_io_init()&lt;/code&gt; 是用户参数到内核 I/O 对象的转换层，主要工作包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;根据文件描述符取得目标 &lt;code&gt;struct file&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;检查读写权限；&lt;/li&gt;
&lt;li&gt;查找已经注册的 GPU buffer/mgroup；&lt;/li&gt;
&lt;li&gt;验证 GPU buffer offset、文件 offset 和长度；&lt;/li&gt;
&lt;li&gt;建立影子 page 对应的 iov 或迭代器；&lt;/li&gt;
&lt;li&gt;初始化 &lt;code&gt;kiocb&lt;/code&gt;、完成函数和统计字段；&lt;/li&gt;
&lt;li&gt;为同步、异步和特殊文件系统路径设置标志。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;源码还会检查文件系统类型、direct I/O 条件和文件权限。写操作比读操作更复杂，因为它可能涉及文件扩展、页缓存一致性及磁盘空间预分配。&lt;/p&gt;</description>
    </item>
    <item>
      <title>nvidia-fs 源码阅读（二）：GPU 内存注册、影子页与 DMA 映射</title>
      <link>https://yangyang233333.github.io/posts/nvidia-fs-source-code-reading-memory-dma/</link>
      <pubDate>Fri, 21 Aug 2026 10:46:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/nvidia-fs-source-code-reading-memory-dma/</guid>
      <description>&lt;p&gt;上一篇从 &lt;code&gt;nvfs_init()&lt;/code&gt;、字符设备和 ioctl 看到了 &lt;code&gt;nvidia-fs&lt;/code&gt; 的外部形态。本文进入 GDS direct path 的核心：怎样把用户分配的 GPU virtual address 变成存储设备能够 DMA 的地址，同时又让 Linux 文件 I/O 栈能够携带它。&lt;/p&gt;
&lt;p&gt;阅读版本仍为 NVIDIA &lt;code&gt;gds-nvidia-fs&lt;/code&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;commit: 328d1d8cce1175c013720985c30e123e9a35242c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GDS_VERSION: 2.29.4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;一问题本质&#34;&gt;一、问题本质&lt;/h2&gt;
&lt;p&gt;普通块 I/O 最终围绕 &lt;code&gt;bio_vec&lt;/code&gt;、&lt;code&gt;struct page&lt;/code&gt;、scatterlist 和 DMA mapping 展开。但 &lt;code&gt;cudaMalloc&lt;/code&gt; 得到的是 GPU 虚拟地址，对 Linux 页缓存和块层来说，它并不是普通 CPU 内存页。&lt;/p&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;GPU virtual address
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -&amp;gt; NVIDIA P2P page table 中的 GPU physical pages
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -&amp;gt; Linux I/O 栈可携带的影子 struct page
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  -&amp;gt; 某个存储 PCIe 设备可使用的 DMA address
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;三个地址空间不能混为一谈：&lt;/p&gt;</description>
    </item>
    <item>
      <title>nvidia-fs 源码阅读（一）：模块初始化、设备接口与整体架构</title>
      <link>https://yangyang233333.github.io/posts/nvidia-fs-source-code-reading-architecture/</link>
      <pubDate>Fri, 21 Aug 2026 10:45:00 +0800</pubDate>
      <guid>https://yangyang233333.github.io/posts/nvidia-fs-source-code-reading-architecture/</guid>
      <description>&lt;p&gt;&lt;code&gt;nvidia-fs&lt;/code&gt; 是 NVIDIA GPUDirect Storage（GDS）的 Linux 内核模块。它不是一种文件系统，而是连接 &lt;code&gt;libcufile&lt;/code&gt;、NVIDIA GPU 驱动、Linux 文件 I/O 和支持 GPUDirect 的存储驱动的一层内核协调组件。&lt;/p&gt;
&lt;p&gt;这组文章阅读 NVIDIA 官方 &lt;code&gt;gds-nvidia-fs&lt;/code&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;commit: 328d1d8cce1175c013720985c30e123e9a35242c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GDS_VERSION: 2.29.4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;commit date: 2026-06-01
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;系列分为三篇：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;模块初始化、设备接口与整体架构；&lt;/li&gt;
&lt;li&gt;GPU 内存注册、页表与 DMA 映射；&lt;/li&gt;
&lt;li&gt;文件 I/O、批量请求、完成路径与可观测性。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;本文先回答一个问题：加载 &lt;code&gt;nvidia_fs.ko&lt;/code&gt; 后，内核里究竟多了什么？&lt;/p&gt;
&lt;h2 id=&#34;一源码目录&#34;&gt;一、源码目录&lt;/h2&gt;
&lt;p&gt;核心代码都位于 &lt;code&gt;src/&lt;/code&gt;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;文件&lt;/th&gt;
					&lt;th&gt;职责&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;nvfs-core.c/.h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;字符设备、ioctl、GPU 内存注册和文件 I/O 主流程&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;nvfs-mod.c&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;与 NVMe、RDMA 等外部模块动态注册 DMA 回调&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;nvfs-mmap.c/.h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;GPU 页对应的影子 &lt;code&gt;struct page&lt;/code&gt; 和 mmap 管理&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;nvfs-dma.c/.h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;block request 到 GPU DMA 地址的映射&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;nvfs-batch.c/.h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;批量 I/O 提交与完成&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;nvfs-rdma.c/.h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;RDMA 注册信息管理&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;nvfs-pci.c/.h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;GPU 与存储设备的 PCIe 拓扑、距离和亲和性&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;nvfs-proc.c&lt;/code&gt;、&lt;code&gt;nvfs-stat.c&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/proc&lt;/code&gt; 配置、统计和诊断接口&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;nvfs-kernel-interface.c&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;不同 Linux 内核版本的兼容封装&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;主线集中在 &lt;code&gt;nvfs-core.c&lt;/code&gt;，但真正的数据直达能力是多个文件共同完成的。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
