<?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>Metadata on Hellokitty&#39;s Blog</title>
    <link>https://yangyang233333.github.io/tags/metadata/</link>
    <description>Recent content in Metadata on Hellokitty&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Fri, 21 Aug 2026 11:16:00 +0800</lastBuildDate>
    <atom:link href="https://yangyang233333.github.io/tags/metadata/index.xml" rel="self" type="application/rss+xml" />
    <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>
  </channel>
</rss>
