protodesc_cold目录
此页面上的所有地址均适用于
libtpu-0.0.40-cp314轮子(build-id89edbbe81c5b328a958fe628a9f2207d)中的libtpu.so。其他版本重新编号该部分并重新散列描述符符号。
摘要
protodesc_cold 是一个 3.2 MiB 只读 ELF 部分 (0xbe8af30–0xc1bf0b0),它保存静态链接到 libtpu.so 的 每个 protobuf 模式的序列化 google.protobuf.FileDescriptorProto blob。每个编译的 .proto 文件只有一个 blob。 protobuf C++ 代码生成器为每个 foo.proto 发出一个 descriptor_table_protodef_<hash> 字节数组(序列化模式,停在冷区)加上一个 descriptor_table_<hash> 注册结构; .init_array 中的 _GLOBAL__sub_I_ 构造函数在进程启动时遍历这些表并调用描述符池构建器,以便反射层稍后可以按名称解析消息类型。此页面是这些 blob 的综合目录:部分事实、每个条目的记录布局以及按源根和域设置的模式的完整分类。
计数准确且以字节为锚定。符号表包含 760 descriptor_table_protodef_* blob 符号和 760 匹配的 descriptor_table_* 注册器符号 - 因此池中有 760 个文件描述符。该部分还包含 769 不同的 .proto 路径字符串;超过 760 的九个字符串是 .proto 名称的集合,这些名称仅出现在某些描述符的 dependency(导入)列表中,即可以传递到达其自己的描述符的导入文件。这是重新实现者重新生成运行时期望的整个反射数据库所需的模式表面:它涵盖了 XLA/HLO 编译器、适用于五个芯片系列的 Deepsea TPU ISA、TPU 运行时拓扑和程序格式、XPlane/xprof 分析器、Megascale 集体、PJRT 分布式协调以及通过传递导入引入的 Google 内部基础设施的长尾。
架构集是逆向工程师对二进制文件意图的索引。在 tpu_compilation_environment.proto 中显示为字段的标志是编译器实现的标志; tpu_sequencer_program.proto 中的 entry_point oneof ARM 命名了运行时可以加载的芯片系列; megascale_info.proto 中的 TransferType 枚举值命名运行时可以路由的集合。因此,该目录与 Tpu编译环境 和 tpu_telemetry.proto 页面一起查阅,这些页面完整地重建了各个高价值模式。
这是一个附录参考页:它合并了计数和代表名称,而不是重建消息图。有关节在 ELF 布局中的位置和注册机制,请参阅 定制型材,它拥有节标题。
| 部分 | protodesc_cold — ELF 节头 [12],类型 PROGBITS,标志 A(分配,只读) |
| VA 范围 | 0xbe8af30 → 0xc1bf0b0 |
| 尺寸 | 0x334180 = 3,359,104 字节 (3.20 MiB) |
| 对齐 | 16字节 |
| 条目计数 | 760 文件描述符(每个 .proto 一个 descriptor_table_protodef_*) |
不同的 .proto 字符串 | 769(760 个自己的名称 + 9 个仅导入路径) |
| 第一个斑点 | descriptor_table_protodef_zzRDQFgX_23 @ 0xbe8af80 — pjrt_tpu_topo_desc_name_mapping.proto |
| 注册 | descriptor_table_* 结构在 static-init 处由 .init_array 中的 _GLOBAL__sub_I_ ctor 遍历 |
| 配套部分 | linkarr_upb_AllExts(37个upb扩展注册器),pb_defaults(功能默认实例) |
| 信心 | CERTAIN(部分+计数字节锚定到符号表) |
注意 — 节标题大小为
0x334180 = 3,359,104 bytes,即 3.20 MiB (3359104 / 1024 / 1024)。本页和定制型材都使用3.20 MiB的数字。
条目/记录布局
protodesc_cold 不是**一个自描述容器 - 它没有标题,没有计数,也没有每个条目的索引。它是独立字节数组的平面串联,每个数组都是序列化的 FileDescriptorProto。该结构完全存在于符号表和 .init_array 寄存器中,而不是存在于节字节中。
条目如何到达
.init_array
└─ _GLOBAL__sub_I_<tu>.cc ── one per translation unit
└─ AddDescriptors(&descriptor_table_<hash>) ── protobuf runtime call
descriptor_table_<hash> { ── in .data.rel.ro
once_flag, ── std::once init guard
size, ── byte length of the blob
const char* protodef ───────────────┐ ── points INTO protodesc_cold
const DescriptorTable** deps, ... │
} │
protodesc_cold: │
[ descriptor_table_protodef_<hash> ] <──────────┘ serialized FileDescriptorProto
```text
每个 blob 都是标准长度分隔的 protobuf 消息。因为每个 `FileDescriptorProto` 都以字段 1(`name`、`string`)开头,所以几乎每个 blob 中的第一件事就是原型自己的路径(`.proto` 文件名),这就是扫描该部分以查找 `.proto` 后缀字符串会直接恢复目录的原因。同一 blob 中的后续字符串是 `package`、`dependency` 导入路径、消息和字段名称以及 `syntax` 标记(`"proto2"`、`"proto3"` 或缺席/`"editions"`)。
### 记录布局表
| 元件 | 哪里 | 含义 |
|---|---|---|
| Blob 字节 | `protodesc_cold` | 序列化 `FileDescriptorProto`(无框架) |
| `descriptor_table_protodef_<hash>` | 符号 → blob 开始 VA | 字节数组; `<hash>` 是一个 8–11 字符的 base62 标签 |
| 斑点长度 | `descriptor_table_<hash>.size` 字段 | 字节计数;未存储在该部分中 |
| `descriptor_table_<hash>` | `.data.rel.ro` | 注册器结构(一次标志、大小、ptr、deps) |
| `_GLOBAL__sub_I_*` | `.text.startup` / `.init_array` | 为 TU 调用 `AddDescriptors` |
| `name`(字段 1) | blob 中的第一个字符串 | `.proto` 路径 — 目录键 |
| `package`(字段 2) | blob 中的第二个字符串 | 点状封装;驱动 C++ 命名空间 |
| `dependency`(字段 3,重复) Blob 中的 | 字符串 | 导入路径 — 9 个额外 `.proto` 字符串的来源 |
> **注意 —** `descriptor_table_protodef_<hash>` 中的 `<hash>` 是内容派生的,而不是源路径。对于给定的 `.proto` 内容 + protobuf 版本来说它是稳定的,但 **不** 对人类有意义;要将 blob 映射到其文件,您需要读取 blob 的字段 1,而不是符号名称。第一个 blob 的符号 `..._zzRDQFgX_23` 解析为 `learning/45eac/research/pjrt/pjrt_tpu_topo_desc_name_mapping.proto`。
>
> **明白了 —** 计算该部分中的 `.proto` 字符串会超出仅导入路径的数量(769 与 760)。权威条目计数为`descriptor_table_protodef_*`符号的数量(760个),每个符号都是一个*文件*;仅显示为另一个文件的 `dependency` 的路径在该部分中有一个字符串,但此处没有自己的 blob。从符号表驱动计数,而不是字符串扫描。
### 语法方言
池故意混合了三种原始方言 - 每个 `FileDescriptorProto` 都带有自己的 `syntax` 字段,因此构建器可以容忍这种混合。较新的 TPU 运行时添加(芯片部件拓扑、内存预留、定序器程序、持久编译缓存)使用**版本**; `xla`、`megascale`和PJRT使用**proto3**; Deepsea ISA 原型仍保留在 **proto2** 上。划分大致均匀(约 285 个 proto2 / 约 278 个 proto3 / 约 197 个版本),并且是每个子系统的模式最后一次被触及的时间的指纹。
---
## 目录(按源根)
每个 `.proto` 路径都以 Google 源代码树根开头。按第一个路径段对 760 个条目进行分组,给出编译到二进制文件中的内容的粗略映射。计数超过该部分中的 769 个不同路径字符串(其中包括仅导入路径);占主导地位的三个根约占池的 77%。
| 源根 | 文件 | 域名 |
|---|---:|---|
| `platforms/` | 306 | deepsea TPU ISA(5 个芯片系列)、驱动程序/分析器、XLA jellyfish 编译器 + Megascale |
| `third_party/` | 240 | TensorFlow、TF2XLA、XLA/HLO、xprof、gRPC、protobuf、ortools |
| `learning/45eac/` | 41 | PJRT + tfrt TPU运行时、拓扑、编译缓存 |
| `util/` | 29 | Operations_research(CP-SAT、MathOpt),任务/时间实用程序 |
| `security/` | 28 | LOAS L2 内部身份验证、IAM 凭证、ALTS 策略 |
| `perftools/` | 19 | xprof 加速器分析器转换/服务 |
| `google/` | 19 | protobuf 知名类型 + `api/expr` (CEL) |
| `monitoring/` | 18 | Streamz 时间序列(采集/查询/聚合) |
| `production/` | 11 | 验尸官碰撞分析注释 |
| `net/` | 10 | gRPC 核心类型、DNS、拥塞控制 |
| `file/` | 5 | 文件/基本选项,blob 类型 |
| `webutil/` | 4 | HTTP 内容类型(135 值 MIME 枚举) |
| `stats/` | 4 | Streamz 统计注释 |
| `storage/` | 3 | datapol语义注释 |
| `tech/` | 3 | 巨型文件 blob 类型 |
| `wireless/`、`privacy/`、`identity/`、`logs/`、`cloud/`、`src/`、`research/`、`hardware/`、 `frameworks/`、`borg/`、`n2a/` | ≤2 个 | 传递导入尾部 |
> **QUIRK —** `platforms/` 胜过 `third_party/`,尽管 TensorFlow/XLA 是“头条”框架,因为五个 Deepsea 芯片系列中的每一个都附带一个“并行”ISA 原型树(TensorCore + SparseCore + BarnaCore + DMA + 内存子系统)。描述符池的大部分是芯片 ISA 模式,而不是框架模式。
---
## 域目录
源根视图比较粗糙;域视图是重新实现者实际导航的内容。这 760 个条目分为以下功能组。每组计数是字节锚定的(与部分的路径字符串匹配);代表性文件名是逐字的。
### TPU 深海 ISA — 每芯片系列架构
最大的单个域。五个芯片代号各自在 `platforms/asic_sw/lib/deepsea/<codename>/.../isa/` 下携带一个并行原型树,在 `platforms/asic_sw/driver/deepsea/<codename>/` 下携带驱动程序/配置树。 ISA 原型序列化每个核心编译的程序 AST(TensorCore、SparseCore SCS/TAC/TEC、BarnaCore)。
| 芯片目录 | ISA 树文件 | 代表 `.proto` |
|---|---:|---|
| `deepsea/vxc/`(毒蛇鱼) | 37 | `tensorcore_vector_extended.proto`,`sparsecore_tec_vector_alu.proto` |
| `deepsea/pxc/`(河豚) | 37 | `tensorcore_vector_extended_0.proto`,`sparsecore_scs.proto` |
| `deepsea/gxc/glc/`(幽灵) | 35 | `tensorcore_vector_extended.proto`,`sparsecore_dma_program.proto` |
| `deepsea/gxc/gfc/` (6acc60406) | 34 | `sparsecore_tec_vector_alu.proto`,`tensorcore_scalar_alu.proto` |
| `deepsea/jellyfish/` | 23 | `tensorcore_isa.proto`、`barnacore_isa.proto`、`payload.proto` |
| `deepsea/jxc/` | 22 | `chip_config.proto`、`coredump.proto`、`link_stack.proto` |
共享资源枚举 `architectural_resource_ids.proto`(`asic_sw.deepsea.ResourceId`,232 个值)命名定序器可以分配的每个硬件资源(VMEM 存储体、同步标志、IAR 插槽、DMA 通道、ICI 端口);它是编译器资源分配过程的支柱。每个芯片的 `common_encodings.proto` 定义 64 值操作数源枚举(`VectorSource`、`ScalarY`、`CbregMetadata`、`SparsecoreVmask`)。
### TPU 运行时 — 拓扑、程序格式、编译缓存
`learning/45eac/tpu/runtime/` 和 `tensorflow/core/tpu/`。这些是描述物理 TPU 和核心执行的二进制文件的版本方言模式。
| 架构 | 角色 |
|---|---|
| `tpu_chip_parts.proto` | `TpuChipPartsProto` — 每芯片内核/共享内存/DMA 拓扑 |
| `tpu_chip_parts_locators.proto` | `TpuCoreOnChipProto`、`TpuSyncFlagRangeOnChipProto` 定位器类型 |
| `tpu_core_parts.proto`、`tpu_memory_parts.proto`、`tpu_sequencer_parts.proto`、`tpu_shared_memory_parts.proto` | 每个子系统部分描述符 |
| `tpu_core_program.proto` | `TpuCoreProgramProto` — `oneof core {TensorCore, BarnaCore, SparseCore}` |
| `tpu_sequencer_program.proto` | `TpuSequencerProgramProto` — `oneof entry_point` 超过 16 个每芯片程序变体 |
| `tpu_memory_reservation.proto` | `TpuMemoryReservationTypeProto`(51 个值)— 程序描述符槽映射 |
| `tpu_compilation_cache*.proto` | 缓存条目/组/公共;持久缓存 |
| `tpu_chip_enums.proto`、`tpu_version.proto`、`tpu_platform_type.proto` | 芯片/版本/平台枚举 |
| `tpu_executable.proto`、`tpu_executable_info.proto`、`compile_metadata.proto`、`topology.proto` | 可执行文件+编译元数据 |
> **注意 —** `tpu_sequencer_program.proto` 中的 `entry_point` 精确枚举了 `{jellyfish, pufferfish, viperfish, ghostlite, 6acc60406}` 及其每核心子程序(SCS = SparseCore Sequencer、TAC = Tile Access Core、TEC = Tile Execute Core)。这是运行时可以加载的芯片系列的权威列表,并由上面的每芯片 ISA 树证实。
### XLA / HLO编译器
133 个文件跨越 `third_party/tensorflow/compiler/xla/` 和 `platforms/xla/`。标题架构:
| 架构 | 注释 |
|---|---|
| `tpu_compilation_environment.proto` | `TpuCompilationEnvironment` — 主标志消息(池中最大的 blob);参见 [配置页面](../config/tpu-compilation-environment.md) |
| `xla.proto` | HLO 配置:精度、调试选项、转储标志 |
| `xla_data.proto` | `PrimitiveType`(35 个值)、分片、`ShapeProto`、操作元数据 |
| `service/hlo.proto` | `HloInstructionProto`,`HloModuleProto`,日程/别名/捐助者 |
| `jellyfish/proto/llo_opcode.proto` | `LloOpcodeProto` 枚举(462 个值)— 内部 LLO IR 操作码 |
| `jellyfish/metadata/llo_proto_opcode.proto` | `Opcode` 枚举(461 个值) — 序列化 LLO 元数据形式 |
| `jellyfish/lowering/backend_configs.proto` | 每操作降低配置(barna-core、sparse-core、ICI、megacore) |
| `backends/gpu/runtime/thunk.proto` | 49 GPU `Thunk` 消息 — 存在,因为 xla/gpu 共享 `xla.gpu` 命名空间 |
`xla.DebugOptions` 消息(在 [自己的页面](../config/debugoptions-proto.md) 上重建)位于此域中。注意 `debug_options.proto` 在该部分中作为不同的路径字符串出现。
### Profiler — XPlane + 每芯片 trace_entries
54 个文件位于 `third_party/tensorflow/core/profiler/`、`third_party/xprof/` 和 `perftools/accelerators/xprof/` 下,另有每芯片 trace schema 位于 deepsea driver tree 下。
| 架构 | 角色 |
|---|---|
| `xplane.proto` | `XSpace → XPlane → XLine → XEvent → XStat` 层次结构 |
| `op_stats.proto`、`op_metrics.proto`、`steps_db.proto`、`kernel_stats.proto` | 聚合配置文件视图 |
| `trace_events.proto`,`trace_events_raw.proto` | 跟踪查看器事件流 |
| `profiler/trace_entries.proto` (×5) | 每芯片硬件跟踪点目录(gfc、glc、vfc、vlc、pxc/common) |
| `xprof_service.proto` | `XprofService`(6 个 RPC) |
| `topology.proto`、`dcn_collective_info.proto`、`power_metrics.proto` | 硬件/拓扑/功率遥测 |
五个 `trace_entries.proto` 携带每芯片 `TracePointId` 枚举(ghostlite 最多约 135 个值),用于对内存控制器、ICI/DCN、OCI 描述符和油门/电源事件进行编目。 `tpu_telemetry.proto` 运行时状态快照在 [分析页面](../profiling/tpu-telemetry-proto.md) 上重建。
### Megascale — 跨切片集体运行时
`platforms/xla/megascale/` 树下正好有 15 个文件(大部分在 `runtime/` 下,`megascale_info.proto`/`runtime.proto` 在 `common/` 下,`addresses.proto`/`dcn_topology.proto` 在`third_party/.../xla/megascale/`镜子)。 ICI/DCN之上的完整控制平面。
| 架构 | 角色 |
|---|---|
| `transport.proto` | `MegaScaleTransport`(6 个 RPC:发送、GetMultiSliceTopology、Barrier、ReportError、TriggerError、SendHeartBeat) |
| `debug_service.proto` | `MegascaleDebugService`(6 个 RPC,包括 `SetImpairments`) |
| `megascale_info.proto` | `MegaScaleInfoProto` — `TransferType` (ALL_TO_ALL, REDUCE_SCATTER, ALL_GATHER, ALL_REDUCE, BROADCAST, RAGGED_ALL_TO_ALL, …) + fp 压缩 + 参差不齐的参数 |
| `megascale_status.proto` | `MegaScaleRuntimeError` 与 `ErrorType` / `UnrecoverableErrorType` |
| `dcn_topology.proto` | `DCNTopology` oneof(SymmetricTree 与显式 TreeNode)用于多切片环/树缩减 |
| `rapideye_logging.proto` | 设备上始终开启的日志缓冲区(事后挂起分析) |
| `actions.proto`、`host_command.proto`、`host_command_scheduler.proto`、`impairments.proto`、`addresses.proto`、`core_location.proto`、`runtime.proto`、`runtime_config.proto`、 `debug_logging.proto` | 操作队列、主机协议、故障注入、寻址 |
### PJRT — 插件 C-API + 分布式协调
16 个文件,涵盖 `learning/45eac/research/pjrt/` 和 `third_party/tensorflow/compiler/xla/pjrt/`。
| 架构 | 角色 |
|---|---|
| `coordination_service.proto` | `CoordinationService`(14个RPC:注册/心跳/屏障/KV存储/监视任务) |
| `compile_options.proto` | `PJRT_CompileOptions` 有线格式(带有序列化的 `TpuCompilationEnvironment`) |
| `tpu_executable.proto`,`tpu_pjrt_topology_description.proto` | TPU特定的PjRt可执行文件+拓扑 |
| `pjrt_tpu_topo_desc_name_mapping.proto` | 该部分中的第一个 blob (`@0xbe8af80`) |
| `distributed/protocol.proto`,`stream_executor_executable.proto` | 分布式协议+SE可执行文件 |
| `pjrt_partial_program.proto`、`pjrt_abi_version.proto`、`pjrt_value_type.proto`、`pjrt_device_dimensions.proto`、`execute_options.proto`、`executable_metadata.proto`、`topology_description.proto` | C-API ABI + 值/选项接线类型 |
> **注意 —** 池中有**两个** `CoordinationService` 定义 — 公共 gRPC 表面(`xla/pjrt`,14 个 RPC)和一个较低级别的状态机(`tsl/protobuf`,19 个 RPC)。重叠是故意的;两者都提供寄存器/心跳/屏障/KV存储,但 tsl 是 xla 包装的实现。
### TensorFlow / TF2XLA 基础
84 个 TF/TF2 图和已保存模型架构文件(`config.proto`、`rewriter_config.proto`、`saved_object_graph.proto`、`meta_graph.proto`、`journal.proto`)以及 TF→XLA 桥(`tf2xla.proto`、 `xla_argument.proto`、`host_compute_metadata.proto`、`xla_activity.proto`)。这些之所以存在,是因为 PJRT 插件链接了 TF2XLA 旧桥和 tf.data 服务复制。
### 运筹学(或工具)
`util/operations_research/`下有28个文件。 CP-SAT + MathOpt 求解器模式:`sat_parameters.proto`(数百个 CP-SAT 调谐旋钮)、`cp_model.proto`、`math_opt/{rpc,model,model_update,model_parameters,callback}.proto`(`SolveService`、3 个 RPC)以及七个求解器适配器文件(glpk、gscip、gurobi、highs、mosek、osqp、随心)。之所以被引入,是因为 XLA 的自动分片成本模型使用 MIP 求解。
### 基础设施尾部
| 集团 | 文件 | 代表 `.proto` |
|---|---:|---|
| 安全(LOAS L2、IAM、ALTS) | 28 | `principal.proto`、`authenticator.proto`、`end_user_credentials.proto` |
| 监控(Streamz) | 18 | `service.proto`、`query.proto`、`aggregation.proto`(3 个服务) |
| gRPC 核心 | 9 | `channelz/v1` + `v2/service.proto`、`reflection/v1`、`latent_see.proto` |
| 碰撞分析(验尸官) | 10 | `field_id.proto`(124值字段ID)、`crash_reason.proto`、`asan_error_type.proto` |
| Protobuf 知名类型 | 10 | `any.proto`、`duration.proto`、`timestamp.proto`、`struct.proto`、`wrappers.proto`、`field_mask.proto`、`empty.proto`、`type.proto`、 `source_context.proto`、`java_features.proto` |
| CEL(通用表达语言) | 5 | `google/api/expr/*`(语法/检查/值/评估/解释) |
| MLIR /稳定HLO | 9 | TF-Lite转换器(`model_flags`、`converter_flags`)+ PTQ + `compiler_trace.proto` |
| 文件/存储 | 8 | `file/base/options.proto`、`tech/file/proto/types.proto`、`semantic_annotations.proto`(166 值语义类型) |
> **注意 —** CEL 模式 (`google/api/expr`) 的存在是因为某些编译环境开关表达式是 CEL 计算的。基础设施尾部(安全、监控、崩溃分析、文件/存储)不是 TPU 特定的;它是由框架和运行时库的传递导入拖入的,并且在 PJRT 插件路径中大部分是惰性的。
---
## gRPC 服务清单
该池定义了 184 个 RPC 中的 27 个 gRPC 服务。最大的表面是设备上的调试/控制平面,而不是公共 API。上面每个域表中的完整列表;杰出人物:
| 服务 | RPC | 文件 |
|---|---:|---|
| `DebuggerService` | 33 | `platforms/deepsea/jellyfish/xdb/debugger.proto` |
| `SliceBuilderWorkerService` | 18 | `platforms/accel_ssw/deepsea/slice_builder/slice_builder.proto` |
| `CoordinationService` (tsl) | 19 | `xla/tsl/protobuf/coordination_service.proto` |
| `CoordinationService` (pjrt) | 14 | `xla/pjrt/distributed/coordination/coordination_service.proto` |
| `TpuDebugService` | 8 | `xdb/tpu_debugger/tpu_debugger.proto` |
| `VBARControl` | 8 | `learning/45eac/tfrc/tpunetd/proto/vbar_control.proto` |
| `MegaScaleTransport` / `MegascaleDebugService` | 6 / 6 | `megascale/runtime/...` |
| `XprofService` | 6 | `perftools/accelerators/xprof/xprof_service.proto` |
| `SessionControl` / `NetworkConfig` / `NetworkBuild` | 7 / 3 / 3 | `superpod/routing/tpunetd/proto/tpunetd.proto` |
> **QUIRK —** 最大的服务面是事后 TPU 调试器(`DebuggerService`,33 个 RPC),而不是任何编译或执行 API。模式池是由运行时中的调试/可观察性工具和编译器本身决定的。
---
## 架构枚举亮点
池中的几个枚举足够大,可以成为子系统的主干,从描述符 blob 读取:
| 值 | 枚举 | 文件 |
|---:|---|---|
| 462 | `xla.jellyfish.LloOpcodeProto` | `jellyfish/proto/llo_opcode.proto` |
| 461 | `xla.jellyfish.Opcode` | `jellyfish/metadata/llo_proto_opcode.proto` |
| 232 | `asic_sw.deepsea.ResourceId` | `deepsea/common/architectural_resource_ids.proto` |
| 166 | `SemanticType` | `storage/datapol/.../semantic_annotations.proto` |
| ~135 | `TraceEntries.TracePointId`(每个芯片) | 每个 `trace_entries.proto` |
| 135 | `ContentType` | `webutil/http/content-type.proto` |
| 124 | `FieldID` | `crash_analysis/reporting/ipc/field_id.proto` |
| 67 | `DataType` | `tensorflow/core/framework/types.proto` |
| 53 | `xla.gpu.ThunkKindProto` | `backends/gpu/runtime/thunk_kind.proto` |
| 51 | `TpuMemoryReservationTypeProto` | `tpu/runtime/topology/tpu_memory_reservation.proto` |
| 35 | `xla.PrimitiveType` | `xla_data.proto` |
两个 LLO 操作码枚举(462 / 461 值)枚举 LLO 抽象级别的完整深海 ISA — [LLO操作码表](llo-opcode-table.md) 中记录的相同操作码域。 `ResourceId` (232) 是资源分配主干; `TpuMemoryReservationTypeProto`(51)是PJRT读取的程序描述符槽字典。
---
## 验证
- **节事实**根据ELF节标题`[12]`和IDA段记录进行确认:`protodesc_cold`开始`0xbe8af30`,结束`0xc1bf0b0`,`size = 3,359,104 (0x334180)`,标志`A`。
- **条目计数 760** 确认了三种方式:760 个不同的 `descriptor_table_protodef_*` blob 符号、760 个匹配的 `descriptor_table_*` 注册商符号以及该部分中的 769 个不同的 `.proto` 路径字符串(760 个自己的 + 9 个仅导入)。
- **第一个条目**已确认:`descriptor_table_protodef_zzRDQFgX_23` @ `0xbe8af80` → `learning/45eac/research/pjrt/pjrt_tpu_topo_desc_name_mapping.proto`。
- **每根/每域计数** 通过扫描该部分的路径字符串得出;芯片系列 ISA 目录、15 个 Megascale 文件、16 个 PJRT 文件和 5 个 `trace_entries.proto` 均针对二进制文件进行了枚举。
- **注册机制**锚定到 `_ZL37descriptor_table_protodef_*` 损坏的符号和配套的 `linkarr_upb_AllExts` / `pb_defaults` 部分,两者都记录在 [定制型材](../forensics/custom-sections.md) 中。
---
## 交叉引用
- [定制型材](../forensics/custom-sections.md) — 拥有 `protodesc_cold` 节标题和 `linkarr_upb_AllExts` / `pb_defaults` 同伴
- [静态初始表面](../forensics/static-init.md) — 调用 `AddDescriptors` 来构建池的 `.init_array` 构造函数
- [尾随 zstd Blob](../forensics/trailing-zstd-blob.md) — 同级取证目录;该池中的 `records_metadata.proto` 证实了里格利假设
- [二进制布局参考](binary-layout.md) — 此部分所在的完整 ELF 部分地图
- [filewrapper_toc 目录](filewrapper-toc-catalog.md) — 兄弟附录;嵌入式运行时资源表(二进制配置、引导加载程序)
- [重构原始索引](reconstructed-proto-index.md) — 从这些 blob 完全重建的模式索引
- [LLO 操作码表](llo-opcode-table.md) — 此处编目的 462/461 值操作码枚举,已重建
- [Tpu编译环境](../config/tpu-compilation-environment.md) — 池中最大的单一模式,逐字段重建
- [xla.DebugOptions 原型](../config/debugoptions-proto.md) — 来自 xla 域的重构的 HLO 配置模式
- [tpu_telemetry.proto](../profiling/tpu-telemetry-proto.md) — 来自分析器/调试域的重构 TPU 运行时状态模式