filewrapper_toc 目录
此页面上的所有地址适用于 libtpu-0.0.40-cp314 轮中的 libtpu.so(build-id
89edbbe81c5b328a958fe628a9f2207d)。其他版本会有所不同。
摘要
libtpu.so 嵌入一组独立的运行时资源文件 — 拓扑 表、每芯片固件引导加载程序、精度 LUT、CSR/错误目录、 和预先计算的 ICI 路由缓存 - 并通过进程内访问它们 embed:// 虚拟文件系统而不是主机文件系统。目录 该文件系统的 是一个命名的 ELF 部分,filewrapper_toc,其中 保存指向固定大小文件描述符的指针的平面数组。本附录 详尽地编录了该部分:其位置、描述符记录格式、 以及所有 61 个嵌入资源的完整枚举表(包含名称、内容) 类型、字节大小和数据地址。
该机制类似于最小的内存中 tar/cpio 索引 内容寻址重复数据删除。每个描述符都是一个 40 字节的记录,包含三个 重定位/标量字段 — name、data、size — 加上 16 字节内容 指纹用于缓存键控。没有每条目压缩标志: 编解码器由文件名后缀暗示(.binarypb = 原始序列化 protobuf, .br = Brotli,.compressed = CompressedToroidalRouteCache 包装器, .txtpb/.txt/.tmpl = 文本和一个 TZif zoneinfo blob)。该部分本身 是 WA(可写、已分配),在磁盘上读取为全零 — 它有 61 个指针 在加载时通过 R_X86_64_RELATIVE 重定位实现,每个 描述符的 name 和 data 字段。
注意 — libtpu 携带 两个 独立的嵌入式二进制系统 很容易混淆。本页记录了 MemFile /
embed://注册表 由filewrapper_toc索引(61 个条目,~5.5 MiB)。它不是(anonymous namespace)::filewrapper_*的更大池ToroidalRouteCache中的符号.lrodata(~60 MB) 通过符号直接引用。其中十个路由缓存也是 通过本目录以短基本名称重新注册(条目 27-29、53-59); 其余的从未出现在这里。
重新实现,合约为:
- 节布局:
filewrapper_toc是entry_count× 8 字节指针,每个指针由R_X86_64_RELATIVE重定位填充,每个指针指向.data.rel.ro中的 40 字节描述符。 - 描述符记录:
{ const char* name; const char* data; uint64_t size; uint8_t fingerprint[16]; },40字节,name/data自己搬迁。 - 按后缀编解码规则: 该结构体没有编解码器字段;加载程序从文件扩展名中选择解压缩器。
embed://URI 绑定: 每个资源都可以作为embed://<memfile_name>/<filename>访问,由<name>_memfile_embed_internal_create()初始值设定项注册。
| 部分 | filewrapper_toc — ELF 节索引 38,标志 WA |
| VA 部分/文件偏移 | 0x224bf798 / 0x220bf798 |
| 截面尺寸 | 0x1e8 = 488 字节 |
| 条目计数 | 61 (488 / 8),由 61 个 R_X86_64_RELATIVE 重新定位确认 |
| 指针数组步长 | 8字节(每个条目一个指针) |
| 描述符记录大小 | 40 字节 (0x28) |
| 描述符位置 | .data.rel.ro(VA 0x215f81a0,文件 0x213f81a0,Δ 0x200000) |
| 名称字符串 | .rodata (VA 0x84a0000),合并的 NUL 终止池 |
| 数据 blob | .lrodata (VA 0x1884a00) 和 .rodata |
| 嵌入的总有效负载 | 5,767,739 字节 (~5.50 MiB),51 个不同的文件名 |
| 注册锚点 | _ZL7toc_ptr @ 0x224bf918; *_memfile_embed_internal_create()套装 |
节布局和记录格式
指针数组
filewrapper_toc 是一个可写部分,只包含 61 个元素的数组 64位指针 。在磁盘上每个字节都是零;指针由 动态加载器从 R_X86_64_RELATIVE 重定位,每个插槽一个:
filewrapper_toc @ 0x224bf798 (488 B)
slot 0 @ 0x224bf798 --reloc--> desc 0x215fb0b0
slot 1 @ 0x224bf7a0 --reloc--> desc 0x215fc950
slot 2 @ 0x224bf7a8 --reloc--> desc 0x217935a0
...
slot 60 @ 0x224bf978 --reloc--> desc 0x2203ff90
```text
计数已双重确认:`0x1e8 / 8 = 61`,并且恰好有 61 次重定位
目标范围为 `[0x224bf798, 0x224bf798+0x1e8)`。 `_ZL7toc_ptr` 符号位于
`0x224bf918` 位于此部分(插槽 ~48)内,并且是符号
行走 TOC 时的注册函数参考。
> **QUIRK —** `WA` 部分和磁盘上的零表示静态十六进制转储 `WA` 的
> 显示没有任何有用的信息。该目录不存在,直到
> 加载程序应用重定位。任何映射该部分的重新实现
> 并在没有首先解析 `R_X86_64_RELATIVE` 的情况下读取指针将看到 61
> 空指针。
### 描述符记录
每个 TOC 指针都落在 `.data.rel.ro` 中的 40 字节描述符上。布局
通过重定位分析证明:`+0x00`和`+0x08`本身就是
`R_X86_64_RELATIVE` 重新定位(因此它们是*指针*,而不是内联数据),`+0x10`
是原始小端 `uint64`,`+0x18` 是 16 字节的内联哈希。
```c
struct FileWrapperEntry { // .data.rel.ro, 32-byte aligned
const char* name; // +0x00 -> .rodata, NUL-terminated (merged pool)
const char* data; // +0x08 -> .lrodata / .rodata blob
uint64_t size; // +0x10 byte length of data
uint8_t fingerprint[16]; // +0x18 128-bit content hash
}; // sizeof == 0x28 (40 bytes)对于条目 0,0x215fb0b0 处的描述符解析为:name -> 0x8798cc4 ("pjrt_tpu_topo_desc_name_map.txtpb"),data -> 0x189a3f0,size = 403, fingerprint = 9454b768359f7edd1f156f3c40827bc8。读取 name 和 size 从二进制文件返回的 准确地再现了编目值。
明白了 — 描述符没有以 40 字节跨度打包
.data.rel.ro。连续描述符由任何链接器间隔 选择 (例如,在条目 5-16 处运行的引导加载程序是 0x50 分开的,而不是 0x28)。的 40 字节数字是记录大小 — 加载器读取的跨度 描述符 — 不是数组间距。没有要跨越的描述符数组 结束;唯一的数组是filewrapper_toc中的指针表。到达每个 描述符通过其 TOC 指针,而不是在前一个描述符上加 40。
按后缀选择编解码器
该结构体不携带压缩类型字段,因此加载程序推断编解码器 文件扩展名为 。观察到的后缀→编解码图:
| 后缀 | 编解码器 | 解码器 |
|---|---|---|
.binarypb | 原始序列化 protobuf,逐字存储 | 直接ParseFromArray |
.br | 原始 Brotli 流(无容器魔法) | 捆绑 Brotli 运行时 |
.compressed | CompressedToroidalRouteCache 包装原型 (format + data) | Decompress(CompressedToroidalRouteCache) @ sub_20B63320 |
.txtpb / .txt / .tmpl | ASCII / 文本原型 / HTML-JS 模板 | 文本,无解码 |
America/Los_Angeles(无后缀) | IANA TZif 区域信息 | tz 解析器 |
.br blob 开始时没有可识别的魔法(条目 25 开始于 55 8b 5b…) 因为它们是裸露的 Brotli,而不是框架容器。 .compressed 斑点 以 format 的 protobuf 标签开头(08 02 ⇒ 字段 1 = 2 ⇒ Brotli 有效负载) 或当 format 为 默认值 — 请参阅下面的路由缓存部分。
embed:// URI 绑定
每个资源都发布到进程内 MemFile 命名空间中 embed://<memfile_name>/<filename>。 memfile名称是注册的 组,描述符的文件名name。逐字 URI 前缀已恢复 name 中的 包括:
embed://tpu_chip_parts/ (e.g. .../6acc60406_tensornode_chip_parts.binarypb)
embed://tpu_chip_config/ (chip_configs lookups)
embed://current_tpu_runtime_abi_memfile/current_tpu_runtime_abi.binarypb
embed://deepsea_compiler_hash_memfile/deepsea_compiler_hash.txt
embed://accuracy_table_ (per-codename accuracy LUTs)
embed://{vfc,gfc,glc,vlc}_architectural_resources_memfile/architectural_resources.binarypb
embed://{vfc,gfc,glc,vlc}_pf_csrs_memfile/<chip>_pf_csrs.br
embed://{vfc,gfc,glc,vlc}_error_collector_error_sources_brotli_memfile/<chip>_error_collector_error_sources.br
```text
注册由无效家庭执行
`<name>_memfile_embed_internal_create()` 功能(例如
`tpu_chip_parts_memfile_embed_internal_create()` @ `sub_20B37240`),驱动自
`_GLOBAL__sub_I_*_memfile_embed_internal_builtin.cc` 静态初始化器,加上
用于 `pf` 的四个 `*_pf_register_memfile_register_translator.cc` 转换器
(“平台固件”)CSR 地图。每个将其描述符指针写入 TOC
通过 `_ZL7toc_ptr`。
> **QUIRK —** `embed://tpu_chip_parts/<codename>` 路径是在运行时构建的
> 通过将前缀与文件名文字连接起来;完整路径永远不是
> `.rodata` 中的单字符串。全九 `<codename>_chip_parts.binarypb`
> 文件名*确实*以 `.rodata` 文字形式存在(水母、河豚、
> pufferfish_lite, viperfish, viperfish_lite, Ghostlite, 龙鱼,
> 6acc60406,加上 6acc60406 张量节点变体),但仅限
> **6acc60406tensornode**chip_parts实际上是嵌入的(条目48)。的
> 其他八个是在此版本中没有支持 blob 的查找键 — 较旧
> 芯片由chip_configs 条目 (39–47) 来描述。
---
## 完整目录
所有 61 个条目,通过遍历 TOC 直接从二进制文件中恢复
指针,解析每个描述符的`name`/`data`重定位,并读取
`size`。 `data VA` 是资源 blob 的地址(在 `.lrodata` 或
`.rodata`)。编解码器列应用上面的后缀→编解码器规则。每一行都是
从实时二进制文件中读回;目录逐字节匹配部分,
因此整个表格是 `CERTAIN` 除非单元格是内容的解释
(这些人对细节部分的信心较低)。
| # | 数据VA | 尺寸 | 编解码器 | 内容(原型/类型) | 名称 |
|----|--------------|----------:|--------|------------------------------------------------|------|
| 0 | `0x189a3f0` | 403 | 文字 | PJRT 拓扑名称映射(文本原型) | `pjrt_tpu_topo_desc_name_map.txtpb` |
| 1 | `0x189a590` | 94,037 | 原料 | 平台/拓扑配置(9代) | `tpu_platform_configs.binarypb` |
| 2 | `0x1c8df30` | 412 | 原料 | 水母BarnaCore常量参数 | `barna_core_constant_param_jfc.binarypb` |
| 3 | `0x344d280` | 1,124 | 文字 | LLO-IR HTML 可视化工具页脚(JS 模板) | `llo_ir_footer.tmpl` |
| 4 | `0x3451120` | 171 | 原料 | SparseCore 嵌入循环内核注册表 | `embeddings_loop_configs_legacy.binarypb` |
| 5 | `0x3fad570` | 12,480 | 原料 | TpuCoreProgramProto(TC引导加载程序) | `continuation_bootloader_program_tensorcore_dragonfish_default.binarypb` |
| 6 | `0x3fb0640` | 12,480 | 原料 | TpuCoreProgramProto(TC引导加载程序) | `continuation_bootloader_program_tensorcore_jellyfish_default.binarypb` |
| 7 | `0x3fb3710` | 14,016 | 原料 | TpuCoreProgramProto(TC引导加载程序) | `continuation_bootloader_program_tensorcore_pufferfish_default.binarypb` |
| 8 | `0x3fb6de0` | 13,512 | 原料 | TpuCoreProgramProto(TC引导加载程序) | `continuation_bootloader_program_tensorcore_pufferfish_lite_default.binarypb` |
| 9 | `0x3fba2b0` | 26,828 | 原料 | TpuCoreProgramProto(TC引导加载程序) | `continuation_bootloader_program_tensorcore_viperfish_lite_default.binarypb` |
| 10 | `0x3fc0b80` | 40,648 | 原料 | TpuCoreProgramProto(TC引导加载程序) | `continuation_bootloader_program_tensorcore_viperfish_inference.binarypb` |
| 11 | `0x3ff21a0` | 64,730 | 原料 | TpuCoreProgramProto(TC,megachip tccontrol) | `continuation_bootloader_program_tensorcore_smoothie_viperfish_megachip_tccontrol.binarypb` |
| 12 | `0x4021420` | 1,718 | 原料 | TpuCoreProgramProto(SC引导加载程序) | `continuation_bootloader_program_sparsecore_viperfish_inference.binarypb` |
| 13 | `0x4024400` | 34,504 | 原料 | TpuCoreProgramProto(TC引导加载程序) | `continuation_bootloader_program_tensorcore_ghostlite_inference.binarypb` |
| 14 | `0x4045f50` | 1,718 | 原料 | TpuCoreProgramProto(SC引导加载程序) | `continuation_bootloader_program_sparsecore_ghostlite_inference.binarypb` |
| 15 | `0x40481b0` | 41,178 | 原料 | TpuCoreProgramProto(TC,megachip tccontrol) | `continuation_bootloader_program_tensorcore_6acc60406_megachip_tccontrol.binarypb` |
| 16 | `0x4066430` | 1,672 | 原料 | TpuCoreProgramProto(SC,megachip tccontrol) | `continuation_bootloader_program_sparsecore_6acc60406_megachip_tccontrol.binarypb` |
| 17 | `0x4067890` | 1,334 | 原料 | 运行时ABI表(abi版本158) | `current_tpu_runtime_abi.binarypb` |
| 18 | `0xb430db0` | 32 | 文字 | 编译器构建哈希(32个十六进制字符) | `deepsea_compiler_hash.txt` |
| 19 | `0x40703d0` | 181,284 | 原料 | 精度/超越表 | `accuracy_table_dragonfish.binarypb` |
| 20 | `0x409c800` | 180,617 | 原料 | 精度/超越表 | `accuracy_table_ghostlite.binarypb` |
| 21 | `0x40c8990` | 181,284 | 原料 | 精度/超越表 | `accuracy_table_jellyfish.binarypb` |
| 22 | `0x40f4dc0` | 181,284 | 原料 | 精度/超越表 | `accuracy_table_pufferfish.binarypb` |
| 23 | `0x41211f0` | 181,139 | 原料 | 精度/超越表 | `accuracy_table_viperfish.binarypb` |
| 24 | `0x44cd160` | 13,489 | 原料 | arch 资源 ID 表 (vfc / viperfish-fc) | `architectural_resources.binarypb` |
| 25 | `0x44d0620` | 8,136 | 布罗特利 | 每芯片CSR图(vfc) | `vfc_pf_csrs.br` |
| 26 | `0x44d25f0` | 177,789 | 布罗特利 | 错误源目录 (vfc) | `vfc_error_collector_error_sources.br` |
| 27 | `0x44ff0d0` | 171,623 | ctrc | 压缩环形路由缓存 8x8x8 | `8x8x8.binarypb.compressed` |
| 28 | `0x50386d0` | 724,766 | ctrc | 压缩环形路由缓存 8x16x16 扭曲 | `8x16x16_twisted.binarypb.compressed` |
| 29 | `0x5336180` | 339,942 | ctrc | 压缩环形路由缓存 8x8x16 扭曲 | `8x8x16_twisted.binarypb.compressed` |
| 30 | `0x5a21f00` | 253,765 | 布罗特利 | 错误源目录(gfc / 6acc60406) | `gfc_error_collector_error_sources.br` |
| 31 | `0x5a5fe50` | 4,916 | 布罗特利 | 每芯片CSR图(gfc/6acc60406) | `gfc_pf_csrs.br` |
| 32 | `0x5ce8d10` | 5,936 | 原料 | arch资源ID表(gfc / 6acc60406) | `architectural_resources.binarypb` |
| 33 | `0x5e41bf0` | 7,317 | 原料 | arch资源ID表(glc / Ghostlite) | `architectural_resources.binarypb` |
| 34 | `0x5e43890` | 5,485 | 布罗特利 | 每芯片CSR图(glc / Ghostlite) | `glc_pf_csrs.br` |
| 35 | `0x5e44e00` | 115,260 | 布罗特利 | 错误源目录(glc / Ghostlite) | `glc_error_collector_error_sources.br` |
| 36 | `0x5ea8ec0` | 3,043 | 原料 | arch 资源 ID 表 (vlc / viperfish-lite) | `architectural_resources.binarypb` |
| 37 | `0xbd7a320` | 856 | 布罗特利 | 每芯片 CSR 地图(vlc / viperfish-lite) | `vlc_pf_csrs.br` |
| 38 | `0x5ea9ab0` | 28,847 | 布罗特利 | 错误源目录(vlc / viperfish-lite) | `vlc_error_collector_error_sources.br` |
| 39 | `0x5f01460` | 1,309 | 原料 | chip_configs(默认) | `6acc60406_tensornode_chip_configs_default.binarypb` |
| 40 | `0x5f02fa0` | 1,481 | 原料 | chip_configs(推理) | `6acc60406_chip_configs_inference.binarypb` |
| 41 | `0x5f03ff0` | 1,190 | 原料 | chip_configs(旧版) | `6acc60406_tensornode_chip_configs_legacy.binarypb` |
| 42 | `0xbdf0830` | 870 | 原料 | chip_configs(legacy_dense) | `pufferfish_chip_configs_legacy_dense.binarypb` |
| 43 | `0xbdf0ba0` | 985 | 原料 | chip_configs(兆核、glp 仿真) | `viperfish_glp_emulation_chip_configs_megacore.binarypb` |
| 44 | `0xbdf19a0` | 819 | 原料 | chip_configs(megacore_dense) | `pufferfish_chip_configs_megacore_dense.binarypb` |
| 45 | `0xbdf1ce0` | 786 | 原料 | chip_configs(megacore_inference) | `pufferfish_chip_configs_megacore_inference.binarypb` |
| 46 | `0x5f05b70` | 1,458 | 原料 | chip_configs(兆核) | `viperfish_chip_configs_megacore.binarypb` |
| 47 | `0x5f07af0` | 1,174 | 原料 | chip_configs(legacy_sparse_core) | `6acc60406_tensornode_chip_configs_legacy_sparse_core.binarypb` |
| 48 | `0xbdf29a0` | 504 | 原料 | **TpuChipPartsProto(版本 6)** | `6acc60406_tensornode_chip_parts.binarypb` |
| 49 | `0x5f08e80` | 68,780 | 原料 | ICI弹性路由表(故障dim z) | `cache_ici_resiliency_6acc60406_fault_dim_z.binarypb` |
| 50 | `0x5f3c060` | 4,009 | 原料 | ICI弹性路由表(故障dim z) | `cache_ici_resiliency_pufferfish_fault_dim_z.binarypb` |
| 51 | `0x5f3f640` | 34,504 | 原料 | ICI弹性路由表(故障dim z) | `cache_ici_resiliency_viperfish_fault_dim_z.binarypb` |
| 52 | `0xbe62e50` | 134 | 原料 | 扭曲圆环路由缓存 **索引** | `cache_twisted_torus_all.binarypb` |
| 53 | `0x5f59080` | 5,230 | ctrc | 压缩环形路由缓存 8x8x16 扭曲 | `8x8x16_twisted.binarypb.compressed` |
| 54 | `0x6482ae0` | 173,801 | ctrc | 压缩环形路由缓存 8x8x8 | `8x8x8.binarypb.compressed` |
| 55 | `0x67f17c0` | 702,686 | ctrc | 压缩环形路由缓存 8x16x16 扭曲 | `8x16x16_twisted.binarypb.compressed` |
| 56 | `0x68c3bb0` | 367,927 | ctrc | 压缩环形路由缓存 8x8x16 扭曲 | `8x8x16_twisted.binarypb.compressed` |
| 57 | `0x6a92250` | 176,905 | ctrc | 压缩环形路由缓存 8x8x8 | `8x8x8.binarypb.compressed` |
| 58 | `0x783ac00` | 722,765 | ctrc | 压缩环形路由缓存 8x16x16 扭曲 | `8x16x16_twisted.binarypb.compressed` |
| 59 | `0x7bac5b0` | 367,795 | ctrc | 压缩环形路由缓存 8x8x16 扭曲 | `8x8x16_twisted.binarypb.compressed` |
| 60 | `0x845b240` | 2,852 | tzif | IANA 区域信息(太平洋时间,TZif2) | `America/Los_Angeles` |
> **注意 —** 描述符 `+0x18` 处的 16 字节指纹从
> 表(每行一个值,并且在
> 目录级别)。它是从 `.data.rel.ro` 的每个条目读回的,并且是
> 内容哈希 MemFile 层用于重复数据删除/缓存键控;条目 0 是
> `9454b768359f7edd1f156f3c40827bc8`。
---
## 资源组
这 61 个条目属于少数内容系列。下面分组
由 *content* (从 blob 的前导字节/protobuf 结构验证),
不仅仅是名字。数量和尺寸为 `CERTAIN`;的内部语义
每个原型均标记为 `HIGH`/`MEDIUM`。
### 拓扑和平台元数据(条目 0–4、17、18、52、60)
单例元数据文件。 `tpu_platform_configs.binarypb`(条目 1,94 KB)
为主拓扑表;它的字节开始 `0a 74 0a 05 74 70 75 76…` —
字段 1(长度 0x74) 包装字段 1(长度 5)= 字符串 `"tpuv2"`,
确认重复的每代记录。已有九代人在场
(`tpuv2, tpuv3, tpuv4, tpuv4lite, tpuv5, tpuv5e, tpuv5lite, tpuv6e, tpu7x`),
每个都带有命名的网格形状,带有打包的 `[x,y]` 调光和缠绕/扭曲
描述符(生成列表的置信度高,内部形状的置信度中等)
架构)。
`current_tpu_runtime_abi.binarypb`(条目 17)以 ABI 版本 158 领先。
`deepsea_compiler_hash.txt`(条目 18)是 32 个 ASCII 十六进制字符 —
`4c38e01d56f528ed66ff9991fcbf2be3` — 用于缓存的编译器构建标记
键控(逐字回读)。 `pjrt_tpu_topo_desc_name_map.txtpb`(条目 0)是
文本原型名称映射。 `barna_core_constant_param_jfc.binarypb`(条目 2)和
`embeddings_loop_configs_legacy.binarypb`(条目4)是小水母
BarnaCore / SparseCore 内核注册表原型。 `llo_ir_footer.tmpl`(条目 3)
是 LLO-IR 转储可视化工具的 HTML/JS 页脚 — 文本,而不是原型。
`America/Los_Angeles`(条目 60)以 `TZif2` 魔法开始 — IANA
zoneinfo blob 嵌入用于分析器/日志时间戳格式化。
### 连续引导加载程序(条目 5–16)
十二个 `tpu.TpuCoreProgramProto` blob — 每硅 TensorCore (TC) 和
SparseCore (SC) 引导加载程序/恢复程序。覆盖范围:龙鱼、水母、
河豚、河豚_lite、viperfish_lite、viperfish(推理+
`smoothie_viperfish_megachip_tccontrol`), 幻影 (TC + SC), 6acc60406
(TC + SC 巨型芯片)。 SparseCore 变体(条目 12、14、16)约为 1.7 KB
各; TensorCore 程序范围为 12 KB–65 KB。内部 ABI 原型引脚
运行时 ABI 版本 158,匹配条目 17(原型类型高度可信)
和代号,内部字段树上的 MEDIUM)。
### 精度表(条目 19–23)
龙鱼的五个 `accuracy_table_<codename>.binarypb` blob(每个约 181 KB),
鬼石、水母、河豚、毒蛇鱼。几乎相同的尺寸意味着
与每芯片系数值共享模式 — 几乎可以肯定
驱动 bf16/fp8 超越的极小极大/多项式系数表
(exp/log/rsqrt/tanh) 精度仿真(表标识 CERTAIN、系数
解释中)。不存在 `accuracy_table_6acc60406` — 最新的
芯片重用通用路径。
### 架构资源、CSR 地图、错误目录(条目 24–26、30–38)
每芯片系列资源描述符。 `architectural_resources.binarypb`
在不同的 memfile 名称下出现四次(条目 24、32、33、36)
(`vfc_`/`gfc_`/`glc_`/`vlc_architectural_resources_memfile`) — 资源 ID
宇宙 viperfish-fc、6acc60406-gfc、ghostlite-glc、viperfish-lite-vlc。
`*_pf_csrs.br`(条目 25、31、34、37)是 **Brotli 压缩** CSR 映射;
`*_error_collector_error_sources.br`(条目 26、30、35、38)是 Brotli 错误
目录。 `.br` blob 是裸 Brotli 流 — 条目 25 开始 `55 8b 5b…`
没有容器魔法。 `pf` = 平台固件寄存器转换器
(`*_pf_register_memfile_register_translator.cc`)。
> **注意 —** 四个 `architectural_resources.binarypb` 条目共享一个
> 文件名,但是不同数据 VA 和不同大小的“不同斑点”
> (13,489 / 5,936 / 7,317 / 3,043 B)。 `embed://` 命名空间消除歧义
> 它们通过内存文件名前缀,而不是文件名。仅键入密钥的重新实现 基本名称上的
> 会将四个资源冲突为一个。
### chip_configs 和chip_parts(条目 39–48)
九个 `*_chip_configs.binarypb`(条目 39–47)是按代号/按模式
核心+内存布局描述符。没有出现静态 PCI 供应商/设备 ID —
与chip_parts-discovery设计一致——相反,它们枚举内存
区域(32 KiB 切片,~2.97 GiB HBM 窗口)。看到的模式:默认、推理、
传统、legacy_dense、megacore、megacore_dense、megacore_inference、
legacy_sparse_core,glp_emulation_megacore。代号:6acc60406,河豚,
毒蛇鱼。
条目 48、`6acc60406_tensornode_chip_parts.binarypb` (504 B) 是**唯一**
嵌入式 `chip_parts` blob — `TpuChipPartsProto`。它的字节开始 `08 06` =
字段 1 (`version`) varint **6**,确认“通过chip_parts发现”
最新硅设计。解码结构(高置信度 — 通过阅读
protobuf `--decode_raw`):
```text
version 6 ; driver_abi_version 1
cores[0] type=TENSOR_CORE(1) count=1
reg banks id1x32, id2x64, id3x14, id4x16 ; mem 64K/256K/4K/128K ; clock 1900
cores[1] type=SPARSE_CORE(3) count=2
mem 2K/128K/2M ; clock 1750 ; dma_misc {32,4,64,4}
shared_memories type=1 count=1
byte_size 3,187,671,040 (~2.97 GiB HBM) ; clock 7200 ; bw_slot ~3.686e12
dma_requirements host_align=32 device_align=32 granule=32
sync_flag_granule=32 max_single_host_dma=34,359,738,368 (32 GiB)
misc {has_extra_done_bit, host_sync_flag_async, supports_count_dones}QUIRK —
6acc60406是tpu7x一代。这是唯一代号 运送真实的chip_parts blob;八个较旧的代号只有 文件名文字作为embed://tpu_chip_parts/键,并解析为 Chip_configs + 静态表代替。重新实现不得假设 每个代号都有一个chip_parts资源——九个查找中有八个失败 此版本中的 。
路由缓存(条目 27–29、49–51、52、53–59)
预先计算的 all-reduce/ICI 路由表。有以下三个亚类:
- 扭曲圆环索引 —
cache_twisted_torus_all.binarypb(条目 52、134 B)。它的字节以08 01 12 0f 08 04 10 04…开头 —{x,y,z,fault,orientation}元组列表,将拓扑形状映射到其路由缓存文件(形状 4x4x8 … 16x16x32)。这是加载器首先读取的查找表。 - 压缩路由缓存 —
8x8x8.binarypb.compressed、8x8x16_twisted.binarypb.compressed、8x16x16_twisted.binarypb.compressed(条目 27-29 和 53-59,十个 blob)。每个都是CompressedToroidalRouteCache包装器:{ int32 format = 1; bytes data = 15; }。条目 27 开始于08 02(format = 2⇒ Brotli 有效负载);条目 53 开始7a(直接字段 15),因为它省略了默认的format。解压是Decompress(CompressedToroidalRouteCache)@sub_20B63320,它在format == 2上将dataCord包装在Brotli阅读器中,并将结果解析为ToroidalRouteCache。 - ICI 弹性表 —
cache_ici_resiliency_<codename>_fault_dim_z.binarypb(条目 49-51):6acc60406 (68,780 B)、河豚 (4,009 B)、viperfish (34,504 B) 的 ICI 链路故障后备路由表。
明白了 — 每个路由缓存 形状 在目录中出现两次(例如
8x8x8.binarypb.compressed位于条目 27、54、57,尺寸为 171,623 / 173,801 / 176,905 B)。这些是不同的斑点 - 不同的故障计数 相同形状的 实例,以相同的基本名称重新注册。十个 仅.compressed条目就有 3,753,440 B (~3.58 MiB),这是 TOC 有效负载的大部分。作为 和architectural_resources.binarypb,不对基本名称进行重复数据删除:数据 VA 和尺寸不同。
交叉引用
- 定制型材 — 拥有 ELF 节表中
filewrapper_toc节的存在;此页面是其索引内容的目录。 - protodesc_cold目录 — 兄弟附录;此处引用的
CompressedToroidalRouteCache/TpuChipPartsProto/TpuCoreProgramProto模式是该目录中的 FileDescriptorProtos。 - 重建原始索引 — 兄弟附录;解码这些
.binarypbblob 的消息类型。 - 尾随 zstd Blob — 其他大型嵌入式有效负载(25.8 MB,位于节表后面);与此处记录的 MemFile 注册表不同。
- 取证概述 — 二进制文件的部分/段映射和两个嵌入式系统的区别。