跳到主要内容
TileLang 系统教程

tilelang-tutorial.huandu.me

第 26 章 运行时、JIT、ABI 与框架集成

/code/26-runtime-jit-abi/

02-cache-dir-inspect/README.md2018 字节
# 示例 2:读取缓存目录

## 目的

把「缓存目录长什么样」从一句描述变成一次可重复的读取:

* 递归列出 `$TILELANG_CACHE_DIR/<version>/<platform>-<machine>/` 下的
  `kernels/` 与 `.staging/`;
* 对每个 `<sha256>/` 条目复刻 `KernelCache._verify_cache_dir_integrity`
  (`_vendor/tilelang-v0.1.15/tilelang/cache/kernel_cache.py:807-835`)的判定:
  清单里每个文件的**大小**必须一致,被列为必需的文件(adapter 的二进制 + `params.json`)
  还要**内容哈希**一致;
* 列出 `cuda-binaries/` 与 `ascend-binaries/`,并按
  `tilelang/cache/binary_cache.py:125-147` 的规则校验
  `metadata.json` 里的 `size` / `sha256`。

它不 import tilelang,只按源码里写死的路径约定去读磁盘。

## 运行前提

* Python 3.9 以上(只用标准库)。
* 模式一:一个真实的 TileLang 缓存目录(跑过一次 TileLang 程序即可产生)。
* 模式二(`--selftest`):什么都不需要,脚本自己造 fixture。
* **不需要** GPU / NPU / tilelang / torch。

## 运行命令

```bash
cd chapters/26-runtime-jit-abi/code/02-cache-dir-inspect

# 读真实缓存(默认 $TILELANG_CACHE_DIR,未设置则 ~/.tilelang/cache)
python3 inspect_cache_dir.py
python3 inspect_cache_dir.py --cache-dir /tmp/tl-cache

# 不需要真实缓存:造一份 fixture,验证读取逻辑
python3 inspect_cache_dir.py --selftest
```

## 期望输出

`--selftest` 会打印 fixture 树与三条判据:

```text
--- fixture tree ---
namespace: /var/folders/.../tl-cache-fixture-xxxx/0.1.15/darwin-arm64
  kernels/ entries : 3
  .staging/ entries: 1
    aaaaaaaaaaaaaaaa...  ok   lib=kernel_lib.so  files=5
    bbbbbbbbbbbbbbbb...  corrupt (manifest: kernel_lib.so: size mismatch)
    cccccccccccccccc...  incomplete (missing: params.json)
  ascend-binaries/ entries: 1 (device binary cache)
    dddddddddddddddd...  ok (aibin, 208 bytes)
--- selftest ---
ok: reader classifies complete / corrupt / incomplete entries and reads the binary cache
```

## 正确性判据

* 退出码 0;
* 三条判据全部命中:完整条目判为 `ok`、被截断的条目判为 `corrupt`、
  缺 `params.json` 的条目判为 `incomplete`。

## 这个示例**没有**证明什么

fixture 是脚本按源码里读到的路径约定自己造的。所以本示例验证的是**读取逻辑**,
不是「TileLang 真的这样落盘」。后者由 `01-runtime-anchor-check` 的源码锚点 +
`tilelang/cache/kernel_cache.py:552-640` 的阅读共同支撑,属于静态核对。

## 作者实际做到的验证级别

**在本机运行过(2026-10-01)**:`--selftest` 输出上述内容、退出码 0;
默认模式在本机返回退出码 2 并打印「cache directory not found: ~/.tilelang/cache」,
这与「本机没有安装 tilelang、从未产生缓存」一致。

← 浏览本章全部代码