Skip to content

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 字节的记录,包含三个 重定位/标量字段 — namedatasize — 加上 16 字节内容 指纹用于缓存键控。没有每条目压缩标志: 编解码器由文件名后缀暗示(.binarypb = 原始序列化 protobuf, .br = Brotli,.compressed = CompressedToroidalRouteCache 包装器, .txtpb/.txt/.tmpl = 文本和一个 TZif zoneinfo blob)。该部分本身 是 WA(可写、已分配),在磁盘上读取为全零 — 它有 61 个指针 在加载时通过 R_X86_64_RELATIVE 重定位实现,每个 描述符的 namedata 字段。

注意 — libtpu 携带 两个 独立的嵌入式二进制系统 很容易混淆。本页记录了 MemFile / embed:// 注册表filewrapper_toc 索引(61 个条目,~5.5 MiB)。它不是(anonymous namespace)::filewrapper_* 的更大池 ToroidalRouteCache 中的符号 .lrodata (~60 MB) 通过符号直接引用。其中十个路由缓存也是 通过本目录以短基本名称重新注册(条目 27-29、53-59); 其余的从未出现在这里。

重新实现,合约为:

  • 节布局: filewrapper_tocentry_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 重定位,每个插槽一个:

text
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 -> 0x189a3f0size = 403fingerprint = 9454b768359f7edd1f156f3c40827bc8。读取 namesize 从二进制文件返回的 准确地再现了编目值。

明白了 — 描述符没有以 40 字节跨度打包 .data.rel.ro。连续描述符由任何链接器间隔 选择 (例如,在条目 5-16 处运行的引导加载程序是 0x50 分开的,而不是 0x28)。的 40 字节数字是记录大小 — 加载器读取的跨度 描述符 — 不是数组间距。没有要跨越的描述符数组 结束;唯一的数组是filewrapper_toc中的指针表。到达每个 描述符通过其 TOC 指针,而不是在前一个描述符上加 40。

按后缀选择编解码器

该结构体不携带压缩类型字段,因此加载程序推断编解码器 文件扩展名为 。观察到的后缀→编解码图:

后缀编解码器解码器
.binarypb原始序列化 protobuf,逐字存储直接ParseFromArray
.br原始 Brotli 流(无容器魔法)捆绑 Brotli 运行时
.compressedCompressedToroidalRouteCache 包装原型 (format + data)Decompress(CompressedToroidalRouteCache) @ sub_20B63320
.txtpb / .txt / .tmplASCII / 文本原型 / 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 中的 包括:

text
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 — 6acc60406tpu7x 一代。这是唯一代号 运送真实的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.compressed8x8x16_twisted.binarypb.compressed8x16x16_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上将data Cord包装在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。
  • 重建原始索引 — 兄弟附录;解码这些 .binarypb blob 的消息类型。
  • 尾随 zstd Blob其他大型嵌入式有效负载(25.8 MB,位于节表后面);与此处记录的 MemFile 注册表不同。
  • 取证概述 — 二进制文件的部分/段映射和两个嵌入式系统的区别。